diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2022-01-11 23:21:57 +0100 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2022-01-11 23:21:57 +0100 |
| commit | 3f3eb27677088d86cd7e0331f98385d497d0966a (patch) | |
| tree | 1f3fc486ea5f8b2da3603fd9b0cca9dcf9572fa2 /src/server | |
| parent | 04e2312b458d0448bf39bd94a1770c0710c8f255 (diff) | |
simplified how variables are decided
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/completion.odin | 42 | ||||
| -rw-r--r-- | src/server/hover.odin | 6 | ||||
| -rw-r--r-- | src/server/requests.odin | 4 | ||||
| -rw-r--r-- | src/server/signature.odin | 46 |
4 files changed, 32 insertions, 66 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin index 0885e00..c458e34 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -155,7 +155,6 @@ get_directive_completion :: proc(ast_context: ^analysis.AstContext, position_con }; for elem in directive_list { - item := CompletionItem { detail = elem, label = elem, @@ -169,7 +168,6 @@ get_directive_completion :: proc(ast_context: ^analysis.AstContext, position_con } get_comp_lit_completion :: proc(ast_context: ^analysis.AstContext, position_context: ^analysis.DocumentPositionContext, list: ^CompletionList) { - using analysis; items := make([dynamic]CompletionItem, context.temp_allocator); @@ -179,17 +177,13 @@ get_comp_lit_completion :: proc(ast_context: ^analysis.AstContext, position_cont } if symbol, ok := resolve_type_expression(ast_context, position_context.parent_comp_lit.type); ok { - if comp_symbol, _, ok := resolve_type_comp_literal(ast_context, position_context, symbol, position_context.parent_comp_lit); ok { - #partial switch v in comp_symbol.value { case index.SymbolStructValue: for name, i in v.names { - ast_context.current_package = comp_symbol.pkg; if resolved, ok := resolve_type_expression(ast_context, v.types[i]); ok { - if field_exists_in_comp_lit(position_context.comp_lit, name) { continue; } @@ -212,7 +206,6 @@ get_comp_lit_completion :: proc(ast_context: ^analysis.AstContext, position_cont } get_selector_completion :: proc(ast_context: ^analysis.AstContext, position_context: ^analysis.DocumentPositionContext, list: ^CompletionList) { - using analysis; items := make([dynamic]CompletionItem, context.temp_allocator); @@ -220,9 +213,9 @@ get_selector_completion :: proc(ast_context: ^analysis.AstContext, position_cont ast_context.current_package = ast_context.document_package; selector: index.Symbol; - ok: bool; + ok: bool; - ast_context.use_locals = true; + ast_context.use_locals = true; ast_context.use_globals = true; selector, ok = resolve_type_expression(ast_context, position_context.selector); @@ -231,16 +224,10 @@ get_selector_completion :: proc(ast_context: ^analysis.AstContext, position_cont return; } - if ident, ok := position_context.selector.derived.(ast.Ident); ok { - symbol, ok := resolve_type_identifier(ast_context, ident); - - if !ok { - return; - } - - if (symbol.type != .Variable && symbol.type != .Package && selector.type != .Enum && ident.name != "") || (symbol.type == .Variable && selector.type == .Enum) { - return; - } + //if (selector.type != .Variable && selector.type != .Package && selector.type != .Enum && selector.name != "") || (selector.type == .Variable && selector.type == .Enum) { + + if selector.type != .Variable && selector.type != .Package { + return; } if selector.pkg != "" { @@ -448,7 +435,6 @@ get_selector_completion :: proc(ast_context: ^analysis.AstContext, position_cont symbol := search.symbol; resolve_unresolved_symbol(ast_context, &symbol); - build_procedure_symbol_return(&symbol); build_procedure_symbol_signature(&symbol); item := CompletionItem { @@ -803,7 +789,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co doc: string, pkg: string, signature: string, - returns: string, flags: index.SymbolFlags, }; @@ -849,7 +834,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co for r in results { r := r; resolve_unresolved_symbol(ast_context, &r.symbol); - build_procedure_symbol_return(&r.symbol); build_procedure_symbol_signature(&r.symbol); if r.symbol.uri != ast_context.uri { append(&combined, CombinedResult { @@ -859,7 +843,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co doc = r.symbol.doc, flags = r.symbol.flags, signature = r.symbol.signature, - returns = r.symbol.returns, pkg = r.symbol.pkg, }); } @@ -890,7 +873,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co if symbol, ok := resolve_type_identifier(ast_context, ident^); ok { symbol.signature = get_signature(ast_context, ident^, symbol); - build_procedure_symbol_return(&symbol); build_procedure_symbol_signature(&symbol); if score, ok := common.fuzzy_match(matcher, ident.name); ok == 1 { @@ -902,7 +884,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co flags = symbol.flags, pkg = symbol.pkg, signature = symbol.signature, - returns = symbol.returns, }); } } @@ -913,17 +894,18 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co break; } + local_offset := get_local_offset(ast_context, position_context.position, k); + ast_context.use_locals = true; ast_context.use_globals = true; ast_context.current_package = ast_context.document_package; - ident := index.new_type(ast.Ident, {offset = position_context.position}, {offset = position_context.position}, context.temp_allocator); + ident := index.new_type(ast.Ident, {offset = local_offset}, {offset = local_offset}, context.temp_allocator); ident.name = k; if symbol, ok := resolve_type_identifier(ast_context, ident^); ok { symbol.signature = get_signature(ast_context, ident^, symbol); - build_procedure_symbol_return(&symbol); build_procedure_symbol_signature(&symbol); if score, ok := common.fuzzy_match(matcher, ident.name); ok == 1 { @@ -935,7 +917,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co flags = symbol.flags, pkg = symbol.pkg, signature = symbol.signature, - returns = symbol.returns, }); } } @@ -959,7 +940,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co doc = symbol.doc, flags = symbol.flags, signature = symbol.signature, - returns = symbol.returns, pkg = symbol.pkg, }); } @@ -979,7 +959,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co doc = symbol.doc, flags = symbol.flags, signature = symbol.signature, - returns = symbol.returns, pkg = symbol.pkg, }); } @@ -999,7 +978,6 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co doc = symbol.doc, flags = symbol.flags, signature = symbol.signature, - returns = symbol.returns, pkg = symbol.pkg, }); } @@ -1063,7 +1041,7 @@ get_identifier_completion :: proc(ast_context: ^analysis.AstContext, position_co item.command.command = "editor.action.triggerParameterHints"; } - item.detail = concatenate_symbol_information(ast_context, result.pkg, result.name, result.signature, result.returns, result.type, true); + item.detail = concatenate_symbol_information(ast_context, result.pkg, result.name, result.signature, result.type, true); append(&items, item); } diff --git a/src/server/hover.odin b/src/server/hover.odin index b77c0b1..d19d990 100644 --- a/src/server/hover.odin +++ b/src/server/hover.odin @@ -18,7 +18,6 @@ import "shared:index" import "shared:analysis" write_hover_content :: proc(ast_context: ^analysis.AstContext, symbol: index.Symbol) -> MarkupContent { - using analysis; content: MarkupContent; @@ -34,7 +33,6 @@ write_hover_content :: proc(ast_context: ^analysis.AstContext, symbol: index.Sym } } - build_procedure_symbol_return(&symbol); build_procedure_symbol_signature(&symbol); cat := concatenate_symbol_information(ast_context, symbol, false); @@ -99,7 +97,7 @@ get_hover_information :: proc(document: ^common.Document, position: common.Posit resolved.signature = get_signature(&ast_context, ident, resolved); resolved.name = ident.name; - if is_variable, ok := ast_context.variables[ident.name]; ok && is_variable { + if resolved.type == .Variable { resolved.pkg = ast_context.document_package; } @@ -166,7 +164,7 @@ get_hover_information :: proc(document: ^common.Document, position: common.Posit resolved.signature = get_signature(&ast_context, ident, resolved); resolved.name = ident.name; - if is_variable, ok := ast_context.variables[ident.name]; ok && is_variable { + if resolved.type == .Variable { resolved.pkg = ast_context.document_package; } diff --git a/src/server/requests.odin b/src/server/requests.odin index 7892432..8d965c7 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -570,9 +570,9 @@ request_initialize :: proc (task: ^common.Task) { if core, ok := config.collections["core"]; ok { when ODIN_OS == "windows" { - append(&index.indexer.built_in_packages, path.join(strings.to_lower(core, context.temp_allocator), "runtime")); + append(&index.indexer.builtin_packages, path.join(strings.to_lower(core, context.temp_allocator), "runtime")); } else { - append(&index.indexer.built_in_packages, path.join(core, "runtime")); + append(&index.indexer.builtin_packages, path.join(core, "runtime")); } } diff --git a/src/server/signature.odin b/src/server/signature.odin index 91e2b47..cc04cd5 100644 --- a/src/server/signature.odin +++ b/src/server/signature.odin @@ -56,6 +56,7 @@ build_procedure_symbol_signature :: proc(symbol: ^index.Symbol) { if value, ok := symbol.value.(index.SymbolProcedureValue); ok { builder := strings.make_builder(context.temp_allocator); + strings.write_string(&builder, "proc"); strings.write_string(&builder, "("); for arg, i in value.arg_types { strings.write_string(&builder, common.node_to_string(arg)); @@ -65,34 +66,27 @@ build_procedure_symbol_signature :: proc(symbol: ^index.Symbol) { } strings.write_string(&builder, ")"); - symbol.signature = strings.to_string(builder); - } -} + if len(value.return_types) != 0 { + strings.write_string(&builder, " -> "); -build_procedure_symbol_return :: proc(symbol: ^index.Symbol) { - if value, ok := symbol.value.(index.SymbolProcedureValue); ok { - builder := strings.make_builder(context.temp_allocator); + if len(value.return_types) > 1 { + strings.write_string(&builder, "("); + } - if len(value.return_types) == 0 { - return; - } - - if len(value.return_types) > 1 { - strings.write_string(&builder, "("); - } - - for arg, i in value.return_types { - strings.write_string(&builder, common.node_to_string(arg)); - if i != len(value.return_types) - 1 { - strings.write_string(&builder, ", "); + for arg, i in value.return_types { + strings.write_string(&builder, common.node_to_string(arg)); + if i != len(value.return_types) - 1 { + strings.write_string(&builder, ", "); + } + } + + if len(value.return_types) > 1 { + strings.write_string(&builder, ")"); } } - - if len(value.return_types) > 1 { - strings.write_string(&builder, ")"); - } - - symbol.returns = strings.to_string(builder); + symbol.signature = strings.to_string(builder); + } else if value, ok := symbol.value.(index.SymbolAggregateValue); ok { + symbol.signature = "proc"; } } @@ -101,7 +95,6 @@ seperate_proc_field_arguments :: proc(procedure: ^index.Symbol) { types := make([dynamic]^ast.Field, context.temp_allocator); for arg, i in value.arg_types { - if len(arg.names) == 1 { append(&types, arg); continue; @@ -122,7 +115,6 @@ seperate_proc_field_arguments :: proc(procedure: ^index.Symbol) { get_signature_information :: proc(document: ^common.Document, position: common.Position) -> (SignatureHelp, bool) { - using analysis; signature_help: SignatureHelp; @@ -175,7 +167,6 @@ get_signature_information :: proc(document: ^common.Document, position: common.P } build_procedure_symbol_signature(&call); - build_procedure_symbol_return(&call); info := SignatureInformation { label = concatenate_symbol_information(&ast_context, call, false), @@ -206,7 +197,6 @@ get_signature_information :: proc(document: ^common.Document, position: common.P } build_procedure_symbol_signature(&symbol); - build_procedure_symbol_return(&symbol); info := SignatureInformation { label = concatenate_symbol_information(&ast_context, symbol, false), |