Skip to content

Commit 338f96d

Browse files
authored
Fix error messages. Add missing linenum/col to some parser location (#137)
Signed-off-by: Tiago Natel de Moura <tiago.natel@neoway.com.br>
1 parent ca13057 commit 338f96d

1 file changed

Lines changed: 29 additions & 15 deletions

File tree

parser/parse.go

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ func (p *Parser) parseVariable() (ast.Expr, error) {
131131
it := p.next()
132132

133133
if it.Type() != token.Variable {
134-
return nil, errors.NewError("Unexpected token %v. Expected VARIABLE", it)
134+
return nil, newParserError(it, p.name,
135+
"Unexpected token %v. Expected VARIABLE", it)
135136
}
136137

137138
variable := ast.NewVarExpr(it.FileInfo, it.Value())
@@ -143,7 +144,8 @@ func (p *Parser) parseVariable() (ast.Expr, error) {
143144
it = p.next()
144145

145146
if it.Type() != token.Number && it.Type() != token.Variable {
146-
return nil, errors.NewError("Expected number or variable in index. Found %v", it)
147+
return nil, newParserError(it, p.name,
148+
"Expected number or variable in index. Found %v", it)
147149
}
148150

149151
var index ast.Expr
@@ -170,7 +172,8 @@ func (p *Parser) parseVariable() (ast.Expr, error) {
170172
it = p.next()
171173

172174
if it.Type() != token.RBrack {
173-
return nil, errors.NewError("Unexpected token %v. Expecting ']'", it)
175+
return nil, newParserError(it, p.name,
176+
"Unexpected token %v. Expecting ']'", it)
174177
}
175178

176179
return ast.NewIndexExpr(variable.FileInfo, variable, index), nil
@@ -256,7 +259,8 @@ cmdLoop:
256259

257260
n.AddArg(arg)
258261
case typ == token.Plus:
259-
return nil, errors.NewError("%s:%d:%d: Unexpected '+'", p.name, it.Line(), it.Column())
262+
return nil, newParserError(it, p.name,
263+
"Unexpected '+'", p.name, it.Line(), it.Column())
260264
case typ == token.Gt:
261265
p.next()
262266
redir, err := p.parseRedirection(it)
@@ -513,7 +517,8 @@ func (p *Parser) parseAssignment(ident scanner.Token) (ast.Node, error) {
513517
it := p.next()
514518

515519
if it.Type() != token.Assign && it.Type() != token.AssignCmd {
516-
return nil, errors.NewError("Unexpected token %v, expected '=' or '<='", it)
520+
return nil, newParserError(it, p.name,
521+
"Unexpected token %v, expected '=' or '<='", it)
517522
}
518523

519524
if it.Type() == token.Assign {
@@ -601,7 +606,8 @@ func (p *Parser) parseAssignCmdOut(name scanner.Token) (ast.Node, error) {
601606
it := p.next()
602607

603608
if it.Type() != token.Ident && it.Type() != token.Arg && it.Type() != token.Variable && it.Type() != token.LParen {
604-
return nil, errors.NewError("Invalid token %v. Expected command or function invocation", it)
609+
return nil, newParserError(it, p.name,
610+
"Invalid token %v. Expected command or function invocation", it)
605611
}
606612

607613
if it.Type() == token.LParen {
@@ -820,7 +826,8 @@ func (p *Parser) parseFnDecl(it scanner.Token) (ast.Node, error) {
820826
}
821827

822828
if it.Type() != token.LParen {
823-
return nil, errors.NewError("Unexpected token %v. Expected '('", it)
829+
return nil, newParserError(it, p.name,
830+
"Unexpected token %v. Expected '('", it)
824831
}
825832

826833
args, err := p.parseFnArgs()
@@ -836,7 +843,8 @@ func (p *Parser) parseFnDecl(it scanner.Token) (ast.Node, error) {
836843
it = p.next()
837844

838845
if it.Type() != token.LBrace {
839-
return nil, errors.NewError("Unexpected token %v. Expected '{'", it)
846+
return nil, newParserError(it, p.name,
847+
"Unexpected token %v. Expected '{'", it)
840848
}
841849

842850
p.openblocks++
@@ -935,13 +943,14 @@ func (p *Parser) parseBindFn(bindIt scanner.Token) (ast.Node, error) {
935943
nameIt := p.next()
936944

937945
if nameIt.Type() != token.Ident {
938-
return nil, errors.NewError("Expected identifier, but found '%v'", nameIt)
946+
return nil, newParserError(nameIt, p.name,
947+
"Expected identifier, but found '%v'", nameIt)
939948
}
940949

941950
cmdIt := p.next()
942951

943952
if cmdIt.Type() != token.Ident {
944-
return nil, errors.NewError("Expected identifier, but found '%v'", cmdIt)
953+
return nil, newParserError(cmdIt, p.name, "Expected identifier, but found '%v'", cmdIt)
945954
}
946955

947956
if p.peek().Type() == token.Semicolon {
@@ -1075,21 +1084,24 @@ func (p *Parser) parseFor(it scanner.Token) (ast.Node, error) {
10751084
it = p.next()
10761085

10771086
if it.Type() != token.Ident || it.Value() != "in" {
1078-
return nil, errors.NewError("Expected 'in' but found %q", it)
1087+
return nil, newParserError(it, p.name,
1088+
"Expected 'in' but found %q", it)
10791089
}
10801090

10811091
it = p.next()
10821092

10831093
if it.Type() != token.Variable {
1084-
return nil, errors.NewError("Expected variable but found %q", it)
1094+
return nil, newParserError(it, p.name,
1095+
"Expected variable but found %q", it)
10851096
}
10861097

10871098
forStmt.SetInVar(it.Value())
10881099
forBlockParse:
10891100
it = p.peek()
10901101

10911102
if it.Type() != token.LBrace {
1092-
return nil, errors.NewError("Expected '{' but found %q", it)
1103+
return nil, newParserError(it, p.name,
1104+
"Expected '{' but found %q", it)
10931105
}
10941106

10951107
blockPos := it.FileInfo
@@ -1169,12 +1181,14 @@ func (p *Parser) parseBlock(lineStart, columnStart int) (*ast.BlockNode, error)
11691181
case token.LBrace:
11701182
p.ignore()
11711183

1172-
return nil, errors.NewError("Parser error: Unexpected '{'")
1184+
return nil, newParserError(it, p.name,
1185+
"Unexpected '{'")
11731186
case token.RBrace:
11741187
p.ignore()
11751188

11761189
if p.openblocks <= 0 {
1177-
return nil, errors.NewError("Parser error: No block open for close")
1190+
return nil, newParserError(it, p.name,
1191+
"No block open for close")
11781192
}
11791193

11801194
p.openblocks--

0 commit comments

Comments
 (0)