aboutsummaryrefslogtreecommitdiff
path: root/src/server/requests.odin
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-06-13 19:58:44 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-06-13 19:58:44 +0200
commit582a1b1c1b42065d3bd22bd0f23bfd3ec38cdae4 (patch)
treeedc281df609d163d11d933d2f824035b144ef088 /src/server/requests.odin
parent3c05ab67cd6b811a0993e49f2ca1ed75e0aca8e3 (diff)
add prepare rename
Diffstat (limited to 'src/server/requests.odin')
-rw-r--r--src/server/requests.odin38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 3ca38d6..2773dcc 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -275,6 +275,7 @@ call_map: map[string]proc(
"textDocument/inlayHint" = request_inlay_hint,
"textDocument/documentLink" = request_document_links,
"textDocument/rename" = request_rename,
+ "textDocument/prepareRename" = request_prepare_rename,
"textDocument/references" = request_references,
"window/progress" = request_noop,
"workspace/symbol" = request_workspace_symbols,
@@ -802,7 +803,7 @@ request_initialize :: proc(
change = 2,
save = {includeText = true},
},
- renameProvider = config.enable_rename,
+ renameProvider = RenameOptions{prepareProvider = true},
workspaceSymbolProvider = true,
referencesProvider = config.enable_references,
definitionProvider = true,
@@ -1491,6 +1492,41 @@ request_document_links :: proc(
return .None
}
+request_prepare_rename :: proc(
+ params: json.Value,
+ id: RequestId,
+ config: ^common.Config,
+ writer: ^Writer,
+) -> common.Error {
+ params_object, ok := params.(json.Object)
+
+ if !ok {
+ return .ParseError
+ }
+
+ rename_param: PrepareRenameParams
+
+ if unmarshal(params, rename_param, context.temp_allocator) != nil {
+ return .ParseError
+ }
+
+ document := document_get(rename_param.textDocument.uri)
+
+ if document == nil {
+ return .InternalError
+ }
+
+ if range, ok := get_prepare_rename(document, rename_param.position); ok {
+ response := make_response_message(params = range, id = id)
+ send_response(response, writer)
+ } else {
+ response := make_response_message(params = nil, id = id)
+ send_response(response, writer)
+ }
+
+ return .None
+}
+
request_rename :: proc(
params: json.Value,
id: RequestId,