aboutsummaryrefslogtreecommitdiff
path: root/src/server
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
parent04e2312b458d0448bf39bd94a1770c0710c8f255 (diff)
simplified how variables are decided
Diffstat (limited to 'src/server')
-rw-r--r--src/server/completion.odin42
-rw-r--r--src/server/hover.odin6
-rw-r--r--src/server/requests.odin4
-rw-r--r--src/server/signature.odin46
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),