aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-06-12 22:36:30 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-06-12 22:36:30 +0200
commit3c05ab67cd6b811a0993e49f2ca1ed75e0aca8e3 (patch)
tree16d3174851a33ae290d77fa3baae94512e61ec27
parenta66e2ef9bc46f3332d458895a74299ebb122dfed (diff)
Fix issues with references now showing the definition itself if in another package.
-rw-r--r--README.md4
-rw-r--r--editors/vscode/package-lock.json34
-rw-r--r--editors/vscode/package.json4
-rw-r--r--src/server/analysis.odin30
-rw-r--r--src/server/file_resolve.odin2
-rw-r--r--src/server/references.odin11
6 files changed, 52 insertions, 33 deletions
diff --git a/README.md b/README.md
index fda3e28..b528c63 100644
--- a/README.md
+++ b/README.md
@@ -125,8 +125,10 @@ Support Language server features:
- Completion
- Go to definition
-- Semantic tokens(really unstable and unfinished)
+- Semantic tokens
- Document symbols
+- Rename
+- References
- Signature help
- Hover
diff --git a/editors/vscode/package-lock.json b/editors/vscode/package-lock.json
index da86bd6..26b64a9 100644
--- a/editors/vscode/package-lock.json
+++ b/editors/vscode/package-lock.json
@@ -11,7 +11,7 @@
"adm-zip": "^0.5.9",
"https-proxy-agent": "^5.0.0",
"node-fetch": "^2.6.7",
- "vscode-languageclient": "8.1.0"
+ "vscode-languageclient": "9.0.1"
},
"devDependencies": {
"@types/glob": "^7.2.0",
@@ -3176,24 +3176,24 @@
}
},
"node_modules/vscode-jsonrpc": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz",
- "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+ "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/vscode-languageclient": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz",
- "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz",
+ "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==",
"dependencies": {
"minimatch": "^5.1.0",
"semver": "^7.3.7",
- "vscode-languageserver-protocol": "3.17.3"
+ "vscode-languageserver-protocol": "3.17.5"
},
"engines": {
- "vscode": "^1.67.0"
+ "vscode": "^1.82.0"
}
},
"node_modules/vscode-languageclient/node_modules/brace-expansion": {
@@ -3216,18 +3216,18 @@
}
},
"node_modules/vscode-languageserver-protocol": {
- "version": "3.17.3",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz",
- "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==",
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+ "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
"dependencies": {
- "vscode-jsonrpc": "8.1.0",
- "vscode-languageserver-types": "3.17.3"
+ "vscode-jsonrpc": "8.2.0",
+ "vscode-languageserver-types": "3.17.5"
}
},
"node_modules/vscode-languageserver-types": {
- "version": "3.17.3",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz",
- "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
},
"node_modules/vscode-test": {
"version": "1.6.1",
diff --git a/editors/vscode/package.json b/editors/vscode/package.json
index abbd4d7..021a214 100644
--- a/editors/vscode/package.json
+++ b/editors/vscode/package.json
@@ -7,7 +7,7 @@
"type": "git",
"url": "git://github.com/DanielGavin/ols.git"
},
- "version": "0.1.27",
+ "version": "0.1.29",
"engines": {
"vscode": "^1.66.0"
},
@@ -150,7 +150,7 @@
"adm-zip": "^0.5.9",
"https-proxy-agent": "^5.0.0",
"node-fetch": "^2.6.7",
- "vscode-languageclient": "8.1.0"
+ "vscode-languageclient": "9.0.1"
},
"configurationDefaults": {
"[odin]": {
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 99b2acb..c482206 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -33,6 +33,7 @@ DocumentPositionContext :: struct {
selector: ^ast.Expr, //used for completion
selector_expr: ^ast.Node,
identifier: ^ast.Node,
+ label: ^ast.Ident,
implicit_context: ^ast.Implicit,
tag: ^ast.Node,
field: ^ast.Expr, //used for completion
@@ -4838,6 +4839,19 @@ position_in_node :: proc(
)
}
+get_document_position_label :: proc(
+ label: ^ast.Expr,
+ position_context: ^DocumentPositionContext,
+) {
+ if label == nil {
+ return
+ }
+
+ if ident, ok := label.derived.(^ast.Ident); ok {
+ position_context.label = ident
+ }
+}
+
get_document_position_node :: proc(
node: ^ast.Node,
position_context: ^DocumentPositionContext,
@@ -4983,10 +4997,10 @@ get_document_position_node :: proc(
get_document_position(n.lhs, position_context)
get_document_position(n.rhs, position_context)
case ^Block_Stmt:
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
get_document_position(n.stmts, position_context)
case ^If_Stmt:
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
get_document_position(n.init, position_context)
get_document_position(n.cond, position_context)
get_document_position(n.body, position_context)
@@ -5001,13 +5015,13 @@ get_document_position_node :: proc(
case ^Defer_Stmt:
get_document_position(n.stmt, position_context)
case ^For_Stmt:
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
get_document_position(n.init, position_context)
get_document_position(n.cond, position_context)
get_document_position(n.post, position_context)
get_document_position(n.body, position_context)
case ^Range_Stmt:
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
get_document_position(n.vals, position_context)
get_document_position(n.expr, position_context)
get_document_position(n.body, position_context)
@@ -5023,18 +5037,18 @@ get_document_position_node :: proc(
get_document_position(n.body, position_context)
case ^Switch_Stmt:
position_context.switch_stmt = cast(^Switch_Stmt)node
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
get_document_position(n.init, position_context)
get_document_position(n.cond, position_context)
get_document_position(n.body, position_context)
case ^Type_Switch_Stmt:
position_context.switch_type_stmt = cast(^Type_Switch_Stmt)node
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
get_document_position(n.tag, position_context)
get_document_position(n.expr, position_context)
get_document_position(n.body, position_context)
case ^Branch_Stmt:
- get_document_position(n.label, position_context)
+ get_document_position_label(n.label, position_context)
case ^Using_Stmt:
get_document_position(n.list, position_context)
case ^Bad_Decl:
@@ -5130,8 +5144,8 @@ get_document_position_node :: proc(
get_document_position(n.type, position_context)
get_document_position(n.bit_size, position_context)
case ^ast.Or_Branch_Expr:
+ get_document_position_label(n.label, position_context)
get_document_position(n.expr, position_context)
- get_document_position(n.label, position_context)
case:
}
}
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index 48835e8..64bdd56 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -197,7 +197,7 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
if data.flag != .None {
if symbol, ok := resolve_location_selector(data.ast_context, n);
ok {
- if data.flag == .Field {
+ if data.flag != .Base {
data.symbols[cast(uintptr)node] = SymbolAndNode {
node = n.field,
symbol = symbol,
diff --git a/src/server/references.odin b/src/server/references.odin
index 0fa739e..d56ae62 100644
--- a/src/server/references.odin
+++ b/src/server/references.odin
@@ -69,8 +69,6 @@ resolve_references :: proc(
pkg := ""
when !ODIN_TEST {
- filepath.walk(common.get_executable_path(), walk_directories, document)
-
for workspace in common.config.workspace_folders {
uri, _ := common.parse_uri(workspace.uri, context.temp_allocator)
filepath.walk(uri.path, walk_directories, document)
@@ -79,7 +77,10 @@ resolve_references :: proc(
reset_ast_context(ast_context)
- if position_context.struct_type != nil {
+
+ if position_context.label != nil {
+ return {}, true
+ } else if position_context.struct_type != nil {
found := false
done_struct: for field in position_context.struct_type.fields.list {
for name in field.names {
@@ -223,6 +224,8 @@ resolve_references :: proc(
if !ok {
return {}, true
}
+ } else {
+ return {}, true
}
arena: runtime.Arena
@@ -310,7 +313,7 @@ resolve_references :: proc(
}
}
- if in_pkg {
+ if in_pkg || symbol.pkg == document.package_name {
symbols_and_nodes := resolve_entire_file(
&document,
resolve_flag,