aboutsummaryrefslogtreecommitdiff
path: root/src/server/generics.odin
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-16 18:02:47 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-16 18:02:47 -0400
commita31f9f0a97f543f51ca49a268f94c5078c9b9661 (patch)
treeac608f57e916ab461cc3c3334b76b9b53cf98ee0 /src/server/generics.odin
parentf3223ddbaeed978da5de5d70667f146637b07293 (diff)
Correctly resolve generic types where the underlying identifier is a pointer
Diffstat (limited to 'src/server/generics.odin')
-rw-r--r--src/server/generics.odin6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 984cb8e..374ffc9 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -63,7 +63,8 @@ resolve_poly :: proc(
if ident, ok := unwrap_ident(type); ok {
call_node_id := reflect.union_variant_typeid(call_node.derived)
specialization_id := reflect.union_variant_typeid(specialization.derived)
- if call_node_id == specialization_id {
+ if ast_context.position_hint == .TypeDefinition && call_node_id == specialization_id {
+ // TODO: Fix this so it doesn't need to be aware that we're in a type definition
// if the specialization type matches the type of the parameter passed to the proc
// we store that rather than the specialization so we can follow it correctly
// for things like `textDocument/typeDefinition`
@@ -526,6 +527,9 @@ 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 {
+ if ident, ok := call_expr.args[i].derived.(^ast.Ident); ok && symbol.name == "" {
+ symbol.name = ident.name
+ }
file := strings.trim_prefix(symbol.uri, "file://")
if file == "" {