diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-07-01 10:16:24 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-07-01 14:34:35 -0400 |
| commit | 34b70ebbe5849bd4291711339fe6e7999fe4bb82 (patch) | |
| tree | e2c6cb44f8066f68ce00f3a4b866b8af03afb54b /src | |
| parent | 0405de03a31b02ab9b7e5233b01c31da588857ee (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.odin | 6 | ||||
| -rw-r--r-- | src/server/completion.odin | 2 | ||||
| -rw-r--r-- | src/server/generics.odin | 6 |
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 |