aboutsummaryrefslogtreecommitdiff
path: root/src/server/completion.odin
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2022-01-11 23:21:57 +0100
committerDaniel Gavin <danielgavin5@hotmail.com>2022-01-11 23:21:57 +0100
commit3f3eb27677088d86cd7e0331f98385d497d0966a (patch)
tree1f3fc486ea5f8b2da3603fd9b0cca9dcf9572fa2 /src/server/completion.odin
parent04e2312b458d0448bf39bd94a1770c0710c8f255 (diff)
simplified how variables are decided
Diffstat (limited to 'src/server/completion.odin')
-rw-r--r--src/server/completion.odin42
1 files changed, 10 insertions, 32 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);
}