adding referencing of variables

This commit is contained in:
Martino Ferrari
2026-01-29 15:50:37 +01:00
parent 8be139ab27
commit 2e25c8ff11

View File

@@ -1011,14 +1011,34 @@ func HandleDefinition(params DefinitionParams) any {
} }
var targetNode *index.ProjectNode var targetNode *index.ProjectNode
if res.Reference != nil && res.Reference.Target != nil { var targetVar *parser.VariableDefinition
if res.Reference != nil {
if res.Reference.Target != nil {
targetNode = res.Reference.Target targetNode = res.Reference.Target
} else if res.Reference.TargetVariable != nil {
targetVar = res.Reference.TargetVariable
}
} else if res.Node != nil { } else if res.Node != nil {
if res.Node.Target != nil { if res.Node.Target != nil {
targetNode = res.Node.Target targetNode = res.Node.Target
} else { } else {
targetNode = res.Node targetNode = res.Node
} }
} else if res.Variable != nil {
targetVar = res.Variable
}
if targetVar != nil {
if info, ok := Tree.Variables[targetVar.Name]; ok {
return []Location{{
URI: "file://" + info.File,
Range: Range{
Start: Position{Line: targetVar.Position.Line - 1, Character: targetVar.Position.Column - 1},
End: Position{Line: targetVar.Position.Line - 1, Character: targetVar.Position.Column - 1 + len(targetVar.Name) + 5}, // #var + space + Name? Rough estimate
},
}}
}
} }
if targetNode != nil { if targetNode != nil {
@@ -1051,10 +1071,47 @@ func HandleReferences(params ReferenceParams) []Location {
} }
var targetNode *index.ProjectNode var targetNode *index.ProjectNode
var targetVar *parser.VariableDefinition
if res.Node != nil { if res.Node != nil {
targetNode = res.Node targetNode = res.Node
} else if res.Reference != nil && res.Reference.Target != nil { } else if res.Reference != nil {
if res.Reference.Target != nil {
targetNode = res.Reference.Target targetNode = res.Reference.Target
} else if res.Reference.TargetVariable != nil {
targetVar = res.Reference.TargetVariable
}
} else if res.Variable != nil {
targetVar = res.Variable
}
if targetVar != nil {
var locations []Location
// Declaration
if params.Context.IncludeDeclaration {
if info, ok := Tree.Variables[targetVar.Name]; ok {
locations = append(locations, Location{
URI: "file://" + info.File,
Range: Range{
Start: Position{Line: targetVar.Position.Line - 1, Character: targetVar.Position.Column - 1},
End: Position{Line: targetVar.Position.Line - 1, Character: targetVar.Position.Column - 1 + len(targetVar.Name) + 5},
},
})
}
}
// References
for _, ref := range Tree.References {
if ref.TargetVariable == targetVar {
locations = append(locations, Location{
URI: "file://" + ref.File,
Range: Range{
Start: Position{Line: ref.Position.Line - 1, Character: ref.Position.Column - 1},
End: Position{Line: ref.Position.Line - 1, Character: ref.Position.Column - 1 + len(ref.Name) + 1}, // $Name
},
})
}
}
return locations
} }
if targetNode == nil { if targetNode == nil {