aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin2
-rw-r--r--src/server/build.odin6
-rw-r--r--src/server/caches.odin2
-rw-r--r--src/server/check.odin16
-rw-r--r--src/server/collector.odin2
-rw-r--r--src/server/completion.odin59
-rw-r--r--src/server/definition.odin2
-rw-r--r--src/server/document_links.odin22
-rw-r--r--src/server/document_symbols.odin20
-rw-r--r--src/server/documents.odin22
-rw-r--r--src/server/format.odin6
-rw-r--r--src/server/generics.odin14
-rw-r--r--src/server/hover.odin21
-rw-r--r--src/server/inlay_hints.odin4
-rw-r--r--src/server/lens.odin2
-rw-r--r--src/server/memory_index.odin6
-rw-r--r--src/server/methods.odin2
-rw-r--r--src/server/references.odin8
-rw-r--r--src/server/rename.odin11
-rw-r--r--src/server/requests.odin18
-rw-r--r--src/server/semantic_tokens.odin2
-rw-r--r--src/server/signature.odin16
-rw-r--r--src/server/symbol.odin2
-rw-r--r--src/server/types.odin2
-rw-r--r--src/server/workspace_symbols.odin10
25 files changed, 157 insertions, 120 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 595551b..2e3839c 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -15,7 +15,7 @@ import "core:strconv"
import "core:strings"
import "core:unicode/utf8"
-import "shared:common"
+import "src:common"
DocumentPositionContextHint :: enum {
Completion,
diff --git a/src/server/build.odin b/src/server/build.odin
index b6483cc..54ec93a 100644
--- a/src/server/build.odin
+++ b/src/server/build.odin
@@ -13,7 +13,7 @@ import "core:runtime"
import "core:strings"
import "core:time"
-import "shared:common"
+import "src:common"
platform_os: map[string]bool = {
"windows" = true,
@@ -95,8 +95,8 @@ try_build_package :: proc(pkg_name: string) {
}
p := parser.Parser {
- err = log_error_handler,
- warn = log_warning_handler,
+ err = log_error_handler,
+ warn = log_warning_handler,
flags = {.Optional_Semicolons},
}
diff --git a/src/server/caches.odin b/src/server/caches.odin
index 87da04d..d286624 100644
--- a/src/server/caches.odin
+++ b/src/server/caches.odin
@@ -1,6 +1,6 @@
package server
-import "shared:common"
+import "src:common"
import "core:time"
diff --git a/src/server/check.odin b/src/server/check.odin
index 73aef75..d041320 100644
--- a/src/server/check.odin
+++ b/src/server/check.odin
@@ -16,7 +16,7 @@ import "core:sync"
import "core:text/scanner"
import "core:thread"
-import "shared:common"
+import "src:common"
//Store uris we have reported on since last save. We use this to clear them on next save.
uris_reported := make([dynamic]string)
@@ -119,7 +119,10 @@ check :: proc(paths: []string, writer: ^Writer, config: ^common.Config) {
}
}
- error.uri = strings.clone(string(buffer[source_pos:s.src_pos - 1]), context.temp_allocator)
+ error.uri = strings.clone(
+ string(buffer[source_pos:s.src_pos - 1]),
+ context.temp_allocator,
+ )
left_paren := scanner.scan(&s)
@@ -147,7 +150,7 @@ check :: proc(paths: []string, writer: ^Writer, config: ^common.Config) {
if seperator != ':' {
break scan_line
}
-
+
rhs_digit := scanner.scan(&s)
if rhs_digit != scanner.Int {
@@ -159,7 +162,7 @@ check :: proc(paths: []string, writer: ^Writer, config: ^common.Config) {
if !ok {
break scan_line
}
-
+
right_paren := scanner.scan(&s)
if right_paren != ')' {
@@ -180,7 +183,10 @@ check :: proc(paths: []string, writer: ^Writer, config: ^common.Config) {
continue
}
- error.message = strings.clone(string(buffer[source_pos:s.src_pos - 1]), context.temp_allocator)
+ error.message = strings.clone(
+ string(buffer[source_pos:s.src_pos - 1]),
+ context.temp_allocator,
+ )
error.column = column
error.line = line
diff --git a/src/server/collector.odin b/src/server/collector.odin
index 5d91039..935acd7 100644
--- a/src/server/collector.odin
+++ b/src/server/collector.odin
@@ -10,7 +10,7 @@ import path "core:path/slashpath"
import "core:strconv"
import "core:strings"
-import "shared:common"
+import "src:common"
SymbolCollection :: struct {
allocator: mem.Allocator,
diff --git a/src/server/completion.odin b/src/server/completion.odin
index 6bf253a..2f5c1ce 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -15,7 +15,7 @@ import "core:strconv"
import "core:strings"
-import "shared:common"
+import "src:common"
/*
TODOS: Making the signature details is really annoying and not that nice - try to see if this can be refractored.
@@ -522,21 +522,18 @@ get_selector_completion :: proc(
list.isIncomplete = false
enumv, ok := unwrap_bitset(ast_context, selector)
- if !ok { break }
+ if !ok {break}
range, rok := get_range_from_selection_start_to_dot(position_context)
- if !rok { break }
+ if !rok {break}
range.end.character -= 1
variable, vok := position_context.selector.derived_expr.(^ast.Ident)
- if !vok { break }
+ if !vok {break}
remove_edit := TextEdit {
- range = {
- start = range.start,
- end = range.end,
- },
+ range = {start = range.start, end = range.end},
newText = "",
}
@@ -544,12 +541,15 @@ get_selector_completion :: proc(
additionalTextEdits[0] = remove_edit
for name in enumv.names {
- append(&items, CompletionItem {
- label = fmt.tprintf(".%s", name),
- kind = .EnumMember,
- detail = fmt.tprintf("%s.%s", selector.name, name),
- additionalTextEdits = additionalTextEdits,
- })
+ append(
+ &items,
+ CompletionItem {
+ label = fmt.tprintf(".%s", name),
+ kind = .EnumMember,
+ detail = fmt.tprintf("%s.%s", selector.name, name),
+ additionalTextEdits = additionalTextEdits,
+ },
+ )
}
case SymbolStructValue:
@@ -884,7 +884,10 @@ get_implicit_completion :: proc(
elem_index := -1
for elem, i in comp_lit.elems {
- if position_in_node(elem, position_context.position) {
+ if position_in_node(
+ elem,
+ position_context.position,
+ ) {
elem_index = i
}
}
@@ -904,7 +907,8 @@ get_implicit_completion :: proc(
type = s.types[elem_index]
}
- if enum_value, ok := unwrap_enum(ast_context, type); ok {
+ if enum_value, ok := unwrap_enum(ast_context, type);
+ ok {
for enum_name in enum_value.names {
item := CompletionItem {
label = enum_name,
@@ -1129,7 +1133,7 @@ get_implicit_completion :: proc(
list.items = items[:]
return
}
-
+
// Bitset comp literal in parameter, eg: `hello({ . })`.
if position_context.comp_lit != nil {
if bitset_symbol, ok := resolve_type_expression(
@@ -1763,14 +1767,22 @@ append_magic_map_completion :: proc(
append(items, item)
}
}
-get_expression_string_from_position_context :: proc(position_context: ^DocumentPositionContext) -> string {
+get_expression_string_from_position_context :: proc(
+ position_context: ^DocumentPositionContext,
+) -> string {
src := position_context.file.src
if position_context.call != nil {
- return src[position_context.call.pos.offset:position_context.call.end.offset]
+ return(
+ src[position_context.call.pos.offset:position_context.call.end.offset] \
+ )
} else if position_context.field != nil {
- return src[position_context.field.pos.offset:position_context.field.end.offset]
+ return(
+ src[position_context.field.pos.offset:position_context.field.end.offset] \
+ )
} else if position_context.selector != nil {
- return src[position_context.selector.pos.offset:position_context.selector.end.offset]
+ return(
+ src[position_context.selector.pos.offset:position_context.selector.end.offset] \
+ )
}
return ""
}
@@ -1826,10 +1838,7 @@ append_magic_dynamic_array_completion :: proc(
detail = "for",
additionalTextEdits = additionalTextEdits,
textEdit = TextEdit {
- newText = fmt.tprintf(
- "for i in %v {{\n\t$0 \n}}",
- symbol_str,
- ),
+ newText = fmt.tprintf("for i in %v {{\n\t$0 \n}}", symbol_str),
range = {start = range.end, end = range.end},
},
insertTextFormat = .Snippet,
diff --git a/src/server/definition.odin b/src/server/definition.odin
index 8c0a567..021a556 100644
--- a/src/server/definition.odin
+++ b/src/server/definition.odin
@@ -14,7 +14,7 @@ import "core:sort"
import "core:strconv"
import "core:strings"
-import "shared:common"
+import "src:common"
get_all_package_file_locations :: proc(
document: ^Document,
diff --git a/src/server/document_links.odin b/src/server/document_links.odin
index 17113ff..4b2acf5 100644
--- a/src/server/document_links.odin
+++ b/src/server/document_links.odin
@@ -1,21 +1,21 @@
package server
-import "core:odin/parser"
-import "core:odin/ast"
-import "core:odin/tokenizer"
import "core:fmt"
import "core:log"
-import "core:strings"
-import path "core:path/slashpath"
import "core:mem"
-import "core:strconv"
+import "core:odin/ast"
+import "core:odin/parser"
+import "core:odin/tokenizer"
+import "core:os"
import "core:path/filepath"
-import "core:sort"
+import path "core:path/slashpath"
import "core:slice"
-import "core:os"
+import "core:sort"
+import "core:strconv"
+import "core:strings"
-import "shared:common"
+import "src:common"
get_document_links :: proc(document: ^Document) -> ([]DocumentLink, bool) {
links := make([dynamic]DocumentLink, 0, context.temp_allocator)
@@ -41,12 +41,12 @@ get_document_links :: proc(document: ^Document) -> ([]DocumentLink, bool) {
//Temporarly assuming non unicode
node := ast.Node {
- pos = {
+ pos = {
offset = imp.relpath.pos.offset + 1,
column = imp.relpath.pos.column + 1,
line = imp.relpath.pos.line,
},
- end = {
+ end = {
offset = imp.relpath.pos.offset + len(imp.relpath.text) - 1,
column = imp.relpath.pos.column + len(imp.relpath.text) - 1,
line = imp.relpath.pos.line,
diff --git a/src/server/document_symbols.odin b/src/server/document_symbols.odin
index 1219413..334bb6e 100644
--- a/src/server/document_symbols.odin
+++ b/src/server/document_symbols.odin
@@ -1,21 +1,21 @@
package server
-import "core:odin/parser"
-import "core:odin/ast"
-import "core:odin/tokenizer"
import "core:fmt"
import "core:log"
-import "core:strings"
-import path "core:path/slashpath"
import "core:mem"
-import "core:strconv"
+import "core:odin/ast"
+import "core:odin/parser"
+import "core:odin/tokenizer"
+import "core:os"
import "core:path/filepath"
-import "core:sort"
+import path "core:path/slashpath"
import "core:slice"
-import "core:os"
+import "core:sort"
+import "core:strconv"
+import "core:strings"
-import "shared:common"
+import "src:common"
get_document_symbols :: proc(document: ^Document) -> []DocumentSymbol {
ast_context := make_ast_context(
@@ -44,7 +44,7 @@ get_document_symbols :: proc(document: ^Document) -> []DocumentSymbol {
)
package_symbol.range = {
start = {line = document.ast.decls[0].pos.line},
- end = {
+ end = {
line = document.ast.decls[len(document.ast.decls) - 1].end.line,
},
}
diff --git a/src/server/documents.odin b/src/server/documents.odin
index 5553fae..e2cc322 100644
--- a/src/server/documents.odin
+++ b/src/server/documents.odin
@@ -1,19 +1,19 @@
package server
-import "core:strings"
import "core:fmt"
import "core:log"
-import "core:os"
-import "core:odin/parser"
+import "core:mem"
import "core:odin/ast"
+import "core:odin/parser"
import "core:odin/tokenizer"
+import "core:os"
import "core:path/filepath"
import path "core:path/slashpath"
-import "core:mem"
+import "core:strings"
import "core:intrinsics"
-import "shared:common"
+import "src:common"
ParserError :: struct {
message: string,
@@ -351,8 +351,8 @@ document_refresh :: proc(
for error, i in errors {
params.diagnostics[i] = Diagnostic {
- range = common.Range{
- start = common.Position{
+ range = common.Range {
+ start = common.Position {
line = error.line - 1,
character = 0,
},
@@ -380,7 +380,7 @@ document_refresh :: proc(
notifaction := Notification {
jsonrpc = "2.0",
method = "textDocument/publishDiagnostics",
- params = NotificationPublishDiagnosticsParams{
+ params = NotificationPublishDiagnosticsParams {
uri = document.uri.uri,
diagnostics = make(
[]Diagnostic,
@@ -420,8 +420,8 @@ parse_document :: proc(
bool,
) {
p := parser.Parser {
- err = parser_error_handler,
- warn = common.parser_warning_handler,
+ err = parser_error_handler,
+ warn = common.parser_warning_handler,
flags = {.Optional_Semicolons},
}
@@ -502,7 +502,7 @@ parse_imports :: proc(document: ^Document, config: ^common.Config) {
import_: Package
import_.original = imp.fullpath
import_.name = path.join(
- elems = {
+ elems = {
document.package_name,
imp.fullpath[1:len(imp.fullpath) - 1],
},
diff --git a/src/server/format.odin b/src/server/format.odin
index 63d949c..fbf9837 100644
--- a/src/server/format.odin
+++ b/src/server/format.odin
@@ -1,9 +1,9 @@
package server
-import "shared:common"
-import "shared:odin/printer"
-import "shared:odin/format"
import "core:path/filepath"
+import "src:common"
+import "src:odin/format"
+import "src:odin/printer"
import "core:log"
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 50a477a..046793d 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -15,7 +15,7 @@ import "core:strconv"
import "core:strings"
import "core:unicode/utf8"
-import "shared:common"
+import "src:common"
resolve_poly :: proc(
ast_context: ^AstContext,
@@ -439,8 +439,16 @@ resolve_generic_function_symbol :: proc(
return {}, false
}
- symbol_expr = clone_expr(symbol_expr, ast_context.allocator, nil)
- param_type := clone_expr(param.type, ast_context.allocator, nil)
+ symbol_expr = clone_expr(
+ symbol_expr,
+ ast_context.allocator,
+ nil,
+ )
+ param_type := clone_expr(
+ param.type,
+ ast_context.allocator,
+ nil,
+ )
if resolve_poly(
ast_context,
diff --git a/src/server/hover.odin b/src/server/hover.odin
index 2dfdee4..be6adad 100644
--- a/src/server/hover.odin
+++ b/src/server/hover.odin
@@ -1,19 +1,19 @@
package server
-import "core:odin/parser"
-import "core:odin/ast"
-import "core:odin/tokenizer"
import "core:fmt"
import "core:log"
-import "core:strings"
-import path "core:path/slashpath"
import "core:mem"
-import "core:strconv"
+import "core:odin/ast"
+import "core:odin/parser"
+import "core:odin/tokenizer"
import "core:path/filepath"
-import "core:sort"
+import path "core:path/slashpath"
import "core:slice"
+import "core:sort"
+import "core:strconv"
+import "core:strings"
-import "shared:common"
+import "src:common"
write_hover_content :: proc(
ast_context: ^AstContext,
@@ -125,9 +125,8 @@ get_hover_information :: proc(
if position_context.implicit_context != nil {
if str, ok :=
- builtin_identifier_hover[
- position_context.implicit_context.tok.text \
- ]; ok {
+ builtin_identifier_hover[position_context.implicit_context.tok.text];
+ ok {
hover.contents.kind = "markdown"
hover.contents.value = str
hover.range = common.get_token_range(
diff --git a/src/server/inlay_hints.odin b/src/server/inlay_hints.odin
index 26e84c3..8085baa 100644
--- a/src/server/inlay_hints.odin
+++ b/src/server/inlay_hints.odin
@@ -1,10 +1,10 @@
package server
-import "core:odin/ast"
import "core:fmt"
import "core:log"
+import "core:odin/ast"
-import "shared:common"
+import "src:common"
get_inlay_hints :: proc(
document: ^Document,
diff --git a/src/server/lens.odin b/src/server/lens.odin
index 99eaea3..3206d6d 100644
--- a/src/server/lens.odin
+++ b/src/server/lens.odin
@@ -3,7 +3,7 @@ package server
import "core:odin/ast"
-import "shared:common"
+import "src:common"
CodeLensClientCapabilities :: struct {
diff --git a/src/server/memory_index.odin b/src/server/memory_index.odin
index d803a24..ee151dc 100644
--- a/src/server/memory_index.odin
+++ b/src/server/memory_index.odin
@@ -1,12 +1,12 @@
package server
-import "core:hash"
-import "core:strings"
import "core:fmt"
+import "core:hash"
import "core:log"
import "core:slice"
+import "core:strings"
-import "shared:common"
+import "src:common"
MemoryIndex :: struct {
collection: SymbolCollection,
diff --git a/src/server/methods.odin b/src/server/methods.odin
index 62d2cb4..7d8c698 100644
--- a/src/server/methods.odin
+++ b/src/server/methods.odin
@@ -15,7 +15,7 @@ import "core:strconv"
import "core:strings"
-import "shared:common"
+import "src:common"
@(private)
diff --git a/src/server/references.odin b/src/server/references.odin
index 7c9e2cb..2016351 100644
--- a/src/server/references.odin
+++ b/src/server/references.odin
@@ -1,7 +1,7 @@
package server
-import "shared:common"
+import "src:common"
import "core:fmt"
import "core:log"
@@ -122,6 +122,8 @@ resolve_references :: proc(
} else {
return {}, true
}
+ } else if position_context.implicit {
+ return {}, true
} else if position_context.identifier != nil {
ident := position_context.identifier.derived.(^ast.Ident)
@@ -165,8 +167,8 @@ resolve_references :: proc(
}
p := parser.Parser {
- err = log_error_handler,
- warn = log_warning_handler,
+ err = log_error_handler,
+ warn = log_warning_handler,
flags = {.Optional_Semicolons},
}
diff --git a/src/server/rename.odin b/src/server/rename.odin
index d50214f..b936d40 100644
--- a/src/server/rename.odin
+++ b/src/server/rename.odin
@@ -1,10 +1,10 @@
package server
-import "shared:common"
+import "src:common"
import "core:log"
-import "core:odin/ast"
import "core:mem"
+import "core:odin/ast"
import "core:runtime"
import "core:strings"
@@ -73,9 +73,8 @@ get_rename :: proc(
*/
if edits = &document_edits[location.uri]; edits == nil {
- document_edits[
- strings.clone(location.uri, context.temp_allocator) \
- ] = make([dynamic]TextEdit, context.temp_allocator)
+ document_edits[strings.clone(location.uri, context.temp_allocator)] =
+ make([dynamic]TextEdit, context.temp_allocator)
edits = &document_edits[location.uri]
}
@@ -89,7 +88,7 @@ get_rename :: proc(
for k, v in document_edits {
append(
&document_changes,
- TextDocumentEdit{
+ TextDocumentEdit {
edits = v[:],
textDocument = {uri = k, version = document.version},
},
diff --git a/src/server/requests.odin b/src/server/requests.odin
index cc03cf5..a877c69 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -17,7 +17,7 @@ import "core:sync"
import "core:thread"
import "core:time"
-import "shared:common"
+import "src:common"
import "base:runtime"
@@ -585,6 +585,17 @@ read_ols_initialize_options :: proc(
allocator = context.allocator,
)
}
+
+ if "shared" not_in config.collections && odin_core_env != "" {
+ forward_path, _ := filepath.to_slash(
+ odin_core_env,
+ context.temp_allocator,
+ )
+ config.collections[strings.clone("shared")] = path.join(
+ elems = {forward_path, "shared"},
+ allocator = context.allocator,
+ )
+ }
}
request_initialize :: proc(
@@ -1172,7 +1183,10 @@ notification_did_save :: proc(
if len(config.profile.checker_path) > 0 {
check(config.profile.checker_path[:], writer, config)
} else {
- if uri, ok := common.parse_uri(config.workspace_folders[0].uri, context.temp_allocator); ok {
+ if uri, ok := common.parse_uri(
+ config.workspace_folders[0].uri,
+ context.temp_allocator,
+ ); ok {
check({uri.path}, writer, config)
}
}
diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin
index e5cbbb1..a6872c7 100644
--- a/src/server/semantic_tokens.odin
+++ b/src/server/semantic_tokens.odin
@@ -5,7 +5,7 @@ import "core:log"
import "core:odin/ast"
import "core:odin/tokenizer"
-import "shared:common"
+import "src:common"
/*
diff --git a/src/server/signature.odin b/src/server/signature.odin
index 1273f5b..fe1c784 100644
--- a/src/server/signature.odin
+++ b/src/server/signature.odin
@@ -1,19 +1,19 @@
package server
-import "core:odin/parser"
-import "core:odin/ast"
-import "core:odin/tokenizer"
import "core:fmt"
import "core:log"
-import "core:strings"
-import path "core:path/slashpath"
import "core:mem"
-import "core:strconv"
+import "core:odin/ast"
+import "core:odin/parser"
+import "core:odin/tokenizer"
import "core:path/filepath"
-import "core:sort"
+import path "core:path/slashpath"
import "core:slice"
+import "core:sort"
+import "core:strconv"
+import "core:strings"
-import "shared:common"
+import "src:common"
SignatureInformationCapabilities :: struct {
parameterInformation: ParameterInformationCapabilities,
diff --git a/src/server/symbol.odin b/src/server/symbol.odin
index 57d3946..10750a8 100644
--- a/src/server/symbol.odin
+++ b/src/server/symbol.odin
@@ -11,7 +11,7 @@ import path "core:path/slashpath"
import "core:slice"
import "core:strings"
-import "shared:common"
+import "src:common"
SymbolAndNode :: struct {
symbol: Symbol,
diff --git a/src/server/types.odin b/src/server/types.odin
index 24c5827..1b2bd99 100644
--- a/src/server/types.odin
+++ b/src/server/types.odin
@@ -2,7 +2,7 @@ package server
import "core:encoding/json"
-import "shared:common"
+import "src:common"
/*
General types
diff --git a/src/server/workspace_symbols.odin b/src/server/workspace_symbols.odin
index abc6837..0ce8be1 100644
--- a/src/server/workspace_symbols.odin
+++ b/src/server/workspace_symbols.odin
@@ -1,12 +1,12 @@
package server
-import "core:path/filepath"
-import "core:os"
-import "core:log"
import "core:fmt"
+import "core:log"
+import "core:os"
+import "core:path/filepath"
-import "shared:common"
+import "src:common"
@(private)
walk_dir :: proc(
@@ -56,7 +56,7 @@ get_workspace_symbols :: proc(
for result in results {
symbol := WorkspaceSymbol {
name = result.symbol.name,
- location = {
+ location = {
range = result.symbol.range,
uri = result.symbol.uri,
},