diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-06-13 19:58:44 +0200 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2024-06-13 19:58:44 +0200 |
| commit | 582a1b1c1b42065d3bd22bd0f23bfd3ec38cdae4 (patch) | |
| tree | edc281df609d163d11d933d2f824035b144ef088 /src/server/requests.odin | |
| parent | 3c05ab67cd6b811a0993e49f2ca1ed75e0aca8e3 (diff) | |
add prepare rename
Diffstat (limited to 'src/server/requests.odin')
| -rw-r--r-- | src/server/requests.odin | 38 |
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, |