diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-01-31 00:38:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-31 00:38:08 +0100 |
| commit | d7531bd1ae6caf7fcd7395195865c553aa2c4ce4 (patch) | |
| tree | 6445a6c5409877711bc9f81f127fcc83f7fcd76b | |
| parent | bf7fd9443c1d8cadbe47309a82210fbf2392f66b (diff) | |
| parent | df59c13da36a7bffeb5c5d3744934f4ec496261b (diff) | |
Merge pull request #303 from xb-bx/snippets-fix
Fix snippets for dynamic arrays and maps
| -rw-r--r-- | src/server/completion.odin | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin index 36db067..4bb0430 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -675,6 +675,14 @@ get_selector_completion :: proc( selector, &items, ) + case SymbolSliceValue: + list.isIncomplete = false + append_magic_dynamic_array_completion( + position_context, + selector, + &items, + ) + case SymbolMapValue: list.isIncomplete = false append_magic_map_completion(position_context, selector, &items) @@ -1732,7 +1740,7 @@ append_magic_map_completion :: proc( additionalTextEdits := make([]TextEdit, 1, context.temp_allocator) additionalTextEdits[0] = remove_edit - + symbol_str := get_expression_string_from_position_context(position_context) //for { item := CompletionItem { @@ -1743,7 +1751,7 @@ append_magic_map_completion :: proc( textEdit = TextEdit { newText = fmt.tprintf( "for ${{1:k}}, ${{2:v}} in %v {{\n\t$0 \n}}", - symbol.name, + symbol_str, ), range = {start = range.end, end = range.end}, }, @@ -1754,7 +1762,17 @@ append_magic_map_completion :: proc( append(items, item) } } - +get_expression_string_from_position_context :: proc(position_context: ^DocumentPositionContext) -> string { + src := position_context.file.src + if position_context.call != nil { + return src[position_context.call.pos.offset:position_context.call.end.offset] + } else if position_context.field != nil { + return src[position_context.field.pos.offset:position_context.field.end.offset] + } else if position_context.selector != nil { + return src[position_context.selector.pos.offset:position_context.selector.end.offset] + } + return "" +} append_magic_dynamic_array_completion :: proc( position_context: ^DocumentPositionContext, symbol: Symbol, @@ -1779,9 +1797,11 @@ append_magic_dynamic_array_completion :: proc( additionalTextEdits := make([]TextEdit, 1, context.temp_allocator) additionalTextEdits[0] = remove_edit + symbol_str := get_expression_string_from_position_context(position_context) + //len { - text := fmt.tprintf("len(%v)", symbol.name) + text := fmt.tprintf("len(%v)", symbol_str) item := CompletionItem { label = "len", @@ -1807,7 +1827,7 @@ append_magic_dynamic_array_completion :: proc( textEdit = TextEdit { newText = fmt.tprintf( "for i in %v {{\n\t$0 \n}}", - symbol.name, + symbol_str, ), range = {start = range.end, end = range.end}, }, |