diff --git a/README.md b/README.md
index cd1107e..acf9f18 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,8 @@ A Language Server for **proto3** files. It uses tree-sitter parser for all opera
- [x] Go to definition
- [x] Diagnostics
- [x] Document Symbols for message and enums
+- [x] Rename message, enum and rpc
+- [x] Completion for proto3 keywords
## Installation
diff --git a/src/lsp.rs b/src/lsp.rs
index 975a9fb..0a33c66 100644
--- a/src/lsp.rs
+++ b/src/lsp.rs
@@ -6,8 +6,9 @@ use async_lsp::lsp_types::{
DidChangeTextDocumentParams, DidCloseTextDocumentParams, DidOpenTextDocumentParams,
DidSaveTextDocumentParams, DocumentSymbolParams, DocumentSymbolResponse, GotoDefinitionParams,
GotoDefinitionResponse, Hover, HoverContents, HoverParams, HoverProviderCapability,
- InitializeParams, InitializeResult, OneOf, ServerCapabilities, ServerInfo,
- TextDocumentSyncCapability, TextDocumentSyncKind,
+ InitializeParams, InitializeResult, OneOf, PrepareRenameResponse, RenameParams,
+ ServerCapabilities, ServerInfo, TextDocumentPositionParams, TextDocumentSyncCapability,
+ TextDocumentSyncKind, WorkspaceEdit,
};
use async_lsp::{LanguageClient, LanguageServer, ResponseError};
use futures::future::BoxFuture;
@@ -42,6 +43,7 @@ impl LanguageServer for ServerState {
hover_provider: Some(HoverProviderCapability::Simple(true)),
document_symbol_provider: Some(OneOf::Left(true)),
completion_provider: Some(CompletionOptions::default()),
+ rename_provider: Some(OneOf::Left(true)),
..ServerCapabilities::default()
},
server_info: Some(ServerInfo {
@@ -102,6 +104,46 @@ impl LanguageServer for ServerState {
Box::pin(async move { Ok(Some(CompletionResponse::Array(keywords))) })
}
+ fn prepare_rename(
+ &mut self,
+ params: TextDocumentPositionParams,
+ ) -> BoxFuture<'static, Result