diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2021-01-28 22:50:41 +0100 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2021-01-28 22:50:41 +0100 |
| commit | 03be1921847190c63d4e42637526e3d00160f6e5 (patch) | |
| tree | f3c047c39ef2742e0154119d7d742ed49064b284 /src | |
| parent | e4bf674635029e249dab36f993bfd08b39792970 (diff) | |
add verbose setting
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/ast.odin | 4 | ||||
| -rw-r--r-- | src/common/config.odin | 4 | ||||
| -rw-r--r-- | src/index/build.odin | 2 | ||||
| -rw-r--r-- | src/index/clone.odin | 2 | ||||
| -rw-r--r-- | src/index/collector.odin | 2 | ||||
| -rw-r--r-- | src/index/indexer.odin | 6 | ||||
| -rw-r--r-- | src/main.odin | 30 | ||||
| -rw-r--r-- | src/server/analysis.odin | 9 | ||||
| -rw-r--r-- | src/server/background.odin (renamed from src/index/background.odin) | 9 | ||||
| -rw-r--r-- | src/server/requests.odin | 3 | ||||
| -rw-r--r-- | src/server/types.odin | 1 | ||||
| -rw-r--r-- | src/session/capture.odin | 2 |
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 + |