Alia VSCode扩展
- JavaScript 100%
| bin | ||
| icons | ||
| Scripts | ||
| syntaxes | ||
| Tests | ||
| .gitignore | ||
| .vscodeignore | ||
| alia-vscode-0.1.0.vsix | ||
| extension.js | ||
| language-configuration.json | ||
| package.json | ||
| README.md | ||
Alia 语言支持(VSCode 扩展)
基于 Alia Executor 的全面语言感知扩展:语法/语义高亮、格式化、诊断、运行/编译、智能补全、跳转定义、Hover、虚插入类型注释、文档大纲与跨文件索引。
功能
| 能力 | 说明 |
|---|---|
| 语法高亮 | TextMate grammar(source.alia),注释/字符串/关键字/运算符/数字等基础着色 |
| 语义高亮 | 复用 Executor 的 color(),按 AST 给变量/类型/别名/参数等细粒度着色,可开关 |
| 格式化 | 基于 Formatter:缩进宽度、Tab/空格、紧凑模式、引号风格、栈体括号留白 |
| 诊断 | 语法 + 静态类型检查(Checker),错误/警告分级,防抖输出,可开关 |
| 运行/编译 | 生成终端子进程执行,支持运行、编译为 JS / 编译为 Rust |
| 语法检查 | 手动触发一次完整检查 |
| 智能补全 | 文档/索引符号 + 内置别名 + 关键字 + 内置类型,触发字符 . 与 < |
| Hover | 符号类型/别名模式 + 光标处 Stack 类型语境 |
| 跳转定义 | 局部变量作用域解析优先,兜底跨文件索引 |
| 虚插入类型注释 | 基于 Checker 推断的变量/形参类型 : <Type>,可开关 |
| 文档大纲 | 按符号树展示 alias/class/变量等 |
| 跨文件索引 | 索引工作区内全部 .alia,支撑工作区符号与跨文件跳转,可开关 |
依赖
- 需要 Alia Executor 运行时,默认取扩展目录上级的
Base/Executor(配置alia.executorPath)。 - 语言集默认
Core(对应Base/Core,配置alia.executorLanguage)。 - 编译为 Rust 需要本机安装
rustc/cargo。
安装
源码方式构建 vsix 后安装:
cd VSCodeExt
npx @vscode/vsce package # 产出 alia-vscode-<version>.vsix
code --install-extension alia-vscode-0.1.0.vsix
开发调试(已用 VS Code 打开本项目时):按 F5 启动扩展开发宿主。
配置项
| 键 | 默认 | 说明 |
|---|---|---|
alia.executorPath |
../Base/Executor |
Executor 运行时路径(相对扩展目录或绝对路径) |
alia.executorLanguage |
Core |
语言集名称,对应 Base/Core |
alia.enableSemanticTokens |
true |
基于 color() 的语义高亮 |
alia.enableDiagnostics |
true |
语法/类型诊断 |
alia.enableInlayHints |
true |
虚插入变量类型注释 |
alia.enableIndex |
true |
跨文件索引 |
alia.analysisDelay |
300 |
文档变更后完整分析(诊断/语义高亮/虚插入)的防抖(毫秒),分析在后台 Worker 执行 |
alia.maxAnalysisSize |
2097152 |
超过该字节数的文档跳过深层分析,仅保留基础语法高亮 |
alia.format.indentSize |
2 |
缩进宽度 |
alia.format.useTabs |
false |
使用 Tab 缩进 |
alia.format.compact |
false |
紧凑模式 |
alia.format.quoteStyle |
single |
字符串引号风格(single/double) |
alia.format.bracketSpacing |
true |
栈体括号内留空白 |
命令
| 命令标题 | 命令 ID | 说明 |
|---|---|---|
| Alia: 运行文件 | alia.run |
解释执行当前文件 |
| Alia: 编译为 JS | alia.compile.js |
编译当前文件为 JavaScript |
| Alia: 编译为 Rust | alia.compile.rs |
编译当前文件为 Rust(生成 Cargo 项目) |
| Alia: 语法检查 | alia.check |
立即执行一次语法/类型检查 |
| Alia: 刷新索引 | alia.refreshIndex |
重新扫描并索引工作区 .alia |
开发与测试
测试入口 VSCodeExt/Tests/test.js,可分组运行:
node Tests/test.js all # 全部
node Tests/test.js color # 语义高亮
node Tests/test.js symbols # 符号表
node Tests/test.js scope # 作用域解析
node Tests/test.js inlay # 虚插入提示
node Tests/test.js cache # 分析缓存
node Tests/test.js index # 跨文件索引
node Tests/test.js worker # 分析 Worker 与语义编码
性能说明:诊断、语义高亮与虚插入共享同一次分析流水线,全部在后台 Worker 线程执行(Worker 不可用时降级为主线程同步路径);编辑期间 Provider 立即返回上一次结果(StaleCache),停顿后由单一防抖触发重算。跨文件索引在独立 Worker 中解析,避免大工作区扫描阻塞 VS Code Extension Host。
打包与发布
- 打包:
vsce package,产物为alia-vscode-<version>.vsix。 .vscodeignore已排除Tests/、Memory/、.git/、node_modules/等非运行时文件。- 发布到 Visual Studio Marketplace(需配置发布者):
vsce publish。
目录结构
VSCodeExt/
├── extension.js # 扩展激活入口,注册全部 provider 与命令
├── package.json # 扩展清单(配置/命令/贡献点)
├── language-configuration.json # 注释符、括号配对、自动闭合
├── syntaxes/alia.tmLanguage.json
├── bin/runner.js # 子进程运行/编译入口(经终端调用)
└── Tests/
├── test.js
└── Systems/ # color/symbols/scope/inlay/cache/index/worker/find/completion/host 测试
语法分析能力(格式化/高亮/符号/查找/补全/索引)全部由 `Base/Executor/Analyzer`
提供,经 `Base/Executor` 主入口(`require('../Base/Executor').Analyzer`)引用;
本目录仅保留 VSCode 接口适配(`extension.js`)与运行入口(`bin/runner.js`)。
## 发布打包
可发布的 vsix 内置 Executor,不依赖外部目录:
npm run pack # 装配 VSCodeExt/bundled/(Executor + Core + koffi,约 7M,git 忽略) vsce package # 打包 vsix(prepublish 自动重装配)
运行时解析顺序:`alia.executorPath` 配置 → 源码布局 `../Base/Executor` →
随包 `bundled/Executor`;均缺失时报错提示,不静默失效。