aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-07-01 10:16:24 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-07-01 14:34:35 -0400
commit34b70ebbe5849bd4291711339fe6e7999fe4bb82 (patch)
treee2c6cb44f8066f68ce00f3a4b866b8af03afb54b /src
parent0405de03a31b02ab9b7e5233b01c31da588857ee (diff)
Set file for generic expressions to the file of the symbol, rather than the file where it is used
Diffstat (limited to 'src')
-rw-r--r--src/server/analysis.odin6
-rw-r--r--src/server/completion.odin2
-rw-r--r--src/server/generics.odin6
3 files changed, 8 insertions, 6 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 621f6dd..611bf4b 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -211,7 +211,7 @@ set_ast_package_from_node_scoped :: proc(ast_context: ^AstContext, node: ast.Nod
ast_context.deferred_count += 1
pkg := get_package_from_node(node)
- if pkg != "" {
+ if pkg != "" && pkg != "." {
ast_context.current_package = pkg
} else {
ast_context.current_package = ast_context.document_package
@@ -900,7 +900,7 @@ internal_resolve_type_expression :: proc(ast_context: ^AstContext, node: ^ast.Ex
return {}, false
}
- set_ast_package_scoped(ast_context)
+ set_ast_package_from_node_scoped(ast_context, node)
if check_node_recursion(ast_context, node) {
return {}, false
@@ -1152,7 +1152,6 @@ resolve_selector_expression :: proc(ast_context: ^AstContext, node: ^ast.Selecto
)
selector_expr.expr = s.return_types[0].type
selector_expr.field = node.field
-
return internal_resolve_type_expression(ast_context, selector_expr)
}
case SymbolStructValue:
@@ -1326,6 +1325,7 @@ internal_resolve_type_identifier :: proc(ast_context: ^AstContext, node: ast.Ide
set_ast_package_scoped(ast_context)
+
if v, ok := keyword_map[node.name]; ok {
//keywords
ident := new_type(Ident, node.pos, node.end, ast_context.allocator)
diff --git a/src/server/completion.odin b/src/server/completion.odin
index ca47056..de8274a 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -562,8 +562,6 @@ get_selector_completion :: proc(
continue
}
- set_ast_package_from_node_scoped(ast_context, v.types[i])
-
if symbol, ok := resolve_type_expression(ast_context, v.types[i]); ok {
if expr, ok := position_context.selector.derived.(^ast.Selector_Expr); ok {
if expr.op.text == "->" && symbol.type != .Function {
diff --git a/src/server/generics.odin b/src/server/generics.odin
index fcb1397..c34a0ce 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -493,7 +493,11 @@ resolve_generic_function_symbol :: proc(
ast_context.current_package = ast_context.document_package
if symbol, ok := resolve_type_expression(ast_context, call_expr.args[i]); ok {
- symbol_expr := symbol_to_expr(symbol, call_expr.args[i].pos.file, context.temp_allocator)
+ file := strings.trim_prefix(symbol.uri, "file://")
+ if file == "" {
+ file = call_expr.args[i].pos.file
+ }
+ symbol_expr := symbol_to_expr(symbol, file, context.temp_allocator)
if symbol_expr == nil {
return {}, false