mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
at the same point as the previous formatter now
This commit is contained in:
@@ -38,6 +38,7 @@ Printer :: struct {
|
|||||||
last_line_index: int,
|
last_line_index: int,
|
||||||
last_token: ^Format_Token,
|
last_token: ^Format_Token,
|
||||||
merge_next_token: bool,
|
merge_next_token: bool,
|
||||||
|
space_next_token: bool,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ write_comments :: proc(p: ^Printer, pos: tokenizer.Pos, format_token: Format_Tok
|
|||||||
|
|
||||||
next_comment_group(p);
|
next_comment_group(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if prev_comment != nil {
|
if prev_comment != nil {
|
||||||
newline_position(p, min(p.config.newline_limit, p.source_position.line - prev_comment.pos.line));
|
newline_position(p, min(p.config.newline_limit, p.source_position.line - prev_comment.pos.line));
|
||||||
}
|
}
|
||||||
@@ -176,6 +176,9 @@ append_format_token :: proc(p: ^Printer, format_token: Format_Token) -> ^Format_
|
|||||||
} else if p.merge_next_token {
|
} else if p.merge_next_token {
|
||||||
format_token.spaces_before = 0;
|
format_token.spaces_before = 0;
|
||||||
p.merge_next_token = false;
|
p.merge_next_token = false;
|
||||||
|
} else if p.space_next_token {
|
||||||
|
format_token.spaces_before = 1;
|
||||||
|
p.space_next_token = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
write_comments(p, p.source_position, format_token);
|
write_comments(p, p.source_position, format_token);
|
||||||
@@ -289,10 +292,15 @@ unindent :: proc(p: ^Printer) {
|
|||||||
p.depth -= 1;
|
p.depth -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private)
|
||||||
merge_next_token :: proc(p: ^Printer) {
|
merge_next_token :: proc(p: ^Printer) {
|
||||||
p.merge_next_token = true;
|
p.merge_next_token = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
space_next_token :: proc(p: ^Printer) {
|
||||||
|
p.space_next_token = true;
|
||||||
|
}
|
||||||
|
|
||||||
@(private)
|
@(private)
|
||||||
visit_decl :: proc(p: ^Printer, decl: ^ast.Decl, called_in_stmt := false) {
|
visit_decl :: proc(p: ^Printer, decl: ^ast.Decl, called_in_stmt := false) {
|
||||||
|
|
||||||
@@ -374,7 +382,7 @@ visit_decl :: proc(p: ^Printer, decl: ^ast.Decl, called_in_stmt := false) {
|
|||||||
if !v.is_mutable && v.type != nil {
|
if !v.is_mutable && v.type != nil {
|
||||||
push_generic_token(p, .Colon, 1);
|
push_generic_token(p, .Colon, 1);
|
||||||
} else {
|
} else {
|
||||||
push_generic_token(p, .Colon, 1);
|
push_generic_token(p, .Colon, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_expr(p, v.type);
|
visit_expr(p, v.type);
|
||||||
@@ -388,7 +396,7 @@ visit_decl :: proc(p: ^Printer, decl: ^ast.Decl, called_in_stmt := false) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if v.is_mutable && v.type != nil && len(v.values) != 0 {
|
if v.is_mutable && v.type != nil && len(v.values) != 0 {
|
||||||
push_generic_token(p, .Eq, 0);
|
push_generic_token(p, .Eq, 1);
|
||||||
} else if v.is_mutable && v.type == nil && len(v.values) != 0 {
|
} else if v.is_mutable && v.type == nil && len(v.values) != 0 {
|
||||||
push_generic_token(p, .Eq, 0);
|
push_generic_token(p, .Eq, 0);
|
||||||
} else if !v.is_mutable && v.type != nil {
|
} else if !v.is_mutable && v.type != nil {
|
||||||
@@ -823,23 +831,22 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr) {
|
|||||||
|
|
||||||
switch v in expr.derived {
|
switch v in expr.derived {
|
||||||
case Inline_Asm_Expr:
|
case Inline_Asm_Expr:
|
||||||
/*
|
push_generic_token(p, v.tok.kind, 1, v.tok.text);
|
||||||
print(p, v.tok, space, lparen);
|
|
||||||
visit_exprs(p, v.param_types, ", ");
|
|
||||||
print(p, rparen, space);
|
|
||||||
|
|
||||||
print(p, "->", space);
|
push_generic_token(p, .Open_Paren, 1);
|
||||||
|
visit_exprs(p, v.param_types, true, false);
|
||||||
|
push_generic_token(p, .Close_Paren, 0);
|
||||||
|
|
||||||
|
push_generic_token(p, .Sub, 1);
|
||||||
|
push_generic_token(p, .Gt, 0);
|
||||||
|
|
||||||
visit_expr(p, v.return_type);
|
visit_expr(p, v.return_type);
|
||||||
|
|
||||||
print(p, space);
|
push_generic_token(p, .Open_Brace, 1);
|
||||||
|
|
||||||
print(p, lbrace);
|
|
||||||
visit_expr(p, v.asm_string);
|
visit_expr(p, v.asm_string);
|
||||||
print(p, ", ");
|
push_generic_token(p, .Comma, 0);
|
||||||
visit_expr(p, v.constraints_string);
|
visit_expr(p, v.constraints_string);
|
||||||
print(p, rbrace);
|
push_generic_token(p, .Close_Brace, 0);
|
||||||
*/
|
|
||||||
case Undef:
|
case Undef:
|
||||||
push_generic_token(p, .Undef, 1);
|
push_generic_token(p, .Undef, 1);
|
||||||
case Auto_Cast:
|
case Auto_Cast:
|
||||||
@@ -893,7 +900,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr) {
|
|||||||
push_generic_token(p, .Close_Paren, 0);
|
push_generic_token(p, .Close_Paren, 0);
|
||||||
visit_expr(p, v.expr);
|
visit_expr(p, v.expr);
|
||||||
case Basic_Directive:
|
case Basic_Directive:
|
||||||
push_generic_token(p, v.tok.kind, 0);
|
push_generic_token(p, v.tok.kind, 1);
|
||||||
push_ident_token(p, v.name, 0);
|
push_ident_token(p, v.name, 0);
|
||||||
case Distinct_Type:
|
case Distinct_Type:
|
||||||
push_generic_token(p, .Distinct, 1);
|
push_generic_token(p, .Distinct, 1);
|
||||||
@@ -924,11 +931,17 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr) {
|
|||||||
visit_field_list(p, v.poly_params, true, false);
|
visit_field_list(p, v.poly_params, true, false);
|
||||||
push_generic_token(p, .Close_Paren, 0);
|
push_generic_token(p, .Close_Paren, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if v.is_maybe {
|
if v.is_maybe {
|
||||||
push_ident_token(p, "#maybe", 1);
|
push_ident_token(p, "#maybe", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v.where_clauses != nil {
|
||||||
|
move_line(p, v.where_clauses[0].pos);
|
||||||
|
push_generic_token(p, .Where, 1);
|
||||||
|
visit_exprs(p, v.where_clauses, true);
|
||||||
|
}
|
||||||
|
|
||||||
if v.variants != nil && (len(v.variants) == 0 || v.pos.line == v.end.line) {
|
if v.variants != nil && (len(v.variants) == 0 || v.pos.line == v.end.line) {
|
||||||
push_generic_token(p, .Open_Brace, 1);
|
push_generic_token(p, .Open_Brace, 1);
|
||||||
visit_exprs(p, v.variants, true);
|
visit_exprs(p, v.variants, true);
|
||||||
@@ -982,6 +995,12 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr) {
|
|||||||
push_generic_token(p, .Close_Paren, 0);
|
push_generic_token(p, .Close_Paren, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v.where_clauses != nil {
|
||||||
|
move_line(p, v.where_clauses[0].pos);
|
||||||
|
push_generic_token(p, .Where, 1);
|
||||||
|
visit_exprs(p, v.where_clauses, true);
|
||||||
|
}
|
||||||
|
|
||||||
if v.fields != nil && (len(v.fields.list) == 0 || v.pos.line == v.end.line) {
|
if v.fields != nil && (len(v.fields.list) == 0 || v.pos.line == v.end.line) {
|
||||||
push_generic_token(p, .Open_Brace, 1);
|
push_generic_token(p, .Open_Brace, 1);
|
||||||
set_source_position(p, v.fields.pos);
|
set_source_position(p, v.fields.pos);
|
||||||
|
|||||||
Reference in New Issue
Block a user