update getRefRanges
This commit is contained in:
parent
4550117025
commit
46b499af9f
1 changed files with 14 additions and 34 deletions
48
d2js/js.go
48
d2js/js.go
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"oss.terrastruct.com/d2/d2ast"
|
"oss.terrastruct.com/d2/d2ast"
|
||||||
"oss.terrastruct.com/d2/d2compiler"
|
"oss.terrastruct.com/d2/d2compiler"
|
||||||
"oss.terrastruct.com/d2/d2format"
|
"oss.terrastruct.com/d2/d2format"
|
||||||
|
"oss.terrastruct.com/d2/d2lsp"
|
||||||
"oss.terrastruct.com/d2/d2oracle"
|
"oss.terrastruct.com/d2/d2oracle"
|
||||||
"oss.terrastruct.com/d2/d2parser"
|
"oss.terrastruct.com/d2/d2parser"
|
||||||
"oss.terrastruct.com/d2/lib/urlenc"
|
"oss.terrastruct.com/d2/lib/urlenc"
|
||||||
|
|
@ -95,56 +96,35 @@ type jsRefRanges struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func jsGetRefRanges(this js.Value, args []js.Value) interface{} {
|
func jsGetRefRanges(this js.Value, args []js.Value) interface{} {
|
||||||
dsl := args[0].String()
|
fsRaw := args[0].String()
|
||||||
key := args[1].String()
|
key := args[1].String()
|
||||||
|
|
||||||
mk, err := d2parser.ParseMapKey(key)
|
var fs map[string]string
|
||||||
|
err := json.Unmarshal([]byte(fsRaw), &fs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ret := jsRefRanges{D2Error: err.Error()}
|
ret := jsRefRanges{D2Error: err.Error()}
|
||||||
str, _ := json.Marshal(ret)
|
str, _ := json.Marshal(ret)
|
||||||
return string(str)
|
return string(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
g, _, err := d2compiler.Compile("", strings.NewReader(dsl), &d2compiler.CompileOptions{
|
_, err = d2parser.ParseMapKey(key)
|
||||||
UTF16Pos: true,
|
if err != nil {
|
||||||
})
|
ret := jsRefRanges{D2Error: err.Error()}
|
||||||
var pe *d2parser.ParseError
|
str, _ := json.Marshal(ret)
|
||||||
|
return string(str)
|
||||||
|
}
|
||||||
|
|
||||||
|
refs, err := d2lsp.GetFieldRefs("", fs, key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.As(err, &pe) {
|
|
||||||
serialized, _ := json.Marshal(err)
|
|
||||||
// TODO
|
|
||||||
ret := jsRefRanges{ParseError: string(serialized)}
|
|
||||||
str, _ := json.Marshal(ret)
|
|
||||||
return string(str)
|
|
||||||
}
|
|
||||||
ret := jsRefRanges{D2Error: err.Error()}
|
ret := jsRefRanges{D2Error: err.Error()}
|
||||||
str, _ := json.Marshal(ret)
|
str, _ := json.Marshal(ret)
|
||||||
return string(str)
|
return string(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
var ranges []d2ast.Range
|
var ranges []d2ast.Range
|
||||||
if len(mk.Edges) == 1 {
|
|
||||||
edge := d2oracle.GetEdge(g, nil, key)
|
|
||||||
if edge == nil {
|
|
||||||
ret := jsRefRanges{D2Error: "edge not found"}
|
|
||||||
str, _ := json.Marshal(ret)
|
|
||||||
return string(str)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ref := range edge.References {
|
for _, ref := range refs {
|
||||||
ranges = append(ranges, ref.MapKey.Range)
|
ranges = append(ranges, ref.AST().GetRange())
|
||||||
}
|
|
||||||
} else {
|
|
||||||
obj := d2oracle.GetObj(g, nil, key)
|
|
||||||
if obj == nil {
|
|
||||||
ret := jsRefRanges{D2Error: "obj not found"}
|
|
||||||
str, _ := json.Marshal(ret)
|
|
||||||
return string(str)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ref := range obj.References {
|
|
||||||
ranges = append(ranges, ref.Key.Range)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := jsRefRanges{
|
resp := jsRefRanges{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue