aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-06-11 22:12:04 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-06-11 22:12:04 +0200
commita66e2ef9bc46f3332d458895a74299ebb122dfed (patch)
treed8ed1f464bb48e8c863f81eff0ec8291353e6f23 /src/server
parenta7bb78679028f2ade9c0975c4ec895db3fd62d9e (diff)
More improvements to renaming enums
Diffstat (limited to 'src/server')
-rw-r--r--src/server/file_resolve.odin28
-rw-r--r--src/server/references.odin25
2 files changed, 25 insertions, 28 deletions
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index ebf984d..48835e8 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -479,36 +479,24 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
resolve_node(n.poly_params, data)
resolve_node(n.align, data)
resolve_nodes(n.variants, data)
+ case ^Enum_Type:
+ data.position_context.enum_type = n
+ resolve_node(n.base_type, data)
+ resolve_nodes(n.fields, data)
if data.flag != .None {
- for variant in n.variants {
- data.symbols[cast(uintptr)variant] = SymbolAndNode {
- node = variant,
+ for field in n.fields {
+ data.symbols[cast(uintptr)field] = SymbolAndNode {
+ node = field,
symbol = Symbol {
range = common.get_token_range(
- variant,
+ field,
string(data.document.text),
),
},
}
}
}
- case ^Enum_Type:
- data.position_context.enum_type = n
- resolve_node(n.base_type, data)
- resolve_nodes(n.fields, data)
-
- for field in n.fields {
- data.symbols[cast(uintptr)field] = SymbolAndNode {
- node = field,
- symbol = Symbol {
- range = common.get_token_range(
- field,
- string(data.document.text),
- ),
- },
- }
- }
case ^Bit_Set_Type:
data.position_context.bitset_type = n
resolve_node(n.elem, data)
diff --git a/src/server/references.odin b/src/server/references.odin
index 1c77e45..0fa739e 100644
--- a/src/server/references.odin
+++ b/src/server/references.odin
@@ -127,15 +127,24 @@ resolve_references :: proc(
found := false
for variant in position_context.union_type.variants {
if position_in_node(variant, position_context.position) {
- symbol = Symbol {
- range = common.get_token_range(
- variant,
- string(document.text),
- ),
+ if ident, ok := variant.derived.(^ast.Ident); ok {
+ symbol, ok = resolve_location_identifier(
+ ast_context,
+ ident^,
+ )
+ reference = ident.name
+ resolve_flag = .Identifier
+
+ if !ok {
+ return {}, false
+ }
+
+ found = true
+
+ break
+ } else {
+ return {}, false
}
- found = true
- resolve_flag = .Identifier
- break
}
}
if !found {