# LSP

สอบถามเซิร์ฟเวอร์ Language Server Protocol (LSP) เพื่อขอข้อมูลอัจฉริยะของโค้ด — คำนิยาม, การอ้างอิง, hover, สัญลักษณ์, การนำไปใช้งาน และลำดับชั้นการเรียก แม่นยำกว่าการค้นหาด้วยข้อความเพราะเข้าใจโค้ดในเชิงความหมาย

## เมื่อใดควรใช้

- กระโดดไปยังคำนิยามของสัญลักษณ์ (`goToDefinition`) หรือค้นหาทุกการอ้างอิง (`findReferences`)
- อ่านลายเซ็นชนิดข้อมูล / เอกสารของสัญลักษณ์ (`hover`)
- แสดงรายการสัญลักษณ์ในไฟล์เดียว (`documentSymbol`) หรือค้นหาสัญลักษณ์ทั่วทั้งโปรเจกต์ (`workspaceSymbol`)
- ค้นหาการนำไปใช้งานของอินเทอร์เฟซหรือเมธอดนามธรรม (`goToImplementation`)
- เดินดูลำดับชั้นการเรียกของฟังก์ชัน (`prepareCallHierarchy`, `incomingCalls`, `outgoingCalls`)

## พารามิเตอร์

- `operation` (สตริง, จำเป็น): หนึ่งในการดำเนินการที่ระบุไว้ข้างต้น
- `filePath` (สตริง, จำเป็น): ไฟล์ที่จะดำเนินการ
- `line` (ตัวเลข, จำเป็น): หมายเลขบรรทัดเริ่มจาก 1 ตามที่แสดงในเอดิเตอร์
- `character` (ตัวเลข, จำเป็น): ตำแหน่งอักขระเริ่มจาก 1 ตามที่แสดงในเอดิเตอร์

## หมายเหตุ

- ต้องมีเซิร์ฟเวอร์ LSP ที่กำหนดค่าไว้สำหรับชนิดไฟล์นั้น มิฉะนั้นการเรียกจะคืนค่าข้อผิดพลาด
- บรรทัดและอักขระเริ่มจาก 1 (พิกัดของเอดิเตอร์) ไม่ใช่เริ่มจาก 0
- เมื่อคุณต้องการการนำทางเชิงความหมาย (คำนิยาม/การอ้างอิงที่แท้จริง) มากกว่าการจับคู่ข้อความ ให้ใช้ LSP แทน `Grep`

## แนวคิดที่เกี่ยวข้อง

- ใช้ร่วมกับ `Read` และ `Edit` เมื่อนำทางและแก้ไขโค้ด
