diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/analysis.odin | 15 | ||||
| -rw-r--r-- | src/server/completion.odin | 7 |
2 files changed, 22 insertions, 0 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, |