diff options
| author | cornishon <zadroznyadam@pm.me> | 2025-02-02 11:51:28 +0100 |
|---|---|---|
| committer | cornishon <zadroznyadam@pm.me> | 2025-02-02 12:05:09 +0100 |
| commit | fcae72f052ceaec3c8ec1b02f70924a8f463c83d (patch) | |
| tree | d1de04abff034c2269c55d239c2e0990df7da4d5 /src | |
| parent | 100f2183e07cd3347fe7e988588187ea8594a2f4 (diff) | |
Strip extra pointers for `len`, `cap` and `for` completions.
Given `d: [dynamic]int` or `p: ^[dynamic]int` both `len(d)` and `len(p)`
work, but `p2: ^^[dynamic]int` doesn't. Same for `cap` and `for`.
So, if there are 2 or more pointers on the type, strip them.
E.g. given `p2: ^^[dynamic]int`, `p2.cap` autocompletes to `cap(p2^)`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/completion.odin | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin index 1f65af9..15c0681 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -1725,7 +1725,14 @@ 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) + deref_suffix := "" + if symbol.pointers > 1 { + deref_suffix = common.repeat("^", symbol.pointers - 1, context.temp_allocator) + } + dereferenced_symbol_str := fmt.tprint(symbol_str, deref_suffix, sep = "") + //for { item := CompletionItem { @@ -1734,7 +1741,7 @@ append_magic_map_completion :: proc( detail = "for", additionalTextEdits = additionalTextEdits, textEdit = TextEdit { - newText = fmt.tprintf("for ${{1:k}}, ${{2:v}} in %v {{\n\t$0 \n}}", symbol_str), + newText = fmt.tprintf("for ${{1:k}}, ${{2:v}} in %v {{\n\t$0 \n}}", dereferenced_symbol_str), range = {start = range.end, end = range.end}, }, insertTextFormat = .Snippet, @@ -1746,7 +1753,7 @@ append_magic_map_completion :: proc( //len { - text := fmt.tprintf("len(%v)", symbol_str) + text := fmt.tprintf("len(%v)", dereferenced_symbol_str) item := CompletionItem { label = "len", @@ -1761,7 +1768,7 @@ append_magic_map_completion :: proc( //cap { - text := fmt.tprintf("cap(%v)", symbol_str) + text := fmt.tprintf("cap(%v)", dereferenced_symbol_str) item := CompletionItem { label = "cap", @@ -1811,10 +1818,15 @@ append_magic_dynamic_array_completion :: proc( additionalTextEdits[0] = remove_edit symbol_str := get_expression_string_from_position_context(position_context) + deref_suffix := "" + if symbol.pointers > 1 { + deref_suffix = common.repeat("^", symbol.pointers - 1, context.temp_allocator) + } + dereferenced_symbol_str := fmt.tprint(symbol_str, deref_suffix, sep = "") //len { - text := fmt.tprintf("len(%v)", symbol_str) + text := fmt.tprintf("len(%v)", dereferenced_symbol_str) item := CompletionItem { label = "len", @@ -1835,7 +1847,7 @@ append_magic_dynamic_array_completion :: proc( detail = "for", additionalTextEdits = additionalTextEdits, textEdit = TextEdit { - newText = fmt.tprintf("for i in %v {{\n\t$0 \n}}", symbol_str), + newText = fmt.tprintf("for i in %v {{\n\t$0 \n}}", dereferenced_symbol_str), range = {start = range.end, end = range.end}, }, insertTextFormat = .Snippet, @@ -1852,7 +1864,7 @@ append_magic_dynamic_array_completion :: proc( //cap { - text := fmt.tprintf("cap(%v)", symbol_str) + text := fmt.tprintf("cap(%v)", dereferenced_symbol_str) item := CompletionItem { label = "cap", |