Class RenameProvider
textDocument/rename
и textDocument/prepareRename.- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionRenameProvider(ReferenceResolver referenceResolver, ReferenceIndex referenceIndex, Resources resources, RenameWorkspaceEditBuilder workspaceEditBuilder, NewNameValidator newNameValidator, SymbolDefinitionReferenceFactory symbolDefinitionReferenceFactory, ClientCapabilitiesHolder clientCapabilitiesHolder) -
Method Summary
Modifier and TypeMethodDescriptiongetPrepareRename(DocumentContext documentContext, TextDocumentPositionParams params) Подготовить переименование символа под курсором для ответа наtextDocument/prepareRename.getRename(DocumentContext documentContext, RenameParams params) ПостроитьWorkspaceEditс правками переименования символа.voidОбработчик событияLanguageServerInitializeRequestReceivedEvent.
-
Constructor Details
-
RenameProvider
@ConstructorProperties({"referenceResolver","referenceIndex","resources","workspaceEditBuilder","newNameValidator","symbolDefinitionReferenceFactory","clientCapabilitiesHolder"}) public RenameProvider(ReferenceResolver referenceResolver, ReferenceIndex referenceIndex, Resources resources, RenameWorkspaceEditBuilder workspaceEditBuilder, NewNameValidator newNameValidator, SymbolDefinitionReferenceFactory symbolDefinitionReferenceFactory, ClientCapabilitiesHolder clientCapabilitiesHolder)
-
-
Method Details
-
handleInitializeEvent
@EventListener(LanguageServerInitializeRequestReceivedEvent.class) public void handleInitializeEvent()Обработчик событияLanguageServerInitializeRequestReceivedEvent.Кэширует клиентскую возможность
textDocument.rename.prepareSupportDefaultBehavior, сообщающую, что клиент умеет вычислять поведение переименования по умолчанию. Чтение выполняется один раз на инициализацию, чтобы не обращаться к возможностям клиента на каждый запросtextDocument/prepareRename. -
getRename
ПостроитьWorkspaceEditс правками переименования символа.Резолвит переименовываемый символ, собирает текстовые правки по всем его вхождениям и делегирует выбор формата результата в
RenameWorkspaceEditBuilder: при поддержке клиентомworkspace.workspaceEdit.documentChanges(и опциональноworkspace.workspaceEdit.changeAnnotationSupport) возвращаютсяdocumentChangesс аннотациями правок, иначе результат понижается до legacychanges-map.- Parameters:
documentContext- Контекст документа.params- Параметры вызова.- Returns:
- Изменения документов
-
getPrepareRename
public Either3<Range, PrepareRenameResult, PrepareRenameDefaultBehavior> getPrepareRename(DocumentContext documentContext, TextDocumentPositionParams params) Подготовить переименование символа под курсором для ответа наtextDocument/prepareRename.Резолвит ссылку под курсором и, если соответствующий символ можно переименовать текстовой правкой (см.
isRenameable(Reference)), формирует ответ в зависимости от заявленных клиентом возможностей:- если клиент заявил
textDocument.rename.prepareSupportDefaultBehavior(см.handleInitializeEvent()), возвращаетсяPrepareRenameDefaultBehaviorсdefaultBehavior == true— серверу не нужно вычислять диапазон, клиент сам выделит идентификатор под курсором и использует его какplaceholder; для идентификатора BSL или OneScript под курсором это совпадает с именем символа, поэтому UX идентичен, а ответ сервера компактен; - иначе возвращается явный
PrepareRenameResultс диапазоном выделения ссылки (range) и текущим именем символа (placeholder) — для клиентов, не умеющих откатываться к поведению по умолчанию.
Either3без значения (отказ) в обоих режимах, и клиент отклоняет подготовку переименования. Проверка переименовываемости выполняется на сервере независимо от возможностей клиента.Формирование итоговой формы ответа (в том числе случай отказа) выполняется здесь, чтобы сервисный слой оставался тонким делегатом.
- Parameters:
documentContext- Контекст документа.params- Параметры вызова.- Returns:
Either3сPrepareRenameDefaultBehavior(если клиент умеет поведение по умолчанию) либоPrepareRenameResult(диапазон и имя символа) при возможности переименования, либоEither3без значения, если символ переименовать нельзя.
- если клиент заявил
-