From f648622dcfaac3a99b31c413fb7160f3b2d54d5d Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Wed, 30 Apr 2025 11:21:07 -0600 Subject: [PATCH] d2oracle: update signature of UpdateImport --- d2oracle/edit.go | 34 +++++-------------- d2oracle/edit_test.go | 77 ++++--------------------------------------- 2 files changed, 14 insertions(+), 97 deletions(-) diff --git a/d2oracle/edit.go b/d2oracle/edit.go index 06a8c0ac9..a06784ef3 100644 --- a/d2oracle/edit.go +++ b/d2oracle/edit.go @@ -3325,42 +3325,24 @@ func filterReservedPath(path []*d2ast.StringBox) (filtered []*d2ast.StringBox) { return } -func UpdateImport(g *d2graph.Graph, boardPath []string, path string, newPath *string) (_ *d2graph.Graph, err error) { +func UpdateImport(dsl, path string, newPath *string) (_ string, err error) { if newPath == nil { defer xdefer.Errorf(&err, "failed to remove import %#v", path) } else { defer xdefer.Errorf(&err, "failed to update import from %#v to %#v", path, *newPath) } - boardG := g - baseAST := g.AST - - if len(boardPath) > 0 { - // When compiling a nested board, we can read from boardG but only write to baseBoardG - boardG = GetBoardGraph(g, boardPath) - if boardG == nil { - return nil, fmt.Errorf("board %v not found", boardPath) - } - // TODO beter name - baseAST = boardG.BaseAST - if baseAST == nil { - return nil, fmt.Errorf("board %v cannot be modified through this file", boardPath) - } + ast, err := d2parser.Parse("", strings.NewReader(dsl), nil) + if err != nil { + return "", err } - _updateImport(boardG, baseAST, path, newPath) + _updateImport(ast, path, newPath) - if len(boardPath) > 0 { - replaced := ReplaceBoardNode(g.AST, baseAST, boardPath) - if !replaced { - return nil, fmt.Errorf("board %v AST not found", boardPath) - } - } - - return recompile(g) + return d2format.Format(ast), nil } -func _updateImport(g *d2graph.Graph, m *d2ast.Map, oldPath string, newPath *string) { +func _updateImport(m *d2ast.Map, oldPath string, newPath *string) { for i := 0; i < len(m.Nodes); i++ { node := m.Nodes[i] @@ -3417,7 +3399,7 @@ func _updateImport(g *d2graph.Graph, m *d2ast.Map, oldPath string, newPath *stri } if node.MapKey.Value.Map != nil { - _updateImport(g, node.MapKey.Value.Map, oldPath, newPath) + _updateImport(node.MapKey.Value.Map, oldPath, newPath) } } } diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index 7a022f355..275e34bab 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -9618,9 +9618,6 @@ func TestUpdateImport(t *testing.T) { text: `x: @meow y `, - fsTexts: map[string]string{ - "meow.d2": "k", - }, path: "meow", newPath: nil, exp: `x @@ -9632,9 +9629,6 @@ y text: `x ...@meow y`, - fsTexts: map[string]string{ - "meow.d2": "k", - }, path: "meow", newPath: nil, exp: `x @@ -9647,10 +9641,6 @@ y text: `x: @meow y `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x: @woof @@ -9662,10 +9652,6 @@ y text: `x: @foo/meow y `, - fsTexts: map[string]string{ - "foo/meow.d2": "k", - "bar/woof.d2": "k", - }, path: "foo/meow", newPath: go2.Pointer("bar/woof"), exp: `x: @bar/woof @@ -9678,10 +9664,6 @@ y ...@meow y `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x @@ -9694,9 +9676,6 @@ y text: `x: @cat y `, - fsTexts: map[string]string{ - "cat.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x: @cat @@ -9710,10 +9689,6 @@ y y } `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `container: { @@ -9729,9 +9704,6 @@ y y } `, - fsTexts: map[string]string{ - "meow.d2": "k", - }, path: "meow", newPath: nil, exp: `container: { @@ -9746,10 +9718,6 @@ y y: @meow z `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x: @woof @@ -9764,10 +9732,6 @@ y ...@meow z `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x: @woof @@ -9786,10 +9750,6 @@ layers: { } } `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x @@ -9811,10 +9771,6 @@ layers: { } } `, - fsTexts: map[string]string{ - "meow.d2": "k", - "woof.d2": "k", - }, path: "meow", newPath: go2.Pointer("woof"), exp: `x @@ -9832,12 +9788,6 @@ layers: { y: @foo/baz z `, - fsTexts: map[string]string{ - "foo/bar.d2": "k", - "foo/baz.d2": "k", - "woof/bar.d2": "k", - "woof/baz.d2": "k", - }, path: "foo/", newPath: go2.Pointer("woof/"), exp: `x: @woof/bar @@ -9851,10 +9801,6 @@ z y: @foo/baz z `, - fsTexts: map[string]string{ - "foo/bar.d2": "k", - "foo/baz.d2": "k", - }, path: "foo/", newPath: nil, exp: `x @@ -9868,12 +9814,6 @@ z y: @foo/qux/quux z `, - fsTexts: map[string]string{ - "foo/bar/baz.d2": "k", - "foo/qux/quux.d2": "k", - "woof/bar/baz.d2": "k", - "woof/qux/quux.d2": "k", - }, path: "foo/", newPath: go2.Pointer("woof/"), exp: `x: @woof/bar/baz @@ -9888,18 +9828,13 @@ z t.Run(tc.name, func(t *testing.T) { t.Parallel() - et := editTest{ - text: tc.text, - fsTexts: tc.fsTexts, - testFunc: func(g *d2graph.Graph) (*d2graph.Graph, error) { - return d2oracle.UpdateImport(g, tc.boardPath, tc.path, tc.newPath) - }, - - exp: tc.exp, - expErr: tc.expErr, - assertions: tc.assertions, + got, err := d2oracle.UpdateImport(tc.text, tc.path, tc.newPath) + if err != nil { + t.Fatal(err) + } + if got != tc.exp { + t.Fatalf("tc.exp != newText:\n%s", got) } - et.run(t) }) } }