From d03ef16cfc61c39446d5bd906d35b7db18c27cd5 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 20 Mar 2022 21:57:11 -0400 Subject: [PATCH] Add line/column info for DSL runtime non-parse failures (#998) * Add line/column info for DSL runtime non-parse failures * Other related callsites * test cases * Update already-existing test cases --- internal/pkg/dsl/cst/cond.go | 10 ++++++-- internal/pkg/dsl/cst/for.go | 23 +++++++++++++------ internal/pkg/dsl/cst/if.go | 9 ++++++-- internal/pkg/dsl/cst/warn.go | 9 ++------ internal/pkg/dsl/cst/while.go | 23 +++++++++++++++---- internal/pkg/dsl/token.go | 17 ++++++++++++++ .../dsl-line-number-column-number/cond/cmd | 1 + .../dsl-line-number-column-number/cond/experr | 1 + .../dsl-line-number-column-number/cond/expout | 0 .../dsl-line-number-column-number/cond/mlr | 7 ++++++ .../cond/should-fail | 0 .../do-while/cmd | 1 + .../do-while/experr | 1 + .../do-while/expout | 0 .../do-while/mlr | 7 ++++++ .../do-while/should-fail | 0 .../dsl-line-number-column-number/for/cmd | 1 + .../dsl-line-number-column-number/for/experr | 1 + .../dsl-line-number-column-number/for/expout | 0 .../dsl-line-number-column-number/for/mlr | 7 ++++++ .../for/should-fail | 0 .../dsl-line-number-column-number/if/cmd | 1 + .../dsl-line-number-column-number/if/experr | 1 + .../dsl-line-number-column-number/if/expout | 0 .../dsl-line-number-column-number/if/mlr | 7 ++++++ .../if/should-fail | 0 .../dsl-line-number-column-number/warn/cmd | 1 + .../dsl-line-number-column-number/warn/experr | 1 + .../dsl-line-number-column-number/warn/expout | 0 .../dsl-line-number-column-number/warn/mlr | 6 +++++ .../dsl-line-number-column-number/while/cmd | 1 + .../while/experr | 1 + .../while/expout | 0 .../dsl-line-number-column-number/while/mlr | 7 ++++++ .../while/should-fail | 0 test/cases/dsl-warnings/0014/experr | 2 +- test/cases/dsl-warnings/0015/experr | 2 +- test/cases/dsl-warnings/0017/experr | 4 ++-- test/cases/dsl-warnings/0018/experr | 4 ++-- test/cases/dsl-warnings/0020/experr | 2 +- test/cases/dsl-warnings/0022/experr | 2 +- test/cases/dsl-warnings/0023/experr | 2 +- test/cases/dsl-warnings/0024/experr | 2 +- test/cases/dsl-warnings/0025/experr | 2 +- todo.txt | 9 ++++++++ 45 files changed, 142 insertions(+), 33 deletions(-) create mode 100644 internal/pkg/dsl/token.go create mode 100644 test/cases/dsl-line-number-column-number/cond/cmd create mode 100644 test/cases/dsl-line-number-column-number/cond/experr create mode 100644 test/cases/dsl-line-number-column-number/cond/expout create mode 100644 test/cases/dsl-line-number-column-number/cond/mlr create mode 100644 test/cases/dsl-line-number-column-number/cond/should-fail create mode 100644 test/cases/dsl-line-number-column-number/do-while/cmd create mode 100644 test/cases/dsl-line-number-column-number/do-while/experr create mode 100644 test/cases/dsl-line-number-column-number/do-while/expout create mode 100644 test/cases/dsl-line-number-column-number/do-while/mlr create mode 100644 test/cases/dsl-line-number-column-number/do-while/should-fail create mode 100644 test/cases/dsl-line-number-column-number/for/cmd create mode 100644 test/cases/dsl-line-number-column-number/for/experr create mode 100644 test/cases/dsl-line-number-column-number/for/expout create mode 100644 test/cases/dsl-line-number-column-number/for/mlr create mode 100644 test/cases/dsl-line-number-column-number/for/should-fail create mode 100644 test/cases/dsl-line-number-column-number/if/cmd create mode 100644 test/cases/dsl-line-number-column-number/if/experr create mode 100644 test/cases/dsl-line-number-column-number/if/expout create mode 100644 test/cases/dsl-line-number-column-number/if/mlr create mode 100644 test/cases/dsl-line-number-column-number/if/should-fail create mode 100644 test/cases/dsl-line-number-column-number/warn/cmd create mode 100644 test/cases/dsl-line-number-column-number/warn/experr create mode 100644 test/cases/dsl-line-number-column-number/warn/expout create mode 100644 test/cases/dsl-line-number-column-number/warn/mlr create mode 100644 test/cases/dsl-line-number-column-number/while/cmd create mode 100644 test/cases/dsl-line-number-column-number/while/experr create mode 100644 test/cases/dsl-line-number-column-number/while/expout create mode 100644 test/cases/dsl-line-number-column-number/while/mlr create mode 100644 test/cases/dsl-line-number-column-number/while/should-fail diff --git a/internal/pkg/dsl/cst/cond.go b/internal/pkg/dsl/cst/cond.go index 030bf9f4f..cd5f0c128 100644 --- a/internal/pkg/dsl/cst/cond.go +++ b/internal/pkg/dsl/cst/cond.go @@ -11,11 +11,13 @@ import ( "github.com/johnkerl/miller/internal/pkg/dsl" "github.com/johnkerl/miller/internal/pkg/lib" "github.com/johnkerl/miller/internal/pkg/mlrval" + "github.com/johnkerl/miller/internal/pkg/parsing/token" "github.com/johnkerl/miller/internal/pkg/runtime" ) type CondBlockNode struct { conditionNode IEvaluable + conditionToken *token.Token statementBlockNode *StatementBlockNode } @@ -30,12 +32,14 @@ func (root *RootNode) BuildCondBlockNode(astNode *dsl.ASTNode) (*CondBlockNode, if err != nil { return nil, err } + conditionToken := astNode.Children[0].Token statementBlockNode, err := root.BuildStatementBlockNode(astNode.Children[1]) if err != nil { return nil, err } condBlockNode := &CondBlockNode{ conditionNode: conditionNode, + conditionToken: conditionToken, statementBlockNode: statementBlockNode, } @@ -56,8 +60,10 @@ func (node *CondBlockNode) Execute( if condition.IsAbsent() { boolValue = false } else if !isBool { - // TODO: line-number/token info for the DSL expression. - return nil, fmt.Errorf("mlr: conditional expression did not evaluate to boolean.") + return nil, fmt.Errorf( + "mlr: conditional expression did not evaluate to boolean%s.", + dsl.TokenToLocationInfo(node.conditionToken), + ) } if boolValue == true { diff --git a/internal/pkg/dsl/cst/for.go b/internal/pkg/dsl/cst/for.go index 256d6c69b..162c86e91 100644 --- a/internal/pkg/dsl/cst/for.go +++ b/internal/pkg/dsl/cst/for.go @@ -10,6 +10,7 @@ import ( "github.com/johnkerl/miller/internal/pkg/dsl" "github.com/johnkerl/miller/internal/pkg/lib" "github.com/johnkerl/miller/internal/pkg/mlrval" + "github.com/johnkerl/miller/internal/pkg/parsing/token" "github.com/johnkerl/miller/internal/pkg/runtime" ) @@ -705,17 +706,19 @@ func (node *ForLoopMultivariableNode) executeInner( // ================================================================ type TripleForLoopNode struct { - startBlockNode *StatementBlockNode - precontinuationAssignments []IExecutable - continuationExpressionNode IEvaluable - updateBlockNode *StatementBlockNode - bodyBlockNode *StatementBlockNode + startBlockNode *StatementBlockNode + precontinuationAssignments []IExecutable + continuationExpressionNode IEvaluable + continuationExpressionToken *token.Token + updateBlockNode *StatementBlockNode + bodyBlockNode *StatementBlockNode } func NewTripleForLoopNode( startBlockNode *StatementBlockNode, precontinuationAssignments []IExecutable, continuationExpressionNode IEvaluable, + continuationExpressionToken *token.Token, updateBlockNode *StatementBlockNode, bodyBlockNode *StatementBlockNode, ) *TripleForLoopNode { @@ -723,6 +726,7 @@ func NewTripleForLoopNode( startBlockNode, precontinuationAssignments, continuationExpressionNode, + continuationExpressionToken, updateBlockNode, bodyBlockNode, } @@ -793,6 +797,7 @@ func (root *RootNode) BuildTripleForLoopNode(astNode *dsl.ASTNode) (*TripleForLo // for (int i = 0; c += 1, i < 10; i += 1) { ... } var precontinuationAssignments []IExecutable = nil var continuationExpressionNode IEvaluable = nil + var continuationExpressionToken *token.Token = nil if len(continuationExpressionASTNode.Children) > 0 { // empty is true n := len(continuationExpressionASTNode.Children) if n > 1 { @@ -827,6 +832,7 @@ func (root *RootNode) BuildTripleForLoopNode(astNode *dsl.ASTNode) (*TripleForLo } lib.InternalCodingErrorIf(len(bareBooleanASTNode.Children) != 1) continuationExpressionNode, err = root.BuildEvaluableNode(bareBooleanASTNode.Children[0]) + continuationExpressionToken = bareBooleanASTNode.Children[0].Token if err != nil { return nil, err } @@ -846,6 +852,7 @@ func (root *RootNode) BuildTripleForLoopNode(astNode *dsl.ASTNode) (*TripleForLo startBlockNode, precontinuationAssignments, continuationExpressionNode, + continuationExpressionToken, updateBlockNode, bodyBlockNode, ), nil @@ -892,8 +899,10 @@ func (node *TripleForLoopNode) Execute(state *runtime.State) (*BlockExitPayload, continuationValue := node.continuationExpressionNode.Evaluate(state) boolValue, isBool := continuationValue.GetBoolValue() if !isBool { - // TODO: propagate line-number context - return nil, fmt.Errorf("mlr: for-loop continuation did not evaluate to boolean.") + return nil, fmt.Errorf( + "mlr: for-loop continuation did not evaluate to boolean%s.", + dsl.TokenToLocationInfo(node.continuationExpressionToken), + ) } if boolValue == false { break diff --git a/internal/pkg/dsl/cst/if.go b/internal/pkg/dsl/cst/if.go index d49def006..40da46c7a 100644 --- a/internal/pkg/dsl/cst/if.go +++ b/internal/pkg/dsl/cst/if.go @@ -10,6 +10,7 @@ import ( "github.com/johnkerl/miller/internal/pkg/dsl" "github.com/johnkerl/miller/internal/pkg/lib" "github.com/johnkerl/miller/internal/pkg/mlrval" + "github.com/johnkerl/miller/internal/pkg/parsing/token" "github.com/johnkerl/miller/internal/pkg/runtime" ) @@ -29,6 +30,7 @@ func NewIfChainNode(ifItems []*IfItem) *IfChainNode { // statement-block part {...}. For "else", the conditional is nil. type IfItem struct { conditionNode IEvaluable + conditionToken *token.Token statementBlockNode *StatementBlockNode } @@ -92,6 +94,7 @@ func (root *RootNode) BuildIfChainNode(astNode *dsl.ASTNode) (*IfChainNode, erro } ifItem := &IfItem{ conditionNode: conditionNode, + conditionToken: astChild.Children[0].Token, statementBlockNode: statementBlockNode, } ifItems = append(ifItems, ifItem) @@ -126,8 +129,10 @@ func (node *IfChainNode) Execute(state *runtime.State) (*BlockExitPayload, error } boolValue, isBool := condition.GetBoolValue() if !isBool { - // TODO: line-number/token info for the DSL expression. - return nil, fmt.Errorf("mlr: conditional expression did not evaluate to boolean.") + return nil, fmt.Errorf( + "mlr: conditional expression did not evaluate to boolean%s.", + dsl.TokenToLocationInfo(ifItem.conditionToken), + ) } if boolValue == true { blockExitPayload, err := ifItem.statementBlockNode.Execute(state) diff --git a/internal/pkg/dsl/cst/warn.go b/internal/pkg/dsl/cst/warn.go index a74a7478b..65ca8db04 100644 --- a/internal/pkg/dsl/cst/warn.go +++ b/internal/pkg/dsl/cst/warn.go @@ -101,16 +101,11 @@ func warnOnASTAux( variableNamesWrittenTo[variableName] = true } else { if !variableNamesWrittenTo[variableName] { - // TODO: this would be much more useful with line numbers. :( - // That would be a big of work with the parser. Fortunately, - // Miller is designed around low-keystroke little expressions - // -- not thousands of lines of Miller-DSL source code -- so - // people can look at their few lines of Miller-DSL code and - // spot their error. fmt.Fprintf( os.Stderr, - "Variable name %s might not have been assigned yet.\n", + "Variable name %s might not have been assigned yet%s.\n", variableName, + dsl.TokenToLocationInfo(astNode.Token), ) ok = false } diff --git a/internal/pkg/dsl/cst/while.go b/internal/pkg/dsl/cst/while.go index d9ec69e5c..538c1f153 100644 --- a/internal/pkg/dsl/cst/while.go +++ b/internal/pkg/dsl/cst/while.go @@ -9,21 +9,25 @@ import ( "github.com/johnkerl/miller/internal/pkg/dsl" "github.com/johnkerl/miller/internal/pkg/lib" + "github.com/johnkerl/miller/internal/pkg/parsing/token" "github.com/johnkerl/miller/internal/pkg/runtime" ) // ================================================================ type WhileLoopNode struct { conditionNode IEvaluable + conditionToken *token.Token statementBlockNode *StatementBlockNode } func NewWhileLoopNode( conditionNode IEvaluable, + conditionToken *token.Token, statementBlockNode *StatementBlockNode, ) *WhileLoopNode { return &WhileLoopNode{ conditionNode: conditionNode, + conditionToken: conditionToken, statementBlockNode: statementBlockNode, } } @@ -36,6 +40,7 @@ func (root *RootNode) BuildWhileLoopNode(astNode *dsl.ASTNode) (*WhileLoopNode, if err != nil { return nil, err } + conditionToken := astNode.Children[0].Token statementBlockNode, err := root.BuildStatementBlockNode(astNode.Children[1]) if err != nil { return nil, err @@ -43,6 +48,7 @@ func (root *RootNode) BuildWhileLoopNode(astNode *dsl.ASTNode) (*WhileLoopNode, return NewWhileLoopNode( conditionNode, + conditionToken, statementBlockNode, ), nil } @@ -53,8 +59,10 @@ func (node *WhileLoopNode) Execute(state *runtime.State) (*BlockExitPayload, err condition := node.conditionNode.Evaluate(state) boolValue, isBool := condition.GetBoolValue() if !isBool { - // TODO: line-number/token info for the DSL expression. - return nil, fmt.Errorf("mlr: conditional expression did not evaluate to boolean.") + return nil, fmt.Errorf( + "mlr: conditional expression did not evaluate to boolean%s.", + dsl.TokenToLocationInfo(node.conditionToken), + ) } if boolValue != true { break @@ -86,15 +94,18 @@ func (node *WhileLoopNode) Execute(state *runtime.State) (*BlockExitPayload, err type DoWhileLoopNode struct { statementBlockNode *StatementBlockNode conditionNode IEvaluable + conditionToken *token.Token } func NewDoWhileLoopNode( statementBlockNode *StatementBlockNode, conditionNode IEvaluable, + conditionToken *token.Token, ) *DoWhileLoopNode { return &DoWhileLoopNode{ statementBlockNode: statementBlockNode, conditionNode: conditionNode, + conditionToken: conditionToken, } } @@ -110,10 +121,12 @@ func (root *RootNode) BuildDoWhileLoopNode(astNode *dsl.ASTNode) (*DoWhileLoopNo if err != nil { return nil, err } + conditionToken := astNode.Children[1].Token return NewDoWhileLoopNode( statementBlockNode, conditionNode, + conditionToken, ), nil } @@ -143,8 +156,10 @@ func (node *DoWhileLoopNode) Execute(state *runtime.State) (*BlockExitPayload, e condition := node.conditionNode.Evaluate(state) boolValue, isBool := condition.GetBoolValue() if !isBool { - // TODO: line-number/token info for the DSL expression. - return nil, fmt.Errorf("mlr: conditional expression did not evaluate to boolean.") + return nil, fmt.Errorf( + "mlr: conditional expression did not evaluate to boolean%s.", + dsl.TokenToLocationInfo(node.conditionToken), + ) } if boolValue == false { break diff --git a/internal/pkg/dsl/token.go b/internal/pkg/dsl/token.go new file mode 100644 index 000000000..1cf624d4e --- /dev/null +++ b/internal/pkg/dsl/token.go @@ -0,0 +1,17 @@ +package dsl + +import ( + "fmt" + + "github.com/johnkerl/miller/internal/pkg/parsing/token" +) + +// TokenToLocationInfo is used to track runtime errors back to source-code locations in DSL +// expressions, so we can have more informative error messages. +func TokenToLocationInfo(sourceToken *token.Token) string { + if sourceToken == nil { + return "" + } else { + return fmt.Sprintf(" at DSL expression line %d column %d", sourceToken.Pos.Line, sourceToken.Pos.Column) + } +} diff --git a/test/cases/dsl-line-number-column-number/cond/cmd b/test/cases/dsl-line-number-column-number/cond/cmd new file mode 100644 index 000000000..6add080d4 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/cond/cmd @@ -0,0 +1 @@ +mlr -n put -f ${CASEDIR}/mlr diff --git a/test/cases/dsl-line-number-column-number/cond/experr b/test/cases/dsl-line-number-column-number/cond/experr new file mode 100644 index 000000000..7d9b1ed3f --- /dev/null +++ b/test/cases/dsl-line-number-column-number/cond/experr @@ -0,0 +1 @@ +mlr: conditional expression did not evaluate to boolean at DSL expression line 5 column 3. diff --git a/test/cases/dsl-line-number-column-number/cond/expout b/test/cases/dsl-line-number-column-number/cond/expout new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/cond/mlr b/test/cases/dsl-line-number-column-number/cond/mlr new file mode 100644 index 000000000..9cd6759bb --- /dev/null +++ b/test/cases/dsl-line-number-column-number/cond/mlr @@ -0,0 +1,7 @@ +# line padding +# line padding +# line padding +end { + 0 { + } +} diff --git a/test/cases/dsl-line-number-column-number/cond/should-fail b/test/cases/dsl-line-number-column-number/cond/should-fail new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/do-while/cmd b/test/cases/dsl-line-number-column-number/do-while/cmd new file mode 100644 index 000000000..6add080d4 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/do-while/cmd @@ -0,0 +1 @@ +mlr -n put -f ${CASEDIR}/mlr diff --git a/test/cases/dsl-line-number-column-number/do-while/experr b/test/cases/dsl-line-number-column-number/do-while/experr new file mode 100644 index 000000000..2ae50c49a --- /dev/null +++ b/test/cases/dsl-line-number-column-number/do-while/experr @@ -0,0 +1 @@ +mlr: conditional expression did not evaluate to boolean at DSL expression line 6 column 12. diff --git a/test/cases/dsl-line-number-column-number/do-while/expout b/test/cases/dsl-line-number-column-number/do-while/expout new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/do-while/mlr b/test/cases/dsl-line-number-column-number/do-while/mlr new file mode 100644 index 000000000..46497840c --- /dev/null +++ b/test/cases/dsl-line-number-column-number/do-while/mlr @@ -0,0 +1,7 @@ +# line padding +# line padding +# line padding +end { + do { + } while (0); +} diff --git a/test/cases/dsl-line-number-column-number/do-while/should-fail b/test/cases/dsl-line-number-column-number/do-while/should-fail new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/for/cmd b/test/cases/dsl-line-number-column-number/for/cmd new file mode 100644 index 000000000..6add080d4 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/for/cmd @@ -0,0 +1 @@ +mlr -n put -f ${CASEDIR}/mlr diff --git a/test/cases/dsl-line-number-column-number/for/experr b/test/cases/dsl-line-number-column-number/for/experr new file mode 100644 index 000000000..a99b7edd3 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/for/experr @@ -0,0 +1 @@ +mlr: for-loop continuation did not evaluate to boolean at DSL expression line 5 column 9. diff --git a/test/cases/dsl-line-number-column-number/for/expout b/test/cases/dsl-line-number-column-number/for/expout new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/for/mlr b/test/cases/dsl-line-number-column-number/for/mlr new file mode 100644 index 000000000..68f027ef4 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/for/mlr @@ -0,0 +1,7 @@ +# line padding +# line padding +# line padding +end { + for (;0;) { + } +} diff --git a/test/cases/dsl-line-number-column-number/for/should-fail b/test/cases/dsl-line-number-column-number/for/should-fail new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/if/cmd b/test/cases/dsl-line-number-column-number/if/cmd new file mode 100644 index 000000000..6add080d4 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/if/cmd @@ -0,0 +1 @@ +mlr -n put -f ${CASEDIR}/mlr diff --git a/test/cases/dsl-line-number-column-number/if/experr b/test/cases/dsl-line-number-column-number/if/experr new file mode 100644 index 000000000..2c953ec07 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/if/experr @@ -0,0 +1 @@ +mlr: conditional expression did not evaluate to boolean at DSL expression line 5 column 7. diff --git a/test/cases/dsl-line-number-column-number/if/expout b/test/cases/dsl-line-number-column-number/if/expout new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/if/mlr b/test/cases/dsl-line-number-column-number/if/mlr new file mode 100644 index 000000000..7bbbee53e --- /dev/null +++ b/test/cases/dsl-line-number-column-number/if/mlr @@ -0,0 +1,7 @@ +# line padding +# line padding +# line padding +end { + if (0) { + } +} diff --git a/test/cases/dsl-line-number-column-number/if/should-fail b/test/cases/dsl-line-number-column-number/if/should-fail new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/warn/cmd b/test/cases/dsl-line-number-column-number/warn/cmd new file mode 100644 index 000000000..0ab030602 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/warn/cmd @@ -0,0 +1 @@ +mlr -n put -w -f ${CASEDIR}/mlr diff --git a/test/cases/dsl-line-number-column-number/warn/experr b/test/cases/dsl-line-number-column-number/warn/experr new file mode 100644 index 000000000..b406303c1 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/warn/experr @@ -0,0 +1 @@ +Variable name y might not have been assigned yet at DSL expression line 5 column 7. diff --git a/test/cases/dsl-line-number-column-number/warn/expout b/test/cases/dsl-line-number-column-number/warn/expout new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/warn/mlr b/test/cases/dsl-line-number-column-number/warn/mlr new file mode 100644 index 000000000..c018a648c --- /dev/null +++ b/test/cases/dsl-line-number-column-number/warn/mlr @@ -0,0 +1,6 @@ +# line padding +# line padding +# line padding +end { + x = y; +} diff --git a/test/cases/dsl-line-number-column-number/while/cmd b/test/cases/dsl-line-number-column-number/while/cmd new file mode 100644 index 000000000..6add080d4 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/while/cmd @@ -0,0 +1 @@ +mlr -n put -f ${CASEDIR}/mlr diff --git a/test/cases/dsl-line-number-column-number/while/experr b/test/cases/dsl-line-number-column-number/while/experr new file mode 100644 index 000000000..977d70e73 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/while/experr @@ -0,0 +1 @@ +mlr: conditional expression did not evaluate to boolean at DSL expression line 5 column 10. diff --git a/test/cases/dsl-line-number-column-number/while/expout b/test/cases/dsl-line-number-column-number/while/expout new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-line-number-column-number/while/mlr b/test/cases/dsl-line-number-column-number/while/mlr new file mode 100644 index 000000000..92d3999e3 --- /dev/null +++ b/test/cases/dsl-line-number-column-number/while/mlr @@ -0,0 +1,7 @@ +# line padding +# line padding +# line padding +end { + while (0) { + } +} diff --git a/test/cases/dsl-line-number-column-number/while/should-fail b/test/cases/dsl-line-number-column-number/while/should-fail new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/dsl-warnings/0014/experr b/test/cases/dsl-warnings/0014/experr index 6e80f20c3..f16d50923 100644 --- a/test/cases/dsl-warnings/0014/experr +++ b/test/cases/dsl-warnings/0014/experr @@ -1 +1 @@ -Variable name x might not have been assigned yet. +Variable name x might not have been assigned yet at DSL expression line 1 column 5. diff --git a/test/cases/dsl-warnings/0015/experr b/test/cases/dsl-warnings/0015/experr index 6e80f20c3..f16d50923 100644 --- a/test/cases/dsl-warnings/0015/experr +++ b/test/cases/dsl-warnings/0015/experr @@ -1 +1 @@ -Variable name x might not have been assigned yet. +Variable name x might not have been assigned yet at DSL expression line 1 column 5. diff --git a/test/cases/dsl-warnings/0017/experr b/test/cases/dsl-warnings/0017/experr index e0ade7c49..e792141b9 100644 --- a/test/cases/dsl-warnings/0017/experr +++ b/test/cases/dsl-warnings/0017/experr @@ -1,2 +1,2 @@ -Variable name x might not have been assigned yet. -Variable name y might not have been assigned yet. +Variable name x might not have been assigned yet at DSL expression line 1 column 5. +Variable name y might not have been assigned yet at DSL expression line 1 column 9. diff --git a/test/cases/dsl-warnings/0018/experr b/test/cases/dsl-warnings/0018/experr index e0ade7c49..e792141b9 100644 --- a/test/cases/dsl-warnings/0018/experr +++ b/test/cases/dsl-warnings/0018/experr @@ -1,2 +1,2 @@ -Variable name x might not have been assigned yet. -Variable name y might not have been assigned yet. +Variable name x might not have been assigned yet at DSL expression line 1 column 5. +Variable name y might not have been assigned yet at DSL expression line 1 column 9. diff --git a/test/cases/dsl-warnings/0020/experr b/test/cases/dsl-warnings/0020/experr index cc1faad7a..1dd9bfe91 100644 --- a/test/cases/dsl-warnings/0020/experr +++ b/test/cases/dsl-warnings/0020/experr @@ -1 +1 @@ -Variable name i might not have been assigned yet. +Variable name i might not have been assigned yet at DSL expression line 1 column 3. diff --git a/test/cases/dsl-warnings/0022/experr b/test/cases/dsl-warnings/0022/experr index ccfb39f75..c875c0714 100644 --- a/test/cases/dsl-warnings/0022/experr +++ b/test/cases/dsl-warnings/0022/experr @@ -1 +1 @@ -Variable name m might not have been assigned yet. +Variable name m might not have been assigned yet at DSL expression line 1 column 20. diff --git a/test/cases/dsl-warnings/0023/experr b/test/cases/dsl-warnings/0023/experr index ccfb39f75..01e647be4 100644 --- a/test/cases/dsl-warnings/0023/experr +++ b/test/cases/dsl-warnings/0023/experr @@ -1 +1 @@ -Variable name m might not have been assigned yet. +Variable name m might not have been assigned yet at DSL expression line 1 column 27. diff --git a/test/cases/dsl-warnings/0024/experr b/test/cases/dsl-warnings/0024/experr index ccfb39f75..c7605addf 100644 --- a/test/cases/dsl-warnings/0024/experr +++ b/test/cases/dsl-warnings/0024/experr @@ -1 +1 @@ -Variable name m might not have been assigned yet. +Variable name m might not have been assigned yet at DSL expression line 1 column 19. diff --git a/test/cases/dsl-warnings/0025/experr b/test/cases/dsl-warnings/0025/experr index ccfb39f75..366f516fe 100644 --- a/test/cases/dsl-warnings/0025/experr +++ b/test/cases/dsl-warnings/0025/experr @@ -1 +1 @@ -Variable name m might not have been assigned yet. +Variable name m might not have been assigned yet at DSL expression line 1 column 26. diff --git a/todo.txt b/todo.txt index 24f2b76cc..8af571c4c 100644 --- a/todo.txt +++ b/todo.txt @@ -25,6 +25,15 @@ RELEASES ================================================================ FEATURES +---------------------------------------------------------------- +RUNTIME LINE/COLUMN NUMBERS + +internal/pkg/dsl/cst/for.go +895: // TODO: propagate line-number context + +internal/pkg/dsl/cst/if.go +132: // TODO: line-number/token info for the DSL expression. + ---------------------------------------------------------------- STRICT MODE