Skip to content

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-lsp

TCP 模式

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{}

基于 MIT 许可证发布。