aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/ast.odin30
-rw-r--r--src/odin/printer/visit.odin40
-rw-r--r--src/server/requests.odin2
3 files changed, 52 insertions, 20 deletions
diff --git a/src/common/ast.odin b/src/common/ast.odin
index 840d73b..2d8c898 100644
--- a/src/common/ast.odin
+++ b/src/common/ast.odin
@@ -16,6 +16,7 @@ keyword_map: map[string]bool = {
"f32" = true,
"f64" = true,
"i64" = true,
+ "i128" = true,
"i32" = true,
"i16" = true,
"u16" = true,
@@ -23,6 +24,7 @@ keyword_map: map[string]bool = {
"rawptr" = true,
"any" = true,
"u32" = true,
+ "u128" = true,
"b32" = true,
"b64" = true,
"true" = true,
@@ -32,6 +34,34 @@ keyword_map: map[string]bool = {
"u8" = true,
"i8" = true,
"rune" = true,
+ "f16be" = true,
+ "f16le" = true,
+ "f32be" = true,
+ "f32le" = true,
+ "f64be" = true,
+ "f64le" = true,
+ "i16be" = true,
+ "i16le" = true,
+ "i32be" = true,
+ "i32le" = true,
+ "i64be" = true,
+ "i64le" = true,
+ "u16be" = true,
+ "u16le" = true,
+ "u32be" = true,
+ "u32le" = true,
+ "u64be" = true,
+ "u64le" = true,
+ "i128be" = true,
+ "i128le" = true,
+ "u128be" = true,
+ "u128le" = true,
+ "complex32" = true,
+ "complex64" = true,
+ "complex128" = true,
+ "quaternion64" = true,
+ "quaternion128" = true,
+ "quaternion256" = true,
};
GlobalExpr :: struct {
diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin
index 44d6aff..d0e83d7 100644
--- a/src/odin/printer/visit.odin
+++ b/src/odin/printer/visit.odin
@@ -327,9 +327,9 @@ visit_exprs :: proc(p: ^Printer, list: []^ast.Expr, options := List_Options{}, c
for expr, i in list {
if (.Enforce_Newline in options) {
- document = cons(document, visit_expr(p, expr, called_from, options))
+ document = cons(document, .Group in options ? group(visit_expr(p, expr, called_from, options)) : visit_expr(p, expr, called_from, options))
} else {
- document = cons_with_opl(document, visit_expr(p, expr, called_from, options))
+ document = cons_with_opl(document, .Group in options ? group(visit_expr(p, expr, called_from, options)) : visit_expr(p, expr, called_from, options))
}
if (i != len(list) - 1 || .Trailing in options) && .Add_Comma in options {
@@ -635,14 +635,14 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener
if v.init != nil {
set_source_position(p, v.init.pos);
- for_document = cons_with_nopl(for_document, cons(group(visit_stmt(p, v.init)), cons(text(";"), break_with(""))))
+ for_document = cons_with_nopl(for_document, cons(group(visit_stmt(p, v.init)), text(";")))
} else if v.post != nil {
for_document = cons_with_nopl(for_document, text(";"))
}
if v.cond != nil {
set_source_position(p, v.cond.pos);
- for_document = cons_with_nopl(for_document, fill_group(visit_expr(p, v.cond)))
+ for_document = cons_with_opl(for_document, fill_group(visit_expr(p, v.cond)))
}
if v.post != nil {
@@ -759,19 +759,19 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener
document = cons(document, text("return"))
if v.results != nil {
- document = cons_with_opl(document, visit_exprs(p, v.results, {.Add_Comma}))
+ document = cons_with_nopl(document, visit_exprs(p, v.results, {.Add_Comma}))
}
return document
case Defer_Stmt:
document := move_line(p, v.pos)
document = cons(document, text("defer"))
- document = cons_with_opl(document, visit_stmt(p, v.stmt))
+ document = cons_with_nopl(document, visit_stmt(p, v.stmt))
return document
case When_Stmt:
document := move_line(p, v.pos)
- document = cons(document, cons_with_opl(text("when"), visit_expr(p, v.cond)))
+ document = cons(document, cons_with_nopl(text("when"), visit_expr(p, v.cond)))
document = cons_with_nopl(document, visit_stmt(p, v.body))
@@ -782,7 +782,7 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener
set_source_position(p, v.else_stmt.pos)
- document = cons(document, cons_with_opl(text("else"), visit_stmt(p, v.else_stmt)))
+ document = cons_with_nopl(document, cons_with_nopl(text("else"), visit_stmt(p, v.else_stmt)))
}
return document
case Branch_Stmt:
@@ -869,17 +869,17 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type =
return cons_with_nopl(text_token(p, v.op), visit_expr(p, v.expr))
case Ternary_If_Expr:
document := visit_expr(p, v.cond)
- document = cons_with_opl(document, text_token(p, v.op1))
- document = cons_with_opl(document, visit_expr(p, v.x))
- document = cons_with_opl(document, text_token(p, v.op2))
- document = cons_with_opl(document, visit_expr(p, v.y))
+ document = cons_with_nopl(document, text_token(p, v.op1))
+ document = cons_with_nopl(document, visit_expr(p, v.x))
+ document = cons_with_nopl(document, text_token(p, v.op2))
+ document = cons_with_nopl(document, visit_expr(p, v.y))
return document
case Ternary_When_Expr:
document := visit_expr(p, v.cond)
- document = cons_with_opl(document, text_token(p, v.op1))
- document = cons_with_opl(document, visit_expr(p, v.x))
- document = cons_with_opl(document, text_token(p, v.op2))
- document = cons_with_opl(document, visit_expr(p, v.y))
+ document = cons_with_nopl(document, text_token(p, v.op1))
+ document = cons_with_nopl(document, visit_expr(p, v.x))
+ document = cons_with_nopl(document, text_token(p, v.op2))
+ document = cons_with_nopl(document, visit_expr(p, v.y))
return document
case Or_Else_Expr:
document := visit_expr(p, v.x)
@@ -895,7 +895,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type =
document = cons(document, text(")"))
return document
case Ellipsis:
- return cons_with_opl(text("..."), visit_expr(p, v.expr))
+ return cons_with_opl(text(".."), visit_expr(p, v.expr))
case Relative_Type:
return cons_with_opl(visit_expr(p, v.tag), visit_expr(p, v.type))
case Slice_Expr:
@@ -1105,7 +1105,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type =
document = cons(document, visit_end_brace(p, v.end, 1))
} else {
document = cons(document, text("{"))
- document = cons(document, nest(p.indentation_count, cons(break_with(""), visit_exprs(p, v.elems, {.Add_Comma}))))
+ document = cons(document, nest(p.indentation_count, cons(break_with(""), visit_exprs(p, v.elems, {.Add_Comma, .Group}))))
document = cons(document, cons(cons(if_break(","), break_with("")), text("}")))
document = group(document)
}
@@ -1371,7 +1371,7 @@ visit_call_exprs :: proc(p: ^Printer, list: []^ast.Expr, ellipsis := false) -> ^
for expr, i in list {
if i == len(list) - 1 && ellipsis {
- document = cons(document, text("..."))
+ document = cons(document, text(".."))
}
document = cons(document, visit_expr(p, expr))
@@ -1454,6 +1454,8 @@ get_node_length :: proc(node: ^ast.Node) -> int {
return len(v.name)
case ast.Basic_Lit:
return len(v.tok.text)
+ case ast.Implicit_Selector_Expr:
+ return len(v.field.name) + 1
case ast.Binary_Expr:
return 0
case:
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 1c9ea13..754af8d 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -497,7 +497,7 @@ request_initialize :: proc (task: ^common.Task) {
config.signature_offset_support = initialize_params.capabilities.textDocument.signatureHelp.signatureInformation.parameterInformation.labelOffsetSupport;
completionTriggerCharacters := []string {".", ">", "#", "\"", "/", ":"};
- signatureTriggerCharacters := []string {"("};
+ signatureTriggerCharacters := []string {"(", ","};
signatureRetriggerCharacters := []string {","};
token_type := type_info_of(SemanticTokenTypes).variant.(runtime.Type_Info_Named).base.variant.(runtime.Type_Info_Enum);