Class RenameProvider

java.lang.Object
com.github._1c_syntax.bsl.languageserver.providers.RenameProvider

@Component public final class RenameProvider extends Object
Провайдер, обрабатывающий запросы textDocument/rename и textDocument/prepareRename.
See Also:
  • Constructor Details

  • Method Details

    • handleInitializeEvent

      @EventListener(LanguageServerInitializeRequestReceivedEvent.class) public void handleInitializeEvent()
      Обработчик события LanguageServerInitializeRequestReceivedEvent.

      Кэширует клиентскую возможность textDocument.rename.prepareSupportDefaultBehavior, сообщающую, что клиент умеет вычислять поведение переименования по умолчанию. Чтение выполняется один раз на инициализацию, чтобы не обращаться к возможностям клиента на каждый запрос textDocument/prepareRename.

    • getRename

      public WorkspaceEdit getRename(DocumentContext documentContext, RenameParams params)
      Построить WorkspaceEdit с правками переименования символа.

      Резолвит переименовываемый символ, собирает текстовые правки по всем его вхождениям и делегирует выбор формата результата в RenameWorkspaceEditBuilder: при поддержке клиентом workspace.workspaceEdit.documentChanges (и опционально workspace.workspaceEdit.changeAnnotationSupport) возвращаются documentChanges с аннотациями правок, иначе результат понижается до legacy changes-map.

      Parameters:
      documentContext - Контекст документа.
      params - Параметры вызова.
      Returns:
      Изменения документов
    • getPrepareRename

      Подготовить переименование символа под курсором для ответа на 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 без значения, если символ переименовать нельзя.