all: fixes related to Node.pos (#9613)
parent
87a16bbfe9
commit
a0648a3ec2
|
@ -1477,10 +1477,16 @@ pub fn (expr Expr) position() token.Position {
|
|||
}
|
||||
NodeError, ArrayDecompose, ArrayInit, AsCast, Assoc, AtExpr, BoolLiteral, CallExpr, CastExpr,
|
||||
ChanInit, CharLiteral, ConcatExpr, Comment, ComptimeCall, ComptimeSelector, EnumVal, DumpExpr,
|
||||
FloatLiteral, GoExpr, Ident, IfExpr, IndexExpr, IntegerLiteral, Likely, LockExpr, MapInit,
|
||||
MatchExpr, None, OffsetOf, OrExpr, ParExpr, PostfixExpr, PrefixExpr, RangeExpr, SelectExpr,
|
||||
SelectorExpr, SizeOf, SqlExpr, StringInterLiteral, StringLiteral, StructInit, TypeNode,
|
||||
TypeOf, UnsafeExpr {
|
||||
FloatLiteral, GoExpr, Ident, IfExpr, IntegerLiteral, Likely, LockExpr, MapInit, MatchExpr,
|
||||
None, OffsetOf, OrExpr, ParExpr, PostfixExpr, PrefixExpr, RangeExpr, SelectExpr, SelectorExpr,
|
||||
SizeOf, SqlExpr, StringInterLiteral, StringLiteral, StructInit, TypeNode, TypeOf, UnsafeExpr
|
||||
{
|
||||
return expr.pos
|
||||
}
|
||||
IndexExpr {
|
||||
if expr.or_expr.kind != .absent {
|
||||
return expr.or_expr.pos
|
||||
}
|
||||
return expr.pos
|
||||
}
|
||||
IfGuardExpr {
|
||||
|
@ -1597,6 +1603,12 @@ pub fn (node Node) position() token.Position {
|
|||
pos = pos.extend(sym.pos)
|
||||
}
|
||||
}
|
||||
if node is AssignStmt {
|
||||
return pos.extend(node.right.last().position())
|
||||
}
|
||||
if node is AssertStmt {
|
||||
return pos.extend(node.expr.position())
|
||||
}
|
||||
return pos
|
||||
}
|
||||
Expr {
|
||||
|
|
|
@ -74,3 +74,25 @@ fn between_orm_blocks() {
|
|||
select from Upper where id == 1
|
||||
}
|
||||
}
|
||||
|
||||
fn no_empty_lines() {
|
||||
_ := $embed_file('testy.v')
|
||||
mut files := map[string][]FileData{}
|
||||
code := 'foo
|
||||
bar'
|
||||
params[0] = {
|
||||
...params[0]
|
||||
typ: params[0].typ.set_nr_muls(1)
|
||||
}
|
||||
env_value = environ()[env_lit] or {
|
||||
return error('the environment variable "$env_lit" does not exist.')
|
||||
}
|
||||
assert '$mr_one_two()' == "(One{
|
||||
value: 'one'
|
||||
}, Two{
|
||||
value: 'two'
|
||||
})"
|
||||
r := m[key] ?
|
||||
compile_time_env := $env('ENV_VAR')
|
||||
func()
|
||||
}
|
||||
|
|
|
@ -74,6 +74,7 @@ fn (mut p Parser) comp_call() ast.ComptimeCall {
|
|||
args_var: s
|
||||
is_env: true
|
||||
env_pos: spos
|
||||
pos: spos.extend(p.prev_tok.position())
|
||||
}
|
||||
}
|
||||
p.check(.lpar)
|
||||
|
@ -121,6 +122,7 @@ fn (mut p Parser) comp_call() ast.ComptimeCall {
|
|||
rpath: literal_string_param
|
||||
apath: epath
|
||||
}
|
||||
pos: start_pos.extend(p.prev_tok.position())
|
||||
}
|
||||
}
|
||||
// Compile vweb html template to V code, parse that V code and embed the resulting V function
|
||||
|
|
|
@ -1850,7 +1850,7 @@ pub fn (mut p Parser) name_expr() ast.Expr {
|
|||
}
|
||||
return ast.MapInit{
|
||||
typ: map_type
|
||||
pos: p.tok.position()
|
||||
pos: p.prev_tok.position()
|
||||
}
|
||||
}
|
||||
// `chan typ{...}`
|
||||
|
@ -2138,8 +2138,9 @@ fn (mut p Parser) index_expr(left ast.Expr) ast.IndexExpr {
|
|||
}
|
||||
// `a[i] ?`
|
||||
if p.tok.kind == .question {
|
||||
p.next()
|
||||
or_pos = p.tok.position()
|
||||
or_kind = .propagate
|
||||
p.next()
|
||||
}
|
||||
}
|
||||
return ast.IndexExpr{
|
||||
|
|
|
@ -425,7 +425,7 @@ fn (mut p Parser) struct_init(short_syntax bool) ast.StructInit {
|
|||
update_expr_comments: update_expr_comments
|
||||
has_update_expr: has_update_expr
|
||||
name_pos: first_pos
|
||||
pos: first_pos.extend(p.prev_tok.position())
|
||||
pos: first_pos.extend(if short_syntax { p.tok.position() } else { p.prev_tok.position() })
|
||||
is_short: no_keys
|
||||
pre_comments: pre_comments
|
||||
}
|
||||
|
|
|
@ -758,8 +758,10 @@ fn (mut s Scanner) text_scan() token.Token {
|
|||
return s.new_token(.question, '', 1)
|
||||
}
|
||||
scanner.single_quote, scanner.double_quote {
|
||||
start_line := s.line_nr
|
||||
ident_string := s.ident_string()
|
||||
return s.new_token(.string, ident_string, ident_string.len + 2) // + two quotes
|
||||
return s.new_multiline_token(.string, ident_string, ident_string.len + 2,
|
||||
start_line) // + two quotes
|
||||
}
|
||||
`\`` {
|
||||
// ` // apostrophe balance comment. do not remove
|
||||
|
|
Loading…
Reference in New Issue