基石语言 · VS Code 扩展
为 基石(jishi)——中文编程语言——提供编辑器支持。
先装基石本体(扩展只负责编辑器那一层):
pip install git+https://github.com/benxiaoniao/JISHI.git
(发布到 PyPI 后即为 pip install jishi),装好用 jishi 医生 确认环境。
jishi 不在 PATH 上时,在设置里指明它——语言服务与调试共用这一项:
{ "jishi.server.command": "D:/jishi/jishi.exe" }
能力
语法层(扩展自带,不需要语言服务):
.jsh 文件语法高亮(关键字 / 字符串与插值文本 / 注释 / 数字 / 函数与类名 /
内建函数 / 标准库模块名 / 异常类型)
- 常用结构代码片段(如果 / 遍历 / 遍历解包 / 匹配 / 用 / 函数 / 类 / 尝试 /
导入 / 插值文本 …,输前缀回车即出)
- 中文标点成对补全(
()``「」 等)、# 注释、缩进规则
语义层(由 jishi lsp 提供,M42 起接入):
| 能力 |
在编辑器里的样子 |
| 实时诊断 |
有错的地方画波浪线,中文报错 + 错误码 |
| 补全 |
关键字 / 内建 / 标准库模块与函数 / 本文件符号;随机. 之后给模块函数 |
| 悬停文档 |
鼠标停名字上,出中文说明与签名 |
| 跳转定义 |
F12;本文件找不到会去工作区别的文件里找一个唯一的同名符号 |
| 大纲 / 文档符号 |
Ctrl+Shift+O 按符号跳转 |
| 工作区符号 |
Ctrl+T 全工作区搜符号 |
| 格式化 |
Shift+Alt+F(与 jishi 格式化 同一份实现) |
| 重命名 |
F2(详见下面的「已知边界」) |
| 快速修复 |
报错处点灯泡:把 if 改成 如果、len 改成 长度… |
| 签名提示 |
打 ( 时出形参表,并高亮当前是第几个实参 |
| 语义高亮 |
区分关键字 / 标准库 / 用户函数与变量(比纯语法高亮更准) |
调试(由 jishi dap 提供,M43 起接入):
| 能力 |
在编辑器里的样子 |
| 断点 |
行号左边点一下;写在空行/注释行上会显示成灰圈并说明原因 |
| 单步 |
F10 下一步(不钻进函数)/ F11 单步(钻进去)/ Shift+F11 跳出 |
| 继续 / 暂停 |
F5 继续;运行中也可以「暂停」,会在下一条语句边界停下 |
| 变量 |
左侧「变量」面板,点调用栈的任意一帧看那一帧的变量(带中文类型名) |
| 调用栈 |
左侧「调用栈」面板,显示到某一帧的完整链路 |
| 监视 / 悬停求值 |
「监视」面板加表达式;鼠标悬停也能求值(C 虚拟机除外,见下) |
| 调试控制台 |
程序输出与调试器提示都在这里;output 事件按 stdout / console 分类着色 |
第一次按 F5 会自动生成 launch.json,选「基石调试」即可(program 不写就用
当前打开的文件;换执行器加 "执行器": "vm",可选 树遍历 / vm / cvm)。
右下角状态栏有「基石 LSP:就绪」,点它可以重启服务。
已知边界(不粉饰)
- 重命名只支持模块级符号(函数 / 类 / 顶层变量 / 导入名)。
函数形参与函数内的局部变量不支持——AST 不记形参位置,而且没有作用域
分析就改名会把「另一个函数里同名的局部变量」一起改掉,那是在改坏用户的代码。
做不到的位置按
F2 时 VSCode 会直接说「无法重命名」,不会给一个错的编辑。
- 跨文件跳转只在「唯一命中」时生效:同名符号出现在多个文件里就放弃跳转
(跳错地方比跳不过去更费时间)。
- 工作区符号索引有封顶:最多 400 个
.jsh 文件、单文件 512KB,跳过
.jishi(第三方包缓存)与隐藏目录。真要做全项目数据库得上后台任务,
不该卡住编辑器。
- 签名提示在「文档解析不了」时靠 token 兜底:从
函数 甲(…) 的 token
序列里读形参。所以未闭合括号时也能用(那正是最需要它的时候)。
- 调试时的变量不展开:列表/字典显示成一行文本(
[1, 2, 3]),与命令行的
「变量」命令同一口径——不做「编辑器里能展开、命令行里不能」这种分裂。
- C 虚拟机不支持在暂停处求值:那边没有「在任意帧上求一个表达式」的入口。
监视与悬停求值会明确回一句「暂不支持就地求值」并给出替代方案(改用
vm
执行器),而不是给个错值。断点、单步、看变量与调用栈照常可用。
- 没有条件断点 / 命中计数 / 日志断点:命令行版也没有,这里不假装有
(能力声明里一律写
false,VSCode 就不会给用户画出没用的输入框)。
| |