LSP 與編輯器支援
OpenPine 包含完整的語言伺服器協定(LSP)實現和 VS Code 擴充功能。
功能
LSP 支援 20+ 項功能:
| 功能 | 描述 |
|---|---|
| 診斷 | 即時錯誤和警告報告 |
| 補全 | 上下文感知的程式碼補全 |
| 簽名幫助 | 函式參數提示 |
| 懸停 | 懸停時顯示類型資訊和文件 |
| 跳轉到定義 | 跳轉到函式/類型/變數定義 |
| 跳轉到類型定義 | 跳轉到符號的類型 |
| 尋找參考 | 尋找符號的所有用法 |
| 文件醒目提示 | 醒目提示符號的所有出現位置 |
| 文件符號 | 函式、類型、變數的大綱 |
| 工作區符號 | 跨檔案搜尋符號 |
| 重新命名 | 跨專案重新命名符號 |
| 文件顏色 | 顏色字面量預覽 |
| 格式化 | 自動格式化 Pine Script 程式碼 |
| 輸入時格式化 | 輸入時自動格式化 |
| 語意標記 | 豐富的語法醒目提示 |
| 行內提示 | 行內類型和參數提示 |
| Code Lens | 函式上方的行內操作 |
| 摺疊範圍 | 程式碼區塊摺疊 |
| 呼叫層次 | 傳入/傳出呼叫樹 |
VS Code 擴充功能
安裝
VS Code 擴充功能位於 crates/lsp/editors/vscode/。
建構並安裝:
bash
cd crates/lsp/editors/vscode
npm install
npm run build
npm run package
code --install-extension openpine-0.1.0.vsix --force功能
- 透過 TextMate 語法提供語法醒目提示
- 上述所有 LSP 功能
- Pine Script 檔案關聯(
.pine檔案)
執行 LSP 伺服器
Stdio 模式(預設)
bash
cargo run -p openpine-lspTCP 模式
bash
cargo run -p openpine-lsp -- --tcp --port 9257使用 Analyzer API
對於程式設計使用,Analyzer 結構體提供對 LSP 功能的直接存取:
rust
use openpine_lsp::Analyzer;
let analyzer = Analyzer::new(loader);
let result = analyzer.analyze("script.pine", source);
// 取得診斷
let diagnostics = result.diagnostics();
// 在指定位置取得補全
let completions = result.completions_at(position);
// 跳轉到定義
let definition = result.definition_at(position);
// 尋找所有參考
let references = result.references_at(position, include_declaration);
// 取得文件符號
let symbols = result.document_symbols();
// 取得文件顏色
let colors = result.document_colors();Neovim 設定
使用 nvim-lspconfig 的 Neovim 配置:
lua
local lspconfig = require('lspconfig')
local configs = require('lspconfig.configs')
configs.openpine = {
default_config = {
cmd = { 'path/to/openpine-lsp' },
filetypes = { 'pine' },
root_dir = lspconfig.util.find_git_ancestor,
},
}
lspconfig.openpine.setup{}