diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/analysis.odin | 15 | ||||
| -rw-r--r-- | src/server/completion.odin | 7 | ||||
| -rw-r--r-- | src/testing/testing.odin | 2 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index f18ec0b..9fb6ad0 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -4477,6 +4477,21 @@ position_in_proc_decl :: proc(position_context: ^DocumentPositionContext) -> boo return false } +position_in_struct_decl :: proc(position_context: ^DocumentPositionContext) -> bool { + if position_context.value_decl == nil { + return false + } + + if len(position_context.value_decl.values) != 1 { + return false + } + + if _, ok := position_context.value_decl.values[0].derived.(^ast.Struct_Type); ok { + return true + } + + return false +} is_lhs_comp_lit :: proc(position_context: ^DocumentPositionContext) -> bool { if position_context.position <= position_context.comp_lit.open.offset { diff --git a/src/server/completion.odin b/src/server/completion.odin index d1a630a..3921958 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -236,6 +236,13 @@ convert_completion_results :: proc( continue } + if position_in_struct_decl(position_context) { + to_skip: bit_set[SymbolType] = {.Function, .Variable, .Constant, .Field} + if result.symbol.type in to_skip { + continue + } + } + if result.snippet.insert != "" { item := CompletionItem { label = result.symbol.name, diff --git a/src/testing/testing.odin b/src/testing/testing.odin index 200645e..e03e8b5 100644 --- a/src/testing/testing.odin +++ b/src/testing/testing.odin @@ -254,7 +254,7 @@ expect_completion_docs :: proc( for expect_exclude in expect_excluded { for completion in completion_list.items { - if expect_exclude == completion.detail { + if expect_exclude == get_doc(completion.documentation) { log.errorf("Expected completion label %v to not be included", expect_exclude) } } |