ACSPL+ ProgramManager — VS Code 扩展
ACS 运动控制器 ACSPL+ 语言的 VS Code 增强插件,专注多项目代码阅读体验。
特性
- 多项目 TreeView — 侧边栏统一管理多个 PRG 项目:打开 workspace 自动发现根目录 3 层内的 .prg 文件,支持手动添加/移除;配置
acspl.prgSearchPaths 可深度扫描指定目录;项目列表自动持久化到 .vscode/acspl-projects.json
- Buffer 智能命名 — Buffer 节点显示
!PNAME= 注释中的真实名字(如 0 Version),无注释时回退为 Buffer N
- Buffer 独立视图 — 单击 Buffer 打开独立虚拟文档,tab 标题显示
Buffer名 - 文件名.prg,行号从 1 起,保存自动合并回原 PRG
- Buffer 精确分段 — 正确解析 PRG 中所有 Buffer 分段标记,每个 Buffer 独立显示、独立打开
- D-Buffer 声明视图 — 项目树下显示「D-Buffer」节点(#A 标记后的全局变量 / 函数声明区,无段号),同样支持独立虚拟文档打开、保存写回 #A 段
- Buffer 槽位补全 — 标题栏一键切换「按源码 / 连续Buffer序号补全」:补全模式将 #0 到源码最大段号(不超过 63)之间的缺失段全部显示为空槽位,超过 63 的段按源码顺序显示。单击空槽位 → 确认创建 → 编辑 → 保存,新段按段号顺序写回 PRG
- 一键折叠 — 项目管理视图支持「全部折叠」:标题栏折叠按钮、视图右上角「…」更多菜单、视图空白处右键均可执行,一键收起全部项目节点
- Buffer 删除与清空 — 右键 Buffer / D-Buffer 节点:「删除」直接修改 PRG 原文件,彻底移除段标记与全部内容(模态二次确认,不可撤销);「清空」保留 #N 标记与 !PNAME/!PDESC 元数据,仅清除内容行。删除/清空后自动关闭已打开的虚拟视图,防止残留内容写回
- ACSPL+ 格式化 — Shift+Alt+F 全文格式化、Ctrl+K Ctrl+F 选区格式化:tab 转 4 空格;关键词与逻辑词自动大写(if→IF、and→AND);运算符与操作数之间补空格(var1=1 → var1 = 1,==/<=/<>/>= 完整识别);逗号、分号后置空格;行尾分号去除;IF...ELSE...END 与嵌套块按行首关键词自动缩进;标签与函数声明顶格。单行压缩块保持单行不拆行;原 PRG 全文格式化仅作用于各 Buffer 段内,#N 标记与元数据行不受影响
- PRG 大纲视图 — 大纲面板与面包屑导航:原 PRG 按 Buffer(含 D-Buffer)分组,每个 Buffer 内分「stop型子程序 / ret型子程序 / 函数 / 变量 / ON 事件 / Region」六组;标签按终止词(STOP/RET)配对归类,支持别名、嵌套与 fall-through;符号详情带声明行号,点击跳转;解析与缩进无关,结构归属仅由
#N 段标记决定;打开文档时大纲默认全部折叠,按需展开
- Region 折叠 —
!region / !endregion 特殊注释折叠(替代 ACS MMI 超 3000 行 Buffer 折叠失效,任意行数 Buffer 均有效):单叹号标记、大小写不敏感、允许缩进、支持嵌套;多叹号(!!region)自动降级为普通注释不参与折叠;行末回车自动插入配对 !endregion(缩进对齐、叹号数跟随起始行);未闭合 !region 与孤立 !endregion 在 Problems 面板报错级诊断;标记行独立配色(ACS Light #808080 / ACS Dark #969696);打开 Buffer 虚拟文档自动折叠全部 region;编辑器右键菜单「折叠 Region 段」一键折叠当前文档全部 region;大纲中 Region 独立分组,成员与折叠箭头一一对应、点击跳转起始行
- 例程折叠 —
label:…ret / label:…stop 标签子程序、on…ret ON 例程(autoroutine,事件/条件上升沿触发、执行一次至 RET 返回)与函数块(签名行 + {…},如 void Foo(int a)、real FASTCALL GetCdaIn();纯数字括号是数组声明不折叠)折叠:支持嵌套(内层先闭合),子程序内 ON 例程的 ret 闭合 ON 自身、不误闭合外层子程序,函数由 } 闭合、函数体内的 ret/stop 不干扰;流程控制结构(IF/WHILE/LOOP/BLOCK)不折叠;不参与打开 Buffer 时的自动折叠(仅 region 自动折叠);与 region 交叉时例程优先,region 折叠让位
- 可选主题 — 提供 ACS Dark / ACS Light 双主题供手动选择,插件不会自动切换你的 VS Code 主题(首次激活仅提示一次)。注意:切换 ACS 主题会改变 VS Code 其它区域的配色(界面与其它语言代码),属预期现象;如需保持原界面配色可切回其它 VS Code 主题,实测不影响 PRG 内容区语法着色(PRG 语法 scope 使用通用命名,任意主题下都有基础高亮)
- 代码片段 — 30+ 常用 ACSPL+ 代码模板(LOOP、WHILE、IF、函数声明等)
本版本为纯前端阅读体验版,不含 Python 后端,连接控制器 / 编译 / 运行 / 烧录功能不可用。
安装
前置依赖:
安装扩展:VS Code 扩展视图 → 更多操作 → Install from VSIX → 选择 acspl-plus-<version>.vsix。
快速上手
- 打开 workspace → 自动加载项目列表(根目录 3 层内的 .prg 文件)
- TreeView 点击 + 添加 PRG 文件
- 单击 Buffer / D-Buffer 打开独立视图阅读/编辑
- (可选)首选项 > 颜色主题 → 选择 ACS Dark / ACS Light 获得最佳高亮效果
其余命令在命令面板(Ctrl+Shift+P)搜索 ACSPL+ 即可找到。
致谢 / 参考
本插件的代码片段组织与主题配色方案,部分思路参考了 ACSPL-vscode-Extenstion,代码为本仓库独立实现。
已知冲突
Better Comments(aaron-bond.better-comments):其默认 ! tag 会把 ACSPL 注释掉的代码染成红色(! 是 ACSPL 注释符)。插件检测到冲突时(工作区含 .prg 文件,每会话提示一次)会弹出告知通知;如需修复,在命令面板运行「ACSPL+: 修复 Better Comments 注释冲突」,或直接停用该扩展。
更新日志
v0.1.0
- 阅读体验基础 — 多项目 TreeView、Buffer 独立视图与智能命名、ACS Dark / ACS Light 双主题、30+ 代码片段
- Buffer 槽位补全 — 「按源码 / 连续Buffer序号补全」双显示模式,空槽位创建与按段号写回
- PRG 大纲视图 — 大纲面板与面包屑导航:Buffer(含 D-Buffer)分组、五组符号分类、标签终止词配对(别名 / 嵌套 / fall-through)
- 阅读版 UI 清理 — 状态栏与界面文案精简,聚焦多项目代码阅读场景
- D-Buffer 视图与一键折叠 — TreeView 显示「D-Buffer」节点并支持独立虚拟文档;视图标题栏一键折叠全部项目
- Buffer 删除与清空 — 右键 Buffer / D-Buffer 删除(模态二次确认,彻底移除段标记与全部内容)或清空(保留标记与元数据,仅清内容),删除后自动关闭已打开的虚拟视图
- ACSPL+ 格式化 — Shift+Alt+F / Ctrl+K Ctrl+F 双范围格式化:关键词与逻辑词大写、运算符/逗号/分号空格、行尾分号去除、IF...ELSE...END 嵌套缩进、tab 转 4 空格;不拆行保持单行压缩块;PRG 段标记与元数据行不受影响
- Region 折叠与子程序折叠 —
!region/!endregion 特殊注释折叠(替代 ACS MMI 超 3000 行失效)、回车自动配对、配对诊断、标记行独立配色、Buffer 打开自动折叠、右键菜单「折叠 Region 段」;label:…ret/stop 子程序折叠(交叉时子程序优先);大纲新增 Region 独立分组
- ON 例程折叠与大纲默认折叠 —
on…ret ON 例程折叠(默认不自动折叠,交叉时例程优先);打开文档时大纲默认全部折叠
- 函数折叠 — 签名行 +
{…} 块折叠(含 real FASTCALL GetCdaIn() FASTCALL 修饰形式;孤立签名与纯数字括号数组声明不折叠);region 紧贴子程序标题时自动吸附合并为嵌套共存
开发
npm install && npm run compile # 编译 TypeScript
npm run package # 打包 .vsix
调试扩展(推荐 F5)
- 在扩展目录打开 VS Code 窗口:
code extensions/acspl-plus-vscode
- 按 F5 启动调试:preLaunchTask 自动编译 TypeScript,随后弹出 [Extension Development Host] 窗口加载最新代码
- 修改代码后按 Ctrl+Shift+F5(或调试工具栏「重新启动」):自动重新编译并重启宿主窗口,无需手动重载;支持断点、调试控制台
扩展在窗口启动时一次性加载 out/ 编译产物,编译后必须重启宿主窗口新代码才生效。
调试扩展(命令行窗口方式)
不用 F5、手动开宿主窗口时:
npm run watch # 终端保持运行:tsc 持续监视编译
code --extensionDevelopmentPath="<扩展绝对路径>" --new-window
改动保存后 npm run watch 自动产出最新 out/,在宿主窗口按 Ctrl+R(开发者:重新加载窗口)加载新代码。相比 F5 少断点能力、多一步手动重载。
本分支为纯前端稳定版;含 Python 后端的完整开发版在 develop 分支。
详细的开发资料(架构、API 陷阱、主题配色细节)见本地 docs/ 目录。
作者
dgwy
许可证
MIT