diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-25 21:23:29 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-27 20:10:21 -0400 |
| commit | 747bd0539895fdf2ef9f47ba35238e86f3021fcc (patch) | |
| tree | aed05bd361f2db6f9186ab0eec47db4e9e09d4b5 /src/server/analysis.odin | |
| parent | 4eae668a145df223c6cfc7b8929cdd49d436756d (diff) | |
Consolidate documentation writing code into new file and base it around symbols
Diffstat (limited to 'src/server/analysis.odin')
| -rw-r--r-- | src/server/analysis.odin | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index b43dce7..3798adc 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -3753,53 +3753,6 @@ clear_locals :: proc(ast_context: ^AstContext) { clear(&ast_context.usings) } -concatenate_symbol_information :: proc { - concatenate_raw_symbol_information, - concatenate_raw_string_information, -} - -concatenate_raw_symbol_information :: proc(ast_context: ^AstContext, symbol: Symbol, is_completion: bool) -> string { - return concatenate_raw_string_information( - ast_context, - symbol.pkg, - symbol.name, - symbol.signature, - symbol.type, - symbol.comment, - is_completion, - ) -} - -concatenate_raw_string_information :: proc( - ast_context: ^AstContext, - pkg: string, - name: string, - signature: string, - type: SymbolType, - comment: string, - is_completion: bool, -) -> string { - pkg := path.base(pkg, false, context.temp_allocator) - - if type == .Package { - return fmt.tprintf("%v: package", name) - } else if type == .Keyword && is_completion { - return name - } else if type == .Function { - if comment != "" { - return fmt.tprintf("%v\n%v.%v: %v", comment, pkg, name, signature) - } - return fmt.tprintf("%v.%v: %v", pkg, name, signature) - - } else { - if signature != "" { - return fmt.tprintf("%v.%v: %v", pkg, name, signature) - } else { - return fmt.tprintf("%v.%v", pkg, name) - } - } -} - unwrap_procedure_until_struct_bit_field_or_package :: proc( ast_context: ^AstContext, node: ^ast.Expr, @@ -3925,257 +3878,6 @@ unwrap_bitset :: proc(ast_context: ^AstContext, bitset_symbol: Symbol) -> (Symbo return {}, false } -append_variable_full_name :: proc( - sb: ^strings.Builder, - ast_context: ^AstContext, - symbol: Symbol, - pointer_prefix: string, -) { - pkg_name := get_symbol_pkg_name(ast_context, symbol) - if pkg_name == "" { - fmt.sbprintf(sb, "%s%s :: ", pointer_prefix, symbol.name) - return - } - fmt.sbprintf(sb, "%s%s.%s :: ", pointer_prefix, pkg_name, symbol.name) - return -} - -make_comment_map :: proc(groups: []^ast.Comment_Group, allocator: mem.Allocator) -> map[int]^ast.Comment_Group { - comment_map := make(map[int]^ast.Comment_Group, allocator = allocator) - - for cg in groups { - comment_map[cg.pos.line] = cg - } - - return comment_map -} - -get_signature :: proc( - ast_context: ^AstContext, - symbol: Symbol, - was_variable := false, - short_signature := false, -) -> string { - if symbol.type == .Function { - return symbol.signature - } - - if .Distinct in symbol.flags { - return symbol.name - } - - is_variable := symbol.type == .Variable - is_field := symbol.type == .Field - - pointer_prefix := repeat("^", symbol.pointers, context.temp_allocator) - - - #partial switch v in symbol.value { - case SymbolBasicValue: - return strings.concatenate({pointer_prefix, node_to_string(v.ident)}, ast_context.allocator) - case SymbolBitSetValue: - return strings.concatenate( - a = {pointer_prefix, "bit_set[", node_to_string(v.expr), "]"}, - allocator = ast_context.allocator, - ) - case SymbolEnumValue: - if short_signature { - builder := strings.builder_make(ast_context.allocator) - if is_variable { - append_variable_full_name(&builder, ast_context, symbol, pointer_prefix) - } - strings.write_string(&builder, "enum") - return strings.to_string(builder) - } - builder := strings.builder_make(ast_context.allocator) - if is_variable { - append_variable_full_name(&builder, ast_context, symbol, pointer_prefix) - } - strings.write_string(&builder, "enum {\n") - for i in 0 ..< len(v.names) { - strings.write_string(&builder, "\t") - strings.write_string(&builder, v.names[i]) - strings.write_string(&builder, ",\n") - } - strings.write_string(&builder, "}") - return strings.to_string(builder) - case SymbolMapValue: - return strings.concatenate( - a = {pointer_prefix, "map[", node_to_string(v.key), "]", node_to_string(v.value)}, - allocator = ast_context.allocator, - ) - case SymbolProcedureValue: - return "proc" - case SymbolStructValue: - if short_signature { - builder := strings.builder_make(ast_context.allocator) - if is_variable { - append_variable_full_name(&builder, ast_context, symbol, pointer_prefix) - } - strings.write_string(&builder, "struct") - return strings.to_string(builder) - } - builder := strings.builder_make(ast_context.allocator) - if is_variable { - append_variable_full_name(&builder, ast_context, symbol, pointer_prefix) - } else if is_field { - pkg_name := get_pkg_name(ast_context, symbol.type_pkg) - if pkg_name == "" { - fmt.sbprintf(&builder, "%s%s", pointer_prefix, symbol.type_name) - } else { - fmt.sbprintf(&builder, "%s%s.%s", pointer_prefix, pkg_name, symbol.type_name) - } - if symbol.comment != "" { - fmt.sbprintf(&builder, " %s", symbol.comment) - } - return strings.to_string(builder) - } else if symbol.type_name != "" { - if symbol.type_pkg == "" { - fmt.sbprintf(&builder, "%s%s :: ", pointer_prefix, symbol.type_name) - } else { - pkg_name := get_pkg_name(ast_context, symbol.type_pkg) - fmt.sbprintf(&builder, "%s%s.%s :: ", pointer_prefix, pkg_name, symbol.type_name) - } - } - if len(v.names) == 0 { - strings.write_string(&builder, "struct {}") - return strings.to_string(builder) - } - write_struct_hover(ast_context, &builder, v) - return strings.to_string(builder) - case SymbolUnionValue: - if short_signature { - builder := strings.builder_make(ast_context.allocator) - if is_variable { - append_variable_full_name(&builder, ast_context, symbol, pointer_prefix) - } - strings.write_string(&builder, "union") - return strings.to_string(builder) - } - builder := strings.builder_make(ast_context.allocator) - if is_variable { - append_variable_full_name(&builder, ast_context, symbol, pointer_prefix) - } - strings.write_string(&builder, "union {\n") - for i in 0 ..< len(v.types) { - strings.write_string(&builder, "\t") - build_string_node(v.types[i], &builder, false) - strings.write_string(&builder, ",\n") - } - strings.write_string(&builder, "}") - return strings.to_string(builder) - case SymbolBitFieldValue: - if is_variable { - return strings.concatenate({pointer_prefix, symbol.name}, ast_context.allocator) - } else { - return "bit_field" - } - case SymbolMultiPointerValue: - return strings.concatenate( - a = {pointer_prefix, "[^]", node_to_string(v.expr)}, - allocator = ast_context.allocator, - ) - case SymbolDynamicArrayValue: - return strings.concatenate( - a = {pointer_prefix, "[dynamic]", node_to_string(v.expr)}, - allocator = ast_context.allocator, - ) - case SymbolSliceValue: - return strings.concatenate( - a = {pointer_prefix, "[]", node_to_string(v.expr)}, - allocator = ast_context.allocator, - ) - case SymbolFixedArrayValue: - return strings.concatenate( - a = {pointer_prefix, "[", node_to_string(v.len), "]", node_to_string(v.expr)}, - allocator = ast_context.allocator, - ) - case SymbolMatrixValue: - return strings.concatenate( - a = { - pointer_prefix, - "matrix", - "[", - node_to_string(v.x), - ",", - node_to_string(v.y), - "]", - node_to_string(v.expr), - }, - allocator = ast_context.allocator, - ) - case SymbolPackageValue: - return "package" - case SymbolUntypedValue: - switch v.type { - case .Float: - return "float" - case .String: - return "string" - case .Bool: - return "bool" - case .Integer: - return "int" - } - } - - return "" -} - -write_struct_hover :: proc(ast_context: ^AstContext, sb: ^strings.Builder, v: SymbolStructValue) { - using_prefix := "using " - longestNameLen := 0 - for name, i in v.names { - l := len(name) - if _, ok := v.usings[i]; ok { - l += len(using_prefix) - } - if l > longestNameLen { - longestNameLen = len(name) - } - } - - using_index := -1 - - strings.write_string(sb, "struct {\n") - for i in 0 ..< len(v.names) { - if i < len(v.from_usings) { - if index := v.from_usings[i]; index != using_index { - fmt.sbprintf(sb, "\n\t// from `using %s: ", v.names[index]) - build_string_node(v.types[index], sb, false) - strings.write_string(sb, "`\n") - using_index = index - } - } - if i < len(v.docs) && v.docs[i] != nil { - for c in v.docs[i].list { - fmt.sbprintf(sb, "\t%s\n", c.text) - } - } - - strings.write_string(sb, "\t") - - name_len := len(v.names[i]) - if _, ok := v.usings[i]; ok { - strings.write_string(sb, using_prefix) - name_len += len(using_prefix) - } - strings.write_string(sb, v.names[i]) - fmt.sbprintf(sb, ":%*s", longestNameLen - name_len + 1, "") - build_string_node(v.types[i], sb, false) - strings.write_string(sb, ",") - - if i < len(v.comments) && v.comments[i] != nil { - for c in v.comments[i].list { - fmt.sbprintf(sb, " %s\n", c.text) - } - } else { - strings.write_string(sb, "\n") - } - } - strings.write_string(sb, "}") -} - position_in_proc_decl :: proc(position_context: ^DocumentPositionContext) -> bool { if position_context.value_decl == nil { return false |