# LSP

向語言伺服器協定（LSP）伺服器查詢程式碼智慧資訊——定義、參照、懸停、符號、實作以及呼叫階層。因為它在語意層面理解程式碼，所以比純文字搜尋更精確。

## 何時使用

- 跳至符號定義（`goToDefinition`）或查找其全部參照（`findReferences`）
- 讀取符號的型別簽章 / 文件（`hover`）
- 列出單一檔案中的符號（`documentSymbol`）或在整個專案中搜尋符號（`workspaceSymbol`）
- 查找介面或抽象方法的實作（`goToImplementation`）
- 遍歷函式的呼叫階層（`prepareCallHierarchy`、`incomingCalls`、`outgoingCalls`）

## 參數

- `operation`（字串，必填）：上述操作之一。
- `filePath`（字串，必填）：要操作的檔案。
- `line`（數字，必填）：從 1 開始的行號，與編輯器中顯示的一致。
- `character`（數字，必填）：從 1 開始的字元偏移，與編輯器中顯示的一致。

## 注意事項

- 需要為該檔案類型設定好 LSP 伺服器，否則呼叫會回傳錯誤。
- 行號與字元偏移均從 1 開始（編輯器座標），而非從 0 開始。
- 當你需要語意層級導覽（真正的定義/參照）而非文字比對時，優先使用 LSP 而非 `Grep`。

## 相關概念

- 在導覽與修改程式碼時與 `Read`、`Edit` 搭配使用。
