diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-12-06 22:39:46 -0500 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-12-06 22:39:46 -0500 |
| commit | 236f2f1f684577a8bf7daf1f0decfd2686755d05 (patch) | |
| tree | 5499b4783eae99a29056b67a4493dcbaeb376014 | |
| parent | 265db94b731bdb7388e0d6af52fd8d9a0d93c01c (diff) | |
Fix selector completions for global constant declarations
| -rw-r--r-- | src/server/completion.odin | 5 | ||||
| -rw-r--r-- | tests/completions_test.odin | 18 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin index 8a0f371..0324b23 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -785,7 +785,10 @@ get_selector_completion :: proc( selector.type != .Field && selector.type != .Package && selector.type != .Enum && - selector.type != .Function { + selector.type != .Function && + (selector.type == .Struct && .Variable not_in selector.flags) { + // We don't want completions for struct types, but we do want completions for constant variables. + // See tests `ast_global_non_mutable_completion` vs `ast_completion_global_selector_from_local_scope` return is_incomplete } diff --git a/tests/completions_test.odin b/tests/completions_test.odin index 72dcb86..5ab4181 100644 --- a/tests/completions_test.odin +++ b/tests/completions_test.odin @@ -5130,3 +5130,21 @@ ast_completion_implicit_selector_binary_expr :: proc(t: ^testing.T) { } test.expect_completion_docs(t, &source, "", {"A", "B"}) } + +@(test) +ast_completion_global_selector_from_local_scope :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: struct { + foo: int, + } + + FOO :: Foo{} + + main :: proc() { + FOO.{*} + } + `, + } + test.expect_completion_docs(t, &source, "", {"Foo.foo: int"}) +} |