fix reserved casing

This commit is contained in:
Alexander Wang 2024-11-23 19:14:00 -08:00
parent 062faa41b8
commit b1a318631b
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
2 changed files with 10 additions and 8 deletions

View file

@ -2113,7 +2113,7 @@ b
tassert.Equal(t, 5, len(g.Objects))
tassert.Equal(t, "a", g.Objects[0].ID)
tassert.Equal(t, "b", g.Objects[1].ID)
tassert.Equal(t, `"04:20,11:20"`, g.Objects[2].ID)
tassert.Equal(t, `04:20,11:20`, g.Objects[2].ID)
tassert.Equal(t, `loop through each table`, g.Objects[3].ID)
tassert.Equal(t, 1, len(g.Objects[0].ChildrenArray))
tassert.Equal(t, 0, len(g.Objects[1].ChildrenArray))

View file

@ -870,23 +870,25 @@ func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, create b
}
head := kp.Path[i].Unbox()
headString := head.ScalarString()
if _, ok := d2ast.ReservedKeywords[strings.ToLower(head.ScalarString())]; ok && head.IsUnquoted() {
if _, ok := d2ast.CompositeReservedKeywords[strings.ToLower(head.ScalarString())]; !ok && i < len(kp.Path)-1 {
return d2parser.Errorf(kp.Path[i].Unbox(), fmt.Sprintf(`"%s" must be the last part of the key`, head.ScalarString()))
headString = strings.ToLower(head.ScalarString())
if _, ok := d2ast.CompositeReservedKeywords[headString]; !ok && i < len(kp.Path)-1 {
return d2parser.Errorf(kp.Path[i].Unbox(), fmt.Sprintf(`"%s" must be the last part of the key`, headString))
}
}
if head.ScalarString() == "_" && head.IsUnquoted() {
if headString == "_" && head.IsUnquoted() {
return d2parser.Errorf(kp.Path[i].Unbox(), `parent "_" can only be used in the beginning of paths, e.g. "_.x"`)
}
if head.ScalarString() == "classes" && head.IsUnquoted() && NodeBoardKind(m) == "" {
return d2parser.Errorf(kp.Path[i].Unbox(), "%s is only allowed at a board root", head.ScalarString())
if headString == "classes" && head.IsUnquoted() && NodeBoardKind(m) == "" {
return d2parser.Errorf(kp.Path[i].Unbox(), "%s is only allowed at a board root", headString)
}
if findBoardKeyword(head.ScalarString()) != -1 && head.IsUnquoted() && NodeBoardKind(m) == "" {
return d2parser.Errorf(kp.Path[i].Unbox(), "%s is only allowed at a board root", head.ScalarString())
if findBoardKeyword(headString) != -1 && head.IsUnquoted() && NodeBoardKind(m) == "" {
return d2parser.Errorf(kp.Path[i].Unbox(), "%s is only allowed at a board root", headString)
}
for _, f := range m.Fields {