reverse symbol renaming for signals

This commit is contained in:
Martino Ferrari
2026-01-25 00:18:40 +01:00
parent bbeb344d19
commit 12ed4cfbd2
2 changed files with 94 additions and 2 deletions

View File

@@ -1131,9 +1131,12 @@ func HandleRename(params RenameParams) *WorkspaceEdit {
var targetNode *index.ProjectNode
var targetField *parser.Field
if res.Node != nil {
targetNode = res.Node
if res.Node.Target != nil {
targetNode = res.Node.Target
} else {
targetNode = res.Node
}
} else if res.Field != nil {
targetField = res.Field
} else if res.Reference != nil {

View File

@@ -0,0 +1,89 @@
package integration
import (
"testing"
"github.com/marte-community/marte-dev-tools/internal/index"
"github.com/marte-community/marte-dev-tools/internal/lsp"
"github.com/marte-community/marte-dev-tools/internal/parser"
"github.com/marte-community/marte-dev-tools/internal/validator"
)
func TestRenameImplicitToDefinition(t *testing.T) {
// Setup
lsp.Tree = index.NewProjectTree()
lsp.Documents = make(map[string]string)
content := `
+DS = {
Class = FileReader
+Signals = {
Sig1 = { Type = uint32 }
}
}
+GAM = {
Class = IOGAM
+InputSignals = {
// Implicit usage
Sig1 = { DataSource = DS }
}
}
`
uri := "file://rename_imp.marte"
lsp.Documents[uri] = content
p := parser.NewParser(content)
cfg, err := p.Parse()
if err != nil {
t.Fatal(err)
}
lsp.Tree.AddFile("rename_imp.marte", cfg)
lsp.Tree.ResolveReferences()
// Run validator to link targets
v := validator.NewValidator(lsp.Tree, ".")
v.ValidateProject()
// Rename Implicit Sig1 (Line 11, 0-based 11)
// Line 11: " Sig1 = { DataSource = DS }"
params := lsp.RenameParams{
TextDocument: lsp.TextDocumentIdentifier{URI: uri},
Position: lsp.Position{Line: 11, Character: 9},
NewName: "NewSig",
}
edit := lsp.HandleRename(params)
if edit == nil {
t.Fatal("Expected edits")
}
edits := edit.Changes[uri]
// Expect:
// 1. Rename Implicit Sig1 (Line 9) -> NewSig
// 2. Rename Definition Sig1 (Line 4) -> NewSig
if len(edits) != 2 {
t.Errorf("Expected 2 edits, got %d", len(edits))
for _, e := range edits {
t.Logf("Edit at line %d", e.Range.Start.Line)
}
}
foundDef := false
foundImp := false
for _, e := range edits {
if e.Range.Start.Line == 4 {
foundDef = true
}
if e.Range.Start.Line == 11 {
foundImp = true
}
}
if !foundDef {
t.Error("Definition not renamed")
}
if !foundImp {
t.Error("Implicit usage not renamed")
}
}