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