diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/clone.odin | 20 | ||||
| -rw-r--r-- | src/server/collector.odin | 7 | ||||
| -rw-r--r-- | src/server/symbol.odin | 2 |
3 files changed, 27 insertions, 2 deletions
diff --git a/src/server/clone.odin b/src/server/clone.odin index c49152d..43f8d24 100644 --- a/src/server/clone.odin +++ b/src/server/clone.odin @@ -33,6 +33,7 @@ clone_type :: proc { clone_expr, clone_array, clone_dynamic_array, + clone_comment_group, } clone_array :: proc(array: $A/[]^$T, allocator: mem.Allocator, unique_strings: ^map[string]string) -> A { @@ -279,8 +280,27 @@ clone_node :: proc(node: ^ast.Node, allocator: mem.Allocator, unique_strings: ^m case ^Or_Else_Expr: r.x = clone_type(r.x, allocator, unique_strings) r.y = clone_type(r.y, allocator, unique_strings) + case ^Comment_Group: + list := make([dynamic]tokenizer.Token, 0, len(r.list), allocator) + for t in r.list { + append(&list, tokenizer.Token { + text = strings.clone(t.text, allocator), + kind = t.kind, + pos = tokenizer.Pos { + file = strings.clone(t.pos.file, allocator), + offset = t.pos.offset, + line = t.pos.line, + column = t.pos.column, + }, + }) + } + r.list = list[:] case: } return res } + +clone_comment_group :: proc(node: ^ast.Comment_Group, allocator: mem.Allocator, unique_strings: ^map[string]string) -> ^ast.Comment_Group { + return cast(^ast.Comment_Group)clone_node(node, allocator, unique_strings) +} diff --git a/src/server/collector.odin b/src/server/collector.odin index 1bbe569..667e8c8 100644 --- a/src/server/collector.odin +++ b/src/server/collector.odin @@ -136,12 +136,15 @@ collect_struct_fields :: proc( if .Using in field.flags { append(&b.unexpanded_usings, len(b.names) - 1) + b.usings[len(b.names) - 1] = struct{}{} } append(&b.ranges, common.get_token_range(n, file.src)) - append(&b.docs, field.docs) - append(&b.comments, field.comment) + cloned_docs := clone_type(field.docs, collection.allocator, &collection.unique_strings) + append(&b.docs, cloned_docs) + cloned_comment := clone_type(field.comment, collection.allocator, &collection.unique_strings) + append(&b.comments, cloned_comment) append(&b.from_usings, -1) } } diff --git a/src/server/symbol.odin b/src/server/symbol.odin index 7bd6cd2..a458f9e 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -255,6 +255,7 @@ symbol_struct_value_builder_make_symbol_symbol_struct_value :: proc( ranges = slice.to_dynamic(v.ranges, allocator), docs = slice.to_dynamic(v.docs, allocator), comments = slice.to_dynamic(v.comments, allocator), + usings = v.usings, from_usings = slice.to_dynamic(v.from_usings, allocator), unexpanded_usings = slice.to_dynamic(v.unexpanded_usings, allocator), } @@ -304,6 +305,7 @@ write_struct_type :: proc( if identifier, ok := n.derived.(^ast.Ident); ok && field.type != nil { if .Using in field.flags { append(&b.unexpanded_usings, len(b.types)) + b.usings[len(b.types)] = struct{}{} } append(&b.names, identifier.name) |