簡體   English   中英

如何在提取到變量 (LSP) 后自動觸發重命名流程?

[英]How can I automatically trigger the rename flow after extracting into a variable (LSP)?

我正在使用語言服務器協議實現對一種語言的 IDE 支持。

我想在提取一個變量到當前scope后觸發重命名。也就是說,我已經實現了當前流程的步驟1到2,想知道如何實現3和4

  1. 當用戶選擇一個表達式時,會出現一個黃色燈泡。 示例: z = 3 + /*selection-start*/5000/*selection-end*/ 燈泡

  2. 當用戶選擇“提取到變量”時,將在當前 scope 中創建一個名為“占位符”的新變量,並將原始表達式分配給它。 示例: placeholder = 5000; z = 3 + placeholder placeholder = 5000; z = 3 + placeholder 重命名

  3. placeholder的第一個實例高亮顯示,並彈出重命名文本框。 當用戶鍵入“the_new_name”並按下Return時,文本為: the_new_name = 5000; z = 3 + the_new_name the_new_name = 5000; z = 3 + the_new_name

更名

是否可以使用 LSP 實現此流程? 如果是這樣,如何? 我檢查了 LSP 規范,聽起來我正在尋找一個Command ,但我沒有看到用於重命名的內置Command

TypeScript 的語言服務器具有我試圖復制的行為(在這里實現),但是 TypeScript 沒有實現語言服務器協議,所以查看它的源代碼對我沒有幫助。 以上截圖來自VSCode內置的TypeScript插件

似乎編輯們必須要求自己重新命名。 服務器可以根據代碼操作請求發送編輯列表,但是此時它們無法請求用戶輸入: https://github.com/microsoft/language-server-protocol/issues/1641

LSP 不支持此流程,但可以使用自定義命令完成。 這是一種技術:

  • WorkspaceEdit中包含片段文本,例如“${0: placeholder}”。 片段語法在此處記錄
  • 在客戶端中,處理代碼操作響應時,檢測編輯中的片段語法,然后使用 IDE 的 API 觸發重命名流程。 對於 VSCode,這可以通過觸發使用 VSCode API 的自定義命令來完成。 我找不到這方面的任何文檔,所以 cargo-culted Rust-Analyzer's solution (函數命令(編輯器:vscode.editor){... editor.replace(范圍,文本)...}`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM