diff options
| author | Bradley Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-11-12 21:52:53 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-12 21:52:53 -0500 |
| commit | b2efc8f7789d2e51259d8d37da7bf59182b185fc (patch) | |
| tree | 53180031a39851a338dcf4288e73c5b685455fe6 | |
| parent | 4dbe21aed8d350b51baa37ecb59e78e450e948da (diff) | |
| parent | 8d189a070ce81e44d41a4ae087576b41f61735b5 (diff) | |
Merge pull request #1172 from A1029384756/master
added #all_or_none
| -rw-r--r-- | src/odin/printer/visit.odin | 4 | ||||
| -rw-r--r-- | src/server/collector.odin | 3 | ||||
| -rw-r--r-- | src/server/completion.odin | 1 | ||||
| -rw-r--r-- | src/server/documentation.odin | 3 | ||||
| -rw-r--r-- | src/server/symbol.odin | 4 | ||||
| -rw-r--r-- | tests/hover_test.odin | 4 |
6 files changed, 17 insertions, 2 deletions
diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 8c820d4..6294dbe 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -1613,6 +1613,10 @@ visit_expr :: proc( document = cons_with_nopl(document, text("#no_copy")) } + if v.is_all_or_none { + document = cons_with_nopl(document, text("#all_or_none")) + } + if v.align != nil { document = cons_with_nopl(document, text("#align")) document = cons_with_nopl(document, visit_expr(p, v.align)) diff --git a/src/server/collector.odin b/src/server/collector.odin index 8dcb794..3491f63 100644 --- a/src/server/collector.odin +++ b/src/server/collector.odin @@ -166,6 +166,9 @@ collect_struct_fields :: proc( b.align = clone_expr(struct_type.align, collection.allocator, &collection.unique_strings) b.max_field_align = clone_expr(struct_type.max_field_align, collection.allocator, &collection.unique_strings) b.min_field_align = clone_expr(struct_type.min_field_align, collection.allocator, &collection.unique_strings) + if struct_type.is_all_or_none { + b.tags |= {.Is_All_Or_None} + } if struct_type.is_no_copy { b.tags |= {.Is_No_Copy} } diff --git a/src/server/completion.odin b/src/server/completion.odin index 44916d7..4b1e099 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -586,6 +586,7 @@ DIRECTIVE_NAME_LIST :: []string { "packed", "raw_union", "align", + "all_or_none", /* union type */ "no_nil", "shared_nil", diff --git a/src/server/documentation.odin b/src/server/documentation.odin index 3ae3c53..0069ac4 100644 --- a/src/server/documentation.odin +++ b/src/server/documentation.odin @@ -634,6 +634,9 @@ write_struct_hover :: proc(sb: ^strings.Builder, ast_context: ^AstContext, v: Sy case .Is_No_Copy: wrote_tag = true strings.write_string(sb, " #no_copy") + case .Is_All_Or_None: + wrote_tag = true + strings.write_string(sb, " #all_or_none") } } diff --git a/src/server/symbol.odin b/src/server/symbol.odin index 5181ca3..d10178d 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -16,6 +16,7 @@ SymbolStructTag :: enum { Is_Packed, Is_Raw_Union, Is_No_Copy, + Is_All_Or_None, } SymbolStructTags :: bit_set[SymbolStructTag] @@ -427,6 +428,9 @@ write_struct_type :: proc( b.align = v.align b.max_field_align = v.max_field_align b.min_field_align = v.min_field_align + if v.is_all_or_none { + b.tags |= {.Is_All_Or_None} + } if v.is_no_copy { b.tags |= {.Is_No_Copy} } diff --git a/tests/hover_test.odin b/tests/hover_test.odin index 09f4bb9..8a41efc 100644 --- a/tests/hover_test.odin +++ b/tests/hover_test.odin @@ -3972,11 +3972,11 @@ ast_hover_struct_tags :: proc(t: ^testing.T) { ast_hover_struct_tags_packed :: proc(t: ^testing.T) { source := test.Source { main = `package test - Fo{*}o :: struct($T: typeid) #packed { + Fo{*}o :: struct($T: typeid) #packed #all_or_none { } `, } - test.expect_hover(t, &source, "test.Foo :: struct($T: typeid) #packed {}") + test.expect_hover(t, &source, "test.Foo :: struct($T: typeid) #packed #all_or_none {}") } @(test) |