Alia VSCode扩展
  • JavaScript 100%
Find a file
2026-10-03 10:55:49 +08:00
bin 支持调试功能&格式化不删除注释 2026-10-03 10:55:49 +08:00
icons 性能优化 2026-08-12 22:53:15 +08:00
Scripts Analyzer 2026-09-25 07:44:24 +08:00
syntaxes 更新染色方案 2026-10-02 15:37:54 +08:00
Tests 支持调试功能&格式化不删除注释 2026-10-03 10:55:49 +08:00
.gitignore Analyzer 2026-09-25 07:44:24 +08:00
.vscodeignore Analyzer 2026-09-25 07:44:24 +08:00
alia-vscode-0.1.0.vsix 支持调试功能&格式化不删除注释 2026-10-03 10:55:49 +08:00
extension.js 支持调试功能&格式化不删除注释 2026-10-03 10:55:49 +08:00
language-configuration.json 关键字引号&变量染色 2026-09-30 16:05:25 +08:00
package.json 支持调试功能&格式化不删除注释 2026-10-03 10:55:49 +08:00
README.md Analyzer 2026-09-25 07:44:24 +08:00

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`;均缺失时报错提示,不静默失效。