如何在VSCode中创建自定义语言的语法检查与语法高亮功能?
实现VSCode自定义语言支持的步骤
1. 创建VSCode扩展项目
- 先安装Node.js,再全局安装Yeoman和VSCode扩展生成器:
npm install -g yo generator-code - 运行
yo code,选择「New Language Support」模板,按提示输入语言标识(比如loose-json-plsql)、关联的文件扩展名(比如.ljp),生成基础扩展结构。
2. 编写语法高亮规则(TextMate语法)
- 打开扩展目录下的
syntaxes/loose-json-plsql.tmLanguage.json,修改规则适配你的宽松JSON结构:- 匹配无引号键:添加规则
"match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*:",将键标记为entity.name.tag.json类的高亮组,让键显示为特定颜色。 - 处理布尔值:匹配
\\b(true|false)\\b,标记为constant.language.boolean.json,让true/false高亮显示。 - 嵌套PL/SQL高亮:针对包含PL/SQL的字符串值(如
myQuery对应的内容),用begin/end;作为边界,通过include: source.plsql复用VSCode自带的PL/SQL语法高亮规则,让字符串内的PL/SQL代码自动高亮。
- 匹配无引号键:添加规则
- 按F5启动扩展开发窗口,打开你的自定义测试文件,验证高亮效果,调整正则或规则直到符合预期。
3. 实现语法检查功能
- 两种可选方案:
- 简易方案:写一个小脚本把宽松JSON转换为标准JSON(给键补加引号),然后结合VSCode的
jsonValidation贡献点,用JSON Schema做基础校验。 - 专业方案:实现自定义语言服务器(LSP):
- 安装依赖:
npm install vscode-languageserver vscode-languageserver-utils - 编写服务器逻辑:解析无引号键的JSON结构,检查对象/数组闭合、键值对格式错误;调用PL/SQL语法检查工具(如Oracle官方语法校验库)验证字符串内的PL/SQL代码。
- 在
package.json中配置语言服务器的启动脚本,让VSCode在打开自定义文件时自动启动服务。
- 安装依赖:
- 简易方案:写一个小脚本把宽松JSON转换为标准JSON(给键补加引号),然后结合VSCode的
4. 添加自动补全功能
- 基于语言服务器实现动态补全:
- 在语言服务器中监听
completionItem/resolve请求,根据当前上下文生成补全建议:- 针对无引号键:提供常用键名(如
action、debug、myQuery)的快速补全。 - 针对PL/SQL字符串:复用VSCode的PL/SQL补全规则,在字符串内触发PL/SQL关键字、函数名的补全。
- 针对无引号键:提供常用键名(如
- 在语言服务器中监听
- 如果需求简单,也可以在
package.json的contributions.completions中定义静态补全项,但动态补全更灵活。
5. 配置扩展全局可用
- 完善
package.json中的配置:- 确保
contributes.languages里的extensions字段包含你的自定义文件扩展名(如[".ljp"]),让VSCode自动识别该类型文件。 - 可添加
configuration选项,允许用户自定义高亮颜色、补全触发时机等。
- 确保
6. 全局安装扩展
- 本地打包:在扩展目录运行
vsce package生成.vsix安装包。 - 全局安装:打开VSCode,通过「扩展」面板的「从VSIX安装」选项导入生成的文件,即可在所有项目中使用该自定义语言支持。
内容的提问来源于stack exchange,提问作者DarkLeader
相关产品推荐
相关产品推荐

