aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2021-01-28 22:50:41 +0100
committerDanielGavin <danielgavin5@hotmail.com>2021-01-28 22:50:41 +0100
commit03be1921847190c63d4e42637526e3d00160f6e5 (patch)
treef3c047c39ef2742e0154119d7d742ed49064b284 /src
parente4bf674635029e249dab36f993bfd08b39792970 (diff)
add verbose setting
Diffstat (limited to 'src')
-rw-r--r--src/common/ast.odin4
-rw-r--r--src/common/config.odin4
-rw-r--r--src/index/build.odin2
-rw-r--r--src/index/clone.odin2
-rw-r--r--src/index/collector.odin2
-rw-r--r--src/index/indexer.odin6
-rw-r--r--src/main.odin30
-rw-r--r--src/server/analysis.odin9
-rw-r--r--src/server/background.odin (renamed from src/index/background.odin)9
-rw-r--r--src/server/requests.odin3
-rw-r--r--src/server/types.odin1
-rw-r--r--src/session/capture.odin2
12 files changed, 46 insertions, 28 deletions
diff --git a/src/common/ast.odin b/src/common/ast.odin
index f3c85eb..3826bf4 100644
--- a/src/common/ast.odin
+++ b/src/common/ast.odin
@@ -341,7 +341,7 @@ free_ast_node :: proc(node: ^ast.Node, allocator: mem.Allocator) {
free_ast(n.key, allocator);
free_ast(n.value, allocator);
case:
- log.errorf("free Unhandled node kind: %T", n);
+ log.warnf("free Unhandled node kind: %T", n);
}
mem.free(node, allocator);
@@ -570,7 +570,7 @@ node_equal_node :: proc(a, b: ^ast.Node) -> bool {
// return node_equal(n.specialization, m.specialization);
//}
case:
- log.error("Unhandled poly node kind: %T", m);
+ log.warn("Unhandled poly node kind: %T", m);
}
return false;
diff --git a/src/common/config.odin b/src/common/config.odin
index c55efd6..12ae171 100644
--- a/src/common/config.odin
+++ b/src/common/config.odin
@@ -7,7 +7,7 @@ Config :: struct {
signature_offset_support: bool,
collections: map [string] string,
running: bool,
+ verbose: bool,
debug_single_thread: bool,
enable_semantic_tokens: bool, //This will be removed when vscode client stops sending me semantic tokens after disabling it in requests initialize.
-};
-
+}; \ No newline at end of file
diff --git a/src/index/build.odin b/src/index/build.odin
index aba37f1..187ec42 100644
--- a/src/index/build.odin
+++ b/src/index/build.odin
@@ -107,7 +107,7 @@ free_static_index :: proc() {
log_error_handler :: proc(pos: tokenizer.Pos, msg: string, args: ..any) {
- log.errorf("%v %v %v", pos, msg, args);
+ log.warnf("%v %v %v", pos, msg, args);
}
log_warning_handler :: proc(pos: tokenizer.Pos, msg: string, args: ..any) {
diff --git a/src/index/clone.odin b/src/index/clone.odin
index aa07f3b..923b39a 100644
--- a/src/index/clone.odin
+++ b/src/index/clone.odin
@@ -222,7 +222,7 @@ clone_node :: proc(node: ^ast.Node, allocator: mem.Allocator, unique_strings: ^m
r.type = clone_type(r.type, allocator, unique_strings);
r.elems = clone_type(r.elems, allocator, unique_strings);
case:
- log.error("Clone type Unhandled node kind: %T", n);
+ log.warn("Clone type Unhandled node kind: %T", n);
}
return res;
diff --git a/src/index/collector.odin b/src/index/collector.odin
index 3331ad0..81de39a 100644
--- a/src/index/collector.odin
+++ b/src/index/collector.odin
@@ -502,7 +502,7 @@ replace_package_alias_node :: proc(node: ^ast.Node, package_map: map [string] st
replace_package_alias(n.type, package_map, collection);
replace_package_alias(n.elems, package_map, collection);
case:
- log.error("Replace Unhandled node kind: %T", n);
+ log.warnf("Replace Unhandled node kind: %T", n);
}
} \ No newline at end of file
diff --git a/src/index/indexer.odin b/src/index/indexer.odin
index 70f28c1..1ad2b8b 100644
--- a/src/index/indexer.odin
+++ b/src/index/indexer.odin
@@ -38,6 +38,7 @@ import "core:sort"
Indexer :: struct {
built_in_packages: [dynamic] string,
static_index: MemoryIndex,
+ dynamic_index: MemoryIndex,
};
indexer: Indexer;
@@ -50,6 +51,11 @@ FuzzyResult :: struct {
lookup :: proc(name: string, pkg: string, loc := #caller_location) -> (Symbol, bool) {
+ if symbol, ok := memory_index_lookup(&indexer.dynamic_index, name, pkg); ok {
+ log.infof("lookup dynamic name: %v pkg: %v, symbol %v location %v", name, pkg, symbol, loc);
+ return symbol, true;
+ }
+
if symbol, ok := memory_index_lookup(&indexer.static_index, name, pkg); ok {
log.infof("lookup name: %v pkg: %v, symbol %v location %v", name, pkg, symbol, loc);
return symbol, true;
diff --git a/src/main.odin b/src/main.odin
index d96c6e2..552b70a 100644
--- a/src/main.odin
+++ b/src/main.odin
@@ -9,6 +9,7 @@ import "core:slice"
import "core:strconv"
import "core:thread"
import "core:encoding/json"
+import "core:reflect"
import "intrinsics"
@@ -18,6 +19,7 @@ import "shared:common"
os_read :: proc(handle: rawptr, data: [] byte) -> (int, int)
{
+ //ERROR can't go to os.Handle
a, b := os.read(cast(os.Handle)handle, data);
return a, cast(int)b;
}
@@ -30,14 +32,13 @@ os_write :: proc(handle: rawptr, data: [] byte) -> (int, int)
//Note(Daniel, Should look into handling errors without crashing from parsing)
+
+verbose_logger: log.Logger;
+
run :: proc(reader: ^server.Reader, writer: ^server.Writer) {
config: common.Config;
config.debug_single_thread = false;
- //tracking_allocator := common.memleak_allocator(true);
- //context.allocator = tracking_allocator;
-
- //temporary collections being set manually, need to get client configuration set up.
config.collections = make(map [string] string);
log.info("Starting Odin Language Server");
@@ -47,6 +48,14 @@ run :: proc(reader: ^server.Reader, writer: ^server.Writer) {
for config.running {
+ if config.verbose {
+ context.logger = verbose_logger;
+ }
+
+ else {
+ context.logger = log.Logger{nil, nil, log.Level.Debug, nil};
+ }
+
header, success := server.read_and_parse_header(reader);
if(!success) {
@@ -86,10 +95,6 @@ run :: proc(reader: ^server.Reader, writer: ^server.Writer) {
common.pool_wait_and_process(&server.pool);
common.pool_destroy(&server.pool);
-
- //common.memleak_dump(tracking_allocator, common.log_dump, nil);
-
-
}
end :: proc() {
@@ -102,14 +107,11 @@ main :: proc() {
reader := server.make_reader(os_read, cast(rawptr)os.stdin);
writer := server.make_writer(os_write, cast(rawptr)os.stdout);
- init_global_temporary_allocator(mem.megabytes(200));
-
- context.logger = log.Logger{nil, nil, log.Level.Debug, nil}; //have to set the procedure to nil to avoid calling tprintf...
+ verbose_logger := server.create_lsp_logger(&writer, log.Level.Error);
- //fd, err := os.open("C:/Users/danie/OneDrive/Desktop/Computer_Science/ols/log.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC );
- //context.logger = log.create_file_logger(fd);
+ context.logger = verbose_logger;
- //context.logger = server.create_lsp_logger(&writer);
+ init_global_temporary_allocator(mem.megabytes(100));
run(&reader, &writer);
}
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index df97117..766fa4f 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -132,7 +132,7 @@ get_poly_node_to_expr :: proc(node: ^ast.Node) -> ^ast.Expr {
case Ident:
return cast(^Expr)node;
case:
- log.errorf("Unhandled poly to node kind %v", v);
+ log.warnf("Unhandled poly to node kind %v", v);
}
return nil;
@@ -674,7 +674,6 @@ resolve_type_expression :: proc(ast_context: ^AstContext, node: ^ast.Expr) -> (i
}
else {
- log.error("No field");
return index.Symbol {}, false;
}
case index.SymbolGenericValue:
@@ -794,7 +793,7 @@ resolve_type_identifier :: proc(ast_context: ^AstContext, node: ast.Ident) -> (i
case Call_Expr:
return resolve_type_expression(ast_context, local);
case:
- log.errorf("default type node kind: %T", v);
+ log.warnf("default type node kind: %T", v);
return resolve_type_expression(ast_context, local);
//return make_symbol_generic_from_ast(ast_context, local), true;
}
@@ -832,7 +831,7 @@ resolve_type_identifier :: proc(ast_context: ^AstContext, node: ast.Ident) -> (i
case Call_Expr:
return resolve_type_expression(ast_context, global);
case:
- log.errorf("default type node kind: %T", v);
+ log.warnf("default type node kind: %T", v);
return resolve_type_expression(ast_context, global);
//return make_symbol_generic_from_ast(ast_context, global), true;
}
@@ -1833,7 +1832,7 @@ get_definition_location :: proc(document: ^Document, position: common.Position)
position_context, ok := get_document_position_context(document, position, .Definition);
if !ok {
- log.error("Failed to get position context");
+ log.warn("Failed to get position context");
return location, false;
}
diff --git a/src/index/background.odin b/src/server/background.odin
index eb9a3dd..d184a55 100644
--- a/src/index/background.odin
+++ b/src/server/background.odin
@@ -1,7 +1,14 @@
-package index
+package server
/*
Background thread that runs and ensures that the dynamic indexer is not stale
*/
+import "shared:index"
+background_main :: proc() {
+
+
+
+
+} \ No newline at end of file
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 07c440c..a172e98 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -433,6 +433,7 @@ request_initialize :: proc(task: ^common.Task) {
enable_document_symbols = ols_config.enable_document_symbols;
enable_hover = ols_config.enable_hover;
config.enable_semantic_tokens = ols_config.enable_semantic_tokens;
+ config.verbose = ols_config.verbose;
for p in ols_config.collections {
@@ -599,7 +600,7 @@ request_definition :: proc(task: ^common.Task) {
location, ok2 := get_definition_location(document, definition_params.position);
if !ok2 {
- log.error("Failed to get definition location");
+ log.warn("Failed to get definition location");
}
response := make_response_message(
diff --git a/src/server/types.odin b/src/server/types.odin
index 87d1370..4ddf089 100644
--- a/src/server/types.odin
+++ b/src/server/types.odin
@@ -282,6 +282,7 @@ OlsConfig :: struct {
enable_semantic_tokens: bool,
enable_document_symbols: bool,
enable_hover: bool,
+ verbose: bool,
};
OlsConfigCollection :: struct {
diff --git a/src/session/capture.odin b/src/session/capture.odin
index e69de29..6c9f3f5 100644
--- a/src/session/capture.odin
+++ b/src/session/capture.odin
@@ -0,0 +1,2 @@
+package session
+