SysML v2语言服务器
](https://www.npmjs.com/package/sysml-v2-lsp)

特性
| 功能 | 状态 | 描述 |
|---|---|---|
| 诊断 | ✅ | 带有红色波浪的语法错误报告 |
| 文件符号 | ✅ | 具有SysML模型结构的轮廓面板 |
| 悬停 | ✅ | 悬停时的元素种类、类型和文档 |
| 转到定义 | ✅ | Ctrl+单击导航到声明 |
| 查找引用 | ✅ | 查找符号的所有用法 |
| 代码补全 | ✅ | 关键字、代码片段和符号建议 |
| 语义令牌 | ✅ | 丰富的上下文感知语法高亮显示 |
| 折叠范围 | ✅ | 可折叠的 { } 块和评论 |
| 重命名 | ✅ | 重命名符号和所有引用 |
| 语义验证 | ✅ | 未解析的类型、无效的多样性、重复 |
| 代码操作 | ✅ | 快速修复:命名、文档存根、空枚举、未使用的defs |
| 复杂性分析 | ✅ | 结构度量、综合指数、热点检测 |
| 美人鱼预览 | ✅ | 6种图表类型,具有自动检测、聚焦和差异模式 |
| MCP服务器 | ✅ | 人工智能辅助建模 sysml-mcp CLI |
快速开始
从市场安装
通过VS Code扩展从 VS代码市场.
开发容器(推荐)
在GitHub代码空间或VS代码开发容器中打开——所有内容都是预先安装的,包括Python 3.13、Jupyter和Node.js 22。
手动设置
npm install && npm run build && npm test发展
npm run watch # recompiles on file changes
# Then press F5 in VS Code to launch the extension + server使用 “客户端+服务器” 复合调试配置,可同时调试双方。
客户示例
LSP服务器与语言无关。包括三个客户端实现来演示不同的集成模式:
VS代码扩展(clients/vscode/)
主客户端——一个完整的VS Code扩展,使用 vscode-languageclient,通过IPC进行通信。直接在编辑器中提供诊断、完成、悬停、转到定义、语义标记和所有其他LSP功能。
Web客户端(clients/web/)
一个基于浏览器的SysML浏览器,带有连接到LSP服务器的Node.js HTTP桥。具有自动分析的实时编辑器、诊断面板、符号轮廓和缩放/平移的Mermaid图生成功能。
make web # build + start on http://localhost:3000Python客户端(clients/python/)
一个零依赖的Python脚本和Jupyter笔记本,通过stdio驱动LSP——与VS Code使用的JSON-RPC协议相同,没有框架开销。
python3 clients/python/sysml_lsp_client.py # analyse all examples
python3 clients/python/sysml_lsp_client.py examples/bike.sysml # analyse a specific fileJupyter笔记本(sysml_lsp_demo.ipynb)提供了每个LSP功能的交互式演练。
建筑
┌───────────────────────────┐
│ Language Server │
│ (Node.js process) │
├───────────────────────────┤
│ • ANTLR4 parser │
│ • Diagnostics │
│ • Symbols / hover │
│ • Completions / rename │
│ • Semantic tokens │
│ • Go-to-def / references │
└────────┬──────────────────┘
│ LSP (JSON-RPC)
┌───────────────────┼────────────────────┐
│ │ │
┌────────┴───────┐ ┌────────┴───────┐ ┌─────────┴──────┐
│ VS Code (IPC) │ │ Web (HTTP) │ │ Python (stdio)│
│ Extension │ │ Browser SPA │ │ Script/Jupyter│
└────────────────┘ └────────────────┘ └────────────────┘项目结构
sysml-v2-lsp/
├── clients/
│ ├── vscode/ # VS Code extension (TypeScript)
│ ├── web/ # Browser SPA + Node.js HTTP bridge
│ └── python/ # Zero-dep Python client + Jupyter notebook
├── server/src/ # Language Server
│ ├── server.ts # LSP connection, capability registration
│ ├── documentManager.ts # Parse cache, document lifecycle
│ ├── parser/ # Parse pipeline
│ ├── symbols/ # Symbol table, scopes, element types
│ ├── providers/ # LSP feature implementations
│ ├── analysis/ # Complexity analyzer
│ └── mcp/ # Mermaid diagram generator
├── grammar/ # ANTLR4 grammar files (.g4)
├── sysml.library/ # SysML v2 standard library
├── benchmarks/ # Performance benchmark suite
│ ├── src/ # Runner, suites, reporters, utilities
│ ├── baselines/ # Saved baseline for regression detection
│ ├── results/ # JSON + Markdown output per run
│ └── fixtures/ # Synthetic .sysml files for benchmarking
├── examples/ # Example .sysml models
├── test/ # Unit tests (vitest)
└── package.json # Extension manifest + monorepo scripts可用命令
make help # Show all targets
make install # Install all dependencies
make build # Generate parser + compile + bundle
make watch # Watch mode
make test # Run unit tests
make lint # ESLint
make package # Build .vsix
make package-server # Build server tarball for npm
make web # Launch web client (http://localhost:3000)
make update-grammar # Pull latest grammar, rebuild parser + DFA snapshot
make update-library # Pull latest SysML v2 standard library
make dfa # Regenerate DFA snapshot (after any grammar change)
make ci # Full CI pipeline (lint + build + test)
npm run bench # Run all benchmark suites
npm run bench:baseline # Save benchmark baseline
npm run bench:regression # Compare against baseline基准测试
内置的基准测试套件测量解析器、符号表、LSP提供程序、内存、吞吐量和文件夹加载性能。结果以JSON和Markdown格式写入 benchmarks/results/.
运行基准
npm run bench # run all suites
npm run bench:parse # parse suite only
npm run bench:providers # LSP providers suite only或者直接使用转轮进行完全控制:
npx tsx benchmarks/src/runner.ts --suite parse --suite symbolTable
npx tsx benchmarks/src/runner.ts --runs 10 --warmup 3
npx tsx benchmarks/src/runner.ts --output ./my-results套房
| 套房 | 它衡量什么 |
|---|---|
parse | ANTLR4解析时间——冷(无DFA)与热(预加载DFA快照) |
symbolTable | 符号表构建和查找延迟 |
providers | LSP功能:诊断、悬停、完成、引用、重命名等。 |
memory | 每个文件的堆分配和缩放行为 |
throughput | 所有示例文件的端到端行/秒和令牌/秒 |
folderLoad | 完整文件夹解析+符号构建(示例、标准库、全部) |
回归检测
保存基线,然后将未来的运行与之进行比较:
npm run bench:baseline # save current results as baseline
npm run bench:regression # compare against baseline, exit 1 on regression默认回归阈值为20%。覆盖 --threshold .
查看结果
每次运行都会生成一个JSON文件和一个Markdown报告 benchmarks/results/.要将现有的JSON结果转换为Markdown:
npx tsx benchmarks/src/reporters/markdownReporter.ts benchmarks/results/.json语法更新
中的语法文件 grammar/ 来源于 daltskin/sysml-v2语法要获取最新版本,请重建解析器,并重新生成DFA快照:
make update-grammar这获取 .g4 文件,运行 npm run build,并重新生成DFA快照,消除ANTLR4冷启动损失。如果手动编辑语法文件,请运行 make dfa 之后。
技术栈
| 组件 | 技术 |
|---|---|
| 语言 | TypeScript(严格模式) |
| 运行时 | Node.js≥18 |
| 解析器 | ANTLR 4 |
| 发电机 | 安托万的线 |
| LSP | vscode语言服务器 |
| Bundler | esbuild |
| 测试 | vitest |
相关项目
- daltskin/sysml-v2语法 --SysML v2语法
- daltskin/VSCode_SysML_扩展 --带有可视化功能的VS代码扩展
- OMG SysML v2规范
许可证
麻省理工学院
