fmt: do not insert a newline before returned $vweb.html() (#9063)
							parent
							
								
									97f9abcf82
								
							
						
					
					
						commit
						460e06b9ff
					
				| 
						 | 
				
			
			@ -1142,6 +1142,7 @@ pub:
 | 
			
		|||
	has_parens bool // if $() is used, for vfmt
 | 
			
		||||
	left       Expr
 | 
			
		||||
	field_expr Expr
 | 
			
		||||
	pos        token.Position
 | 
			
		||||
pub mut:
 | 
			
		||||
	left_type table.Type
 | 
			
		||||
	typ       table.Type
 | 
			
		||||
| 
						 | 
				
			
			@ -1149,6 +1150,7 @@ pub mut:
 | 
			
		|||
 | 
			
		||||
pub struct ComptimeCall {
 | 
			
		||||
pub:
 | 
			
		||||
	pos         token.Position
 | 
			
		||||
	has_parens  bool // if $() is used, for vfmt
 | 
			
		||||
	method_name string
 | 
			
		||||
	method_pos  token.Position
 | 
			
		||||
| 
						 | 
				
			
			@ -1235,18 +1237,16 @@ pub fn (expr Expr) position() token.Position {
 | 
			
		|||
			return expr.decl.pos
 | 
			
		||||
		}
 | 
			
		||||
		ArrayDecompose, ArrayInit, AsCast, Assoc, AtExpr, BoolLiteral, CallExpr, CastExpr, ChanInit,
 | 
			
		||||
		CharLiteral, ConcatExpr, Comment, EnumVal, FloatLiteral, GoExpr, Ident, IfExpr, IndexExpr,
 | 
			
		||||
		IntegerLiteral, Likely, LockExpr, MapInit, MatchExpr, None, OffsetOf, OrExpr, ParExpr,
 | 
			
		||||
		PostfixExpr, PrefixExpr, RangeExpr, SelectExpr, SelectorExpr, SizeOf, SqlExpr, StringInterLiteral,
 | 
			
		||||
		StringLiteral, StructInit, Type, TypeOf, UnsafeExpr {
 | 
			
		||||
		CharLiteral, ConcatExpr, Comment, ComptimeCall, ComptimeSelector, EnumVal, FloatLiteral,
 | 
			
		||||
		GoExpr, Ident, IfExpr, IndexExpr, IntegerLiteral, Likely, LockExpr, MapInit, MatchExpr,
 | 
			
		||||
		None, OffsetOf, OrExpr, ParExpr, PostfixExpr, PrefixExpr, RangeExpr, SelectExpr, SelectorExpr,
 | 
			
		||||
		SizeOf, SqlExpr, StringInterLiteral, StringLiteral, StructInit, Type, TypeOf, UnsafeExpr
 | 
			
		||||
		 {
 | 
			
		||||
			return expr.pos
 | 
			
		||||
		}
 | 
			
		||||
		IfGuardExpr {
 | 
			
		||||
			return expr.expr.position()
 | 
			
		||||
		}
 | 
			
		||||
		ComptimeCall, ComptimeSelector {
 | 
			
		||||
			return expr.left.position()
 | 
			
		||||
		}
 | 
			
		||||
		InfixExpr {
 | 
			
		||||
			left_pos := expr.left.position()
 | 
			
		||||
			right_pos := expr.right.position()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
import vweb
 | 
			
		||||
 | 
			
		||||
struct App {
 | 
			
		||||
	a string
 | 
			
		||||
	b string
 | 
			
		||||
| 
						 | 
				
			
			@ -57,8 +59,7 @@ fn comptime_for_fields() {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct Result {
 | 
			
		||||
}
 | 
			
		||||
struct Result {}
 | 
			
		||||
 | 
			
		||||
fn (mut a App) my_method(p string) Result {
 | 
			
		||||
	println('>>>> ${@FN} | p: $p')
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +82,10 @@ fn comptime_call_dollar_method() {
 | 
			
		|||
	handle_conn<App>(mut app)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn (mut app App) create() vweb.Result {
 | 
			
		||||
	return $vweb.html()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
	comptime_for()
 | 
			
		||||
	comptime_for_with_if()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,7 @@ fn (mut p Parser) comp_call() ast.ComptimeCall {
 | 
			
		|||
		scope: 0
 | 
			
		||||
	}
 | 
			
		||||
	p.check(.dollar)
 | 
			
		||||
	start_pos := p.prev_tok.position()
 | 
			
		||||
	error_msg := 'only `\$tmpl()`, `\$env()`, `\$embed_file()` and `\$vweb.html()` comptime functions are supported right now'
 | 
			
		||||
	if p.peek_tok.kind == .dot {
 | 
			
		||||
		n := p.check_name() // skip `vweb.html()` TODO
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +147,14 @@ fn (mut p Parser) comp_call() ast.ComptimeCall {
 | 
			
		|||
			path += '.html'
 | 
			
		||||
		}
 | 
			
		||||
		if !os.exists(path) {
 | 
			
		||||
			if p.pref.is_fmt {
 | 
			
		||||
				return ast.ComptimeCall{
 | 
			
		||||
					scope: 0
 | 
			
		||||
					is_vweb: true
 | 
			
		||||
					method_name: n
 | 
			
		||||
					pos: start_pos.extend(p.prev_tok.position())
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if is_html {
 | 
			
		||||
				p.error('vweb HTML template "$path" not found')
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -211,6 +220,7 @@ fn (mut p Parser) comp_call() ast.ComptimeCall {
 | 
			
		|||
		vweb_tmpl: file
 | 
			
		||||
		method_name: n
 | 
			
		||||
		args_var: literal_string_param
 | 
			
		||||
		pos: start_pos.extend(p.prev_tok.position())
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -288,6 +298,7 @@ fn (mut p Parser) at() ast.AtExpr {
 | 
			
		|||
 | 
			
		||||
fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr {
 | 
			
		||||
	p.check(.dollar)
 | 
			
		||||
	start_pos := p.prev_tok.position()
 | 
			
		||||
	if p.peek_tok.kind == .lpar {
 | 
			
		||||
		method_pos := p.tok.position()
 | 
			
		||||
		method_name := p.check_name()
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +322,7 @@ fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr {
 | 
			
		|||
			method_pos: method_pos
 | 
			
		||||
			scope: p.scope
 | 
			
		||||
			args_var: args_var
 | 
			
		||||
			pos: start_pos.extend(p.prev_tok.position())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	mut has_parens := false
 | 
			
		||||
| 
						 | 
				
			
			@ -328,5 +340,6 @@ fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr {
 | 
			
		|||
		has_parens: has_parens
 | 
			
		||||
		left: left
 | 
			
		||||
		field_expr: expr
 | 
			
		||||
		pos: start_pos.extend(p.prev_tok.position())
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue