aboutsummaryrefslogtreecommitdiff
path: root/src/server/analysis.odin
diff options
context:
space:
mode:
authorBradley Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-24 15:47:21 -0400
committerGitHub <noreply@github.com>2025-09-24 15:47:21 -0400
commita530e1c8eec638adf78f1c77720fbc07bdd31de5 (patch)
tree30e42a80052a954f351780c16129195363d4fa22 /src/server/analysis.odin
parent495012ffe93385f399d3947952466448c692f0d4 (diff)
parentd13384a1e9a0758e4c608f4dfe3226e78fa4803e (diff)
Merge pull request #1050 from BradLewis/feat/goto-def-packages
Goto definition on package use goes to package declaration
Diffstat (limited to 'src/server/analysis.odin')
-rw-r--r--src/server/analysis.odin23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 8e1d7f0..9ee621a 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -2591,7 +2591,9 @@ resolve_location_identifier :: proc(ast_context: ^AstContext, node: ast.Ident) -
symbol.uri = uri.uri
symbol.flags |= {.Local}
return symbol, true
- } else if global, ok := ast_context.globals[node.name]; ok {
+ }
+
+ if global, ok := ast_context.globals[node.name]; ok {
symbol.range = common.get_token_range(global.name_expr, ast_context.file.src)
uri := common.create_uri(global.expr.pos.file, ast_context.allocator)
symbol.pkg = ast_context.document_package
@@ -2599,6 +2601,25 @@ resolve_location_identifier :: proc(ast_context: ^AstContext, node: ast.Ident) -
return symbol, true
}
+ for imp in ast_context.imports {
+ if imp.name == ast_context.current_package {
+ continue
+ }
+
+ if strings.compare(imp.base, node.name) == 0 {
+ symbol := Symbol {
+ type = .Package,
+ pkg = imp.name,
+ value = SymbolPackageValue{},
+ range = imp.range,
+ }
+
+ try_build_package(symbol.pkg)
+
+ return symbol, true
+ }
+ }
+
pkg := get_package_from_node(node)
if symbol, ok := lookup(node.name, pkg, node.pos.file); ok {
return symbol, ok