Skip to content

Commit

Permalink
fix: also visit range variable definition
Browse files Browse the repository at this point in the history
  • Loading branch information
qvalentin committed May 29, 2024
1 parent 9de28c4 commit 552c020
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 7 deletions.
21 changes: 17 additions & 4 deletions internal/lsp/symbol_table_variables_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package lsp

import (
"fmt"
"testing"

sitter "github.com/smacker/go-tree-sitter"
Expand Down Expand Up @@ -37,16 +38,16 @@ func TestSymbolTableForVariableDefinitions(t *testing.T) {
expectedVariableDefinitions: map[string][]VariableDefinition{
"$type": {
{
Value: ".$root.Values.deployments",
VariableType: VariableTypeRangeKey,
Value: "$root.Values.deployments",
VariableType: VariableTypeRangeKeyOrIndex,
Range: sitter.Range{
// TODO: fill this with the correct result
},
},
},
"$config": {
{
Value: ".$root.Values.deployments",
Value: "$root.Values.deployments",
VariableType: VariableTypeRangeValue,
Range: sitter.Range{
// TODO: fill this with the correct result
Expand All @@ -57,14 +58,26 @@ func TestSymbolTableForVariableDefinitions(t *testing.T) {
},
{
template: `{{ $x := .Values }}{{ $x.test }}{{ .Values.test }}`,
expectedVariableDefinitions: map[string][]VariableDefinition{
"$x": {
{
Value: ".Values",
VariableType: VariableTypeAssigment,
Range: sitter.Range{
// TODO: fill this with the correct result
},
},
},
},
},
}

for _, v := range testCases {
t.Run(v.template, func(t *testing.T) {
ast := ParseAst(nil, v.template)
symbolTable := NewSymbolTable(ast, []byte(v.template))
assert.Equal(t, v.expectedVariableDefinitions, symbolTable.variableDefinitions)
assert.Equal(t, v.expectedVariableDefinitions, symbolTable.variableDefinitions,
fmt.Sprintf("Ast was %s", ast.RootNode()))
})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ type VariableType int64

const (
VariableTypeAssigment VariableType = iota
VariableTypeRangeKey
VariableTypeRangeKeyOrIndex
VariableTypeRangeValue
)

Expand Down Expand Up @@ -37,7 +37,29 @@ func NewVariablesVisitor(symbolTable *SymbolTable, content []byte) *VariablesVis
func (v *VariablesVisitor) Enter(node *sitter.Node) {
switch node.Type() {
case gotemplate.NodeTypeRangeVariableDefinition:
// TODO:
keyOrIndexVariableName := node.ChildByFieldName("index")
valueVariableName := node.ChildByFieldName("element")
variableValueNode := node.ChildByFieldName("range")
if variableValueNode == nil {
return
}
variableValue := variableValueNode.Content(v.content)
if keyOrIndexVariableName != nil {
v.symbolTable.AddVariableDefinition(keyOrIndexVariableName.Content(v.content), VariableDefinition{
Value: variableValue,
VariableType: VariableTypeRangeKeyOrIndex,
Range: sitter.Range{},
})
}

if valueVariableName != nil {
v.symbolTable.AddVariableDefinition(valueVariableName.Content(v.content), VariableDefinition{
Value: variableValue,
VariableType: VariableTypeRangeValue,
Range: sitter.Range{},
})
}

case gotemplate.NodeTypeVariableDefinition:
if node.NamedChildCount() < 2 {
return
Expand Down
2 changes: 1 addition & 1 deletion internal/lsp/visitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func (v *Visitors) visitNodesRecursiveWithScopeShift(node *sitter.Node) {
break
}
}
v.visitNodesRecursiveWithScopeShift(rangeNode)
v.visitNodesRecursiveWithScopeShift(node.NamedChild(0))
for _, visitor := range v.visitors {
visitor.EnterContextShift(rangeNode, "[]")
}
Expand Down

0 comments on commit 552c020

Please sign in to comment.