Added error context for parsing of subtrees
This commit is contained in:
@@ -134,7 +134,9 @@ func parseGroup(p *parser) parserStateFn {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.seenGroupKeys = append(p.seenGroupKeys, key.val)
|
p.seenGroupKeys = append(p.seenGroupKeys, key.val)
|
||||||
p.tree.createSubTree(key.val)
|
if err := p.tree.createSubTree(key.val); err != nil {
|
||||||
|
p.raiseError(key, "%s", err)
|
||||||
|
}
|
||||||
p.assume(tokenRightBracket)
|
p.assume(tokenRightBracket)
|
||||||
p.currentGroup = strings.Split(key.val, ".")
|
p.currentGroup = strings.Split(key.val, ".")
|
||||||
return parseStart(p)
|
return parseStart(p)
|
||||||
|
|||||||
+1
-1
@@ -228,7 +228,7 @@ func TestDuplicateKeys(t *testing.T) {
|
|||||||
|
|
||||||
func TestEmptyIntermediateTable(t *testing.T) {
|
func TestEmptyIntermediateTable(t *testing.T) {
|
||||||
_, err := Load("[foo..bar]")
|
_, err := Load("[foo..bar]")
|
||||||
if err.Error() != "empty intermediate table" {
|
if err.Error() != "(1, 2): empty intermediate table" {
|
||||||
t.Error("Bad error message:", err.Error())
|
t.Error("Bad error message:", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,11 +142,13 @@ func (t *TomlTree) SetPath(keys []string, value interface{}) {
|
|||||||
//
|
//
|
||||||
// e.g. passing a.b.c will create (assuming tree is empty) tree[a], tree[a][b]
|
// e.g. passing a.b.c will create (assuming tree is empty) tree[a], tree[a][b]
|
||||||
// and tree[a][b][c]
|
// and tree[a][b][c]
|
||||||
func (t *TomlTree) createSubTree(key string) {
|
//
|
||||||
|
// Returns nil on success, error object on failure
|
||||||
|
func (t *TomlTree) createSubTree(key string) error{
|
||||||
subtree := t
|
subtree := t
|
||||||
for _, intermediate_key := range strings.Split(key, ".") {
|
for _, intermediate_key := range strings.Split(key, ".") {
|
||||||
if intermediate_key == "" {
|
if intermediate_key == "" {
|
||||||
panic("empty intermediate table")
|
return fmt.Errorf("empty intermediate table")
|
||||||
}
|
}
|
||||||
_, exists := (*subtree)[intermediate_key]
|
_, exists := (*subtree)[intermediate_key]
|
||||||
if !exists {
|
if !exists {
|
||||||
@@ -155,6 +157,7 @@ func (t *TomlTree) createSubTree(key string) {
|
|||||||
}
|
}
|
||||||
subtree = ((*subtree)[intermediate_key]).(*TomlTree)
|
subtree = ((*subtree)[intermediate_key]).(*TomlTree)
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// encodes a string to a TOML-compliant string value
|
// encodes a string to a TOML-compliant string value
|
||||||
|
|||||||
Reference in New Issue
Block a user