资讯动态

vscode_cangjie 命令行工具集成指南:cjfmt 格式化、cjlint 静态检查与 cjcov 覆盖率统计实战

发布时间:2026/10/14 6:18:06 来源:尧图企业网站定制
开发工具代码编辑器调试器【免费下载链接】vscode_cangjie项目地址https://gitcode.com/Cangjie/vscode_cangjie点击查看免费下载本文基于 vscode_cangjie 开源仓库的《命令行工具集成》文档整理系统讲解仓颉 VSCode 插件如何将 SDK 自带的 cjfmt、cjlint、cjcov 三个命令行工具集成进 IDE覆盖格式化、静态检查含保存时自动检查与 cjlintignore.cfg 屏蔽配置与覆盖率报告的完整操作路径并给出源码级实现依据。仓颉 VSCode 插件vscode_cangjie不仅提供语言服务与调试能力还深度集成了仓颉 SDK 自带的三个命令行工具格式化工具 cjfmtCangjie Formatter、静态检查工具 cjlint 与覆盖率统计工具 cjcov。开发者在代码编辑区或资源管理器中右键即可触发对应功能无需离开 IDE 手动执行命令行。本文将按照 command-line_tools_integration.md 的脉络逐一讲解这三个工具的入口、快捷键、输出形式与底层实现并重点剖析保存时自动静态检查与 cjlintignore.cfg 屏蔽文件的机制。说明文中所用界面截图截取于 VSCode 软件界面仅用于说明仓颉插件在 VSCode 中的使用方法。前置条件工具从哪来三个功能分别对应仓颉 SDK 中的三个命令行工具。以格式化为例插件在运行时并非内置格式化逻辑而是动态拼接 SDK 下的可执行文件路径并调用子进程执行见 cj-format.tsSDK 根目录通过Utility.getCangjieHome()获取实际读取的是 VSCode 配置项CangjieSdkPath下的CJNativeBackend或CJVMBackend路径utils.ts工具真实路径为CangjieHome/tools/bin/cjfmtWindows 上为cjfmt.exe见 cj-format.ts若 SDK 路径无效或目录下不存在 cjfmt插件会弹出Please check sdk path、Format failed, no cjfmt tool等错误提示cj-format.ts。因此使用前请确认已按 install.md 完成 SDK 安装与路径配置单击左下角齿轮图标进入设置搜索Cangjie在Cangjie Language Support中设置Cangjie Sdk: Option默认CJNative与Cangjie Sdk Path: CJNative Backend的绝对路径重启 VSCode 生效。仓颉 SDK 提供的格式化工具 cjfmt 是插件格式化能力的底层依赖。一、格式化cjfmt1.1 格式化单个文件针对仓颉源码文件在 VSCode 的代码编辑区右键选择[Cangjie] Format或使用快捷键Ctrl Alt F执行格式化命令即可对当前仓颉文件进行格式化。在命令注册层面extension.formatCj与extension.formatCjFolder两个命令都指向同一个实现CjFormat.formatFunc()其中快捷键ctrlaltf绑定在editorTextFocus条件下package.json右键菜单项则限定resourceExtname .cjpackage.json。从源码看单文件格式化走cjfmt -f 文件路径而文件夹格式化走cjfmt -d 目录路径Windows 下为避免路径含空格改用双引号包裹见 cj-format.ts# 单文件Linux/macOS cjfmt -f /path/to/file.cj # 文件夹Linux/macOS cjfmt -d /path/to/dir此外插件对入参做了几道校验理解这些校验有助于排查格式化失败问题cj-format.ts路径不能包含..且必须真实存在否则直接返回失败单文件场景下扩展名必须为.cj否则提示The plugin only can format Cangjie source code fileSDK 路径无效或缺少tools/bin目录时会分别报错。1.2 格式化整个文件夹针对仓颉项目支持在 VSCode 的资源管理器中选中文件或右键单击文件夹执行[Cangjie] Format命令对所选文件或文件夹进行批量格式化。资源管理器的右键菜单项extension.formatCjFolder的显示条件为resourceExtname .cj || explorerResourceIsFolderpackage.json即选中.cj文件或任意文件夹时均可出现。底层通过fs.lstatSync判断目标是否为目录目录走-d参数、文件走-f参数cj-format.ts由此实现了文件/文件夹双模式的同一入口设计。二、静态检查cjlint2.1 功能定位与检查范围IDE 中的静态检查功能基于静态检查工具cjlint该功能可以识别代码中不符合编程规范的问题帮助开发者发现代码中的漏洞写出满足 Clean Source 要求的仓颉代码。说明静态检查目前只能检测工程目录src文件夹下的所有仓颉文件。这里的src文件夹并非写死的路径从 utils.ts 的getSrcPath()可以看出插件优先解析工程根目录cjpm.toml中[package]段的src-dir配置若未配置或路径非法才回退到默认的src目录。因此文档所说只能检测 src 文件夹本质是默认工程结构下的表现。2.2 两个检查入口静态检查的入口有两处在 VSCode 的代码编辑区右键选择[Cangjie] CodeCheck或使用快捷键Ctrl Alt C执行静态检查命令如下图所示。在 VSCode 的资源管理器处右键选择[Cangjie] CodeCheck执行静态检查命令如下图所示。对应的命令注册为cangjie.cjlint编辑区与cangjie.cjlintFloder资源管理器快捷键ctrlaltc同样绑定在editorTextFocus条件package.json。两个命令共用 CjlintWebview 的init()逻辑。2.3 检查结果的展示与跳转执行静态检查命令后如果有不符合编码规范的问题会展示在右侧的表格中。单击表格中的文件链接可以跳转到问题代码所在文件的行列。结果表格的呈现链路值得关注它印证了表格 行列跳转的完整闭环插件在工程 src 目录下执行cjlint -f src路径 -o ./report命令完成后读取生成的report.json并解析cjlint-webview.ts解析结果通过cangjie.codecheck.diagnostic命令交给 CjlintDiagnostic将每条问题映射为 VSCode 的Diagnostic对象defectLevel MANDATORY的问题以 Error 严重级别展示其余为 Warning行列号需从 1 起始换算为 VSCode 的 0 起始item.line - 1、item.column - 1同时结果被注入右侧表格页面 contentHtml.html表格由 CjlintResult.js 动态生成文件列渲染为可点击链接点击后通过 Webview 消息回传fileName/line/column再由goFileLocation()打开对应文件并定位行列cjlint-webview.ts。也就是说编辑器内的问题标记Diagnostics与右侧表格是同一份检查结果的两面前者由 VSCode 原生问题面板呈现后者便于集中浏览与跳转。2.4 保存后自动静态检查当前支持代码保存后自动触发静态检查开发者可以通过点击左下角齿轮图标选择设置选项在搜索栏输入cangjie找到Code Check On Save选项勾选该选项即可开启自动触发静态检查。该选项在插件配置中对应Cangjie.CodeCheckOnSave类型为 boolean默认值为false描述为Enable do CodeCheck in the folder where the file is currently savedpackage.json。底层实现位于 cjlint-on-save.ts核心机制包括事件监听通过onDidChangeTextDocument区分编辑与保存事件——有contentChanges视为编辑否则视为保存并触发检查同时onDidChangeActiveTextEditor会在切换编辑器时对当前.cj文件补一次检查cjlint-on-save.ts防抖去重检查动作被debounce包裹等待窗口为CJLINT_WAIT_TIME 2000毫秒且用inOnSave标志避免重复触发constant-num.ts、cjlint-on-save.ts执行与清理保存时在文件所在目录执行cjlint -f 目录 -o 工程根目录/report检查过程中状态栏显示$(sync~spin) Cangjie-CodeChecking...完成后解析report.json注入诊断并清理临时报告文件若检查期间用户又编辑了代码进程会被终止、报告被删除避免展示过期结果cjlint-on-save.ts。2.5 cjlintignore.cfg 屏蔽配置开启自动静态检查后会在项目根目录生成一个cjlintignore.cfg配置文件配置文件中可支持三类屏蔽方式包括屏蔽文件、文件夹和正则表达式。每条配置项为相对该配置文件所在目录的相对路径支持正则无需双引号包含自动静态检查支持将配置项匹配的仓颉文件屏蔽不会产生关于这些文件的告警。例如在 cjlintignore.cfg 中有以下配置则自动静态检查会将src/subdir1/目录和src/subdir2/a.cj文件加入屏蔽。生成时机与生效方式都有明确的源码依据自动生成插件激活时调用CjlintOnSave.mkdirCjlintIgnoreCfg()当CodeCheckOnSave开启且根目录尚无该文件时写入空文件cjlint-on-save.ts配置项Cangjie.CodeCheckOnSave发生变更时也会再次触发该逻辑launch-tools.ts配置文件名常量定义于 constant-num.tsCJLINT_CONFIG_NAME cjlintignore.cfg生效方式手动检查与自动检查两条路径都会在检测到该文件存在时向 cjlint 命令追加-e 相对路径参数将屏蔽文件传给检查工具cjlint-webview.ts、cjlint-on-save.ts。由此可总结 cjlintignore.cfg 的书写要点每行一个条目内容为相对项目根目录即配置文件所在目录的路径目录以/结尾文件直接写路径并支持正则表达式条目不需要双引号包裹。符合匹配的仓颉文件将被屏蔽不产生告警。三、覆盖率统计cjcov3.1 功能定位与使用约束覆盖率统计功能用于生成仓颉语言程序的覆盖率报告。注意当选择的文件夹中不含有仓颉文件时将不会生成覆盖率报告。3.2 两个入口覆盖率统计的入口有两处在 VSCode 的代码编辑区右键选择[Cangjie] Coverage或用快捷键Ctrl Alt G执行生成当前仓颉文件覆盖率报告的命令如下图所示。在 VSCode 的资源管理器中选择文件或右键单击文件夹执行[Cangjie] Coverage命令对选择的文件或者文件夹生成覆盖率报告如下图所示。命令cangjie.cjcov编辑区与cangjie.cjcovFloder资源管理器由 CjcovWebview 注册快捷键ctrlaltg绑定在editorTextFocus条件package.json。3.3 生成流程与报告查看在生成的覆盖率报告页面可以单击文件名查看覆盖率详情。与格式化、静态检查单命令即完成不同覆盖率统计是一条流水线。从 cjcov-webview.ts 的命令常量与init()的调用序列可以还原完整链路cjpm update # 更新依赖依赖未变更时通常很快 cjpm build --coverage # 开启覆盖率插桩的构建 cjpm run --skip-build # 运行程序产生覆盖率数据 cjcov -o output --html-details -i 目标路径 # 生成 HTML 覆盖率报告 cjpm clean # 清理构建产物其中cjcov -o output --html-details生成带源码逐行着色详情页的 HTML 报告-i指定待统计的目标文件/目录即右键选择的对象。每步失败都会中止后续流程并输出错误信息cjcov-webview.ts。报告生成后插件以 Webview 面板打开工程output目录下的index.html页面内文件名链接点击后回传路径插件据此打开对应的详情页面cjcov-webview.ts。这也解释了文档中的注意点若所选文件夹中不含仓颉文件则cjcov无内容可统计自然也就不会生成覆盖率报告。四、命令与快捷键速查将三种工具在插件中的映射汇总如下命令注册见 package.json、package.json、package.json功能右键入口快捷键底层命令底层工具格式化单文件编辑区[Cangjie] FormatCtrl Alt Fcjfmt -f 文件cjfmt格式化文件/文件夹资源管理器[Cangjie] Format—cjfmt -d 目录/-f 文件cjfmt静态检查编辑区[Cangjie] CodeCheckCtrl Alt Ccjlint -f src路径 -o ./reportcjlint静态检查文件夹资源管理器[Cangjie] CodeCheck—同上cjlint保存后自动检查设置勾选Code Check On Save—同上防抖 2scjlint覆盖率统计编辑区[Cangjie] CoverageCtrl Alt Gcjpm update→cjpm build --coverage→cjpm run --skip-build→cjcov -o output --html-details -i 目标cjpm cjcov五、常见问题与排查思路结合上文源码行为汇总几个高频问题的排查方向格式化/检查提示找不到工具确认CangjieSdkPath配置的 SDK 目录下存在tools/bin/cjfmtWindows 为cjfmt.exe并已重启 VSCode 生效插件报错信息见 cj-format.ts。静态检查没有任何结果检查目标文件是否位于工程src目录或cjpm.toml的src-dir指定目录内这是静态检查的默认扫描范围同时确认cjlintignore.cfg中是否有规则将其屏蔽。保存后没有自动检查确认设置中已勾选Code Check On SaveCangjie.CodeCheckOnSave默认关闭检查过程带 2 秒防抖快速连续保存时会合并触发。覆盖率报告未生成确认所选文件/文件夹包含仓颉源文件且工程能正常执行cjpm build --coverage与cjpm run --skip-build任一步骤失败流水线都会中止。路径含特殊字符README 建议源码文件名与路径遵循仓颉规范命名避免包含[0-9a-zA-Z_]之外的字符Windows 平台不支持含中文字符的源码文件名与路径场景详见仓库 README_zh.md。三个工具的实现分别位于 src/tools/src/format/cj-format.ts、src/tools/src/cjlint/含 webview、诊断与保存触发三部分与 src/tools/src/cjcov/cjcov-webview.ts读者可结合本文对照源码深入理解每一步的命令构造与错误处理逻辑。赞分享开发工具代码编辑器调试器【免费下载链接】vscode_cangjie项目地址https://gitcode.com/Cangjie/vscode_cangjie点击查看免费下载相关推荐ok-ww三步上手鸣潮自动化工具ok ww三步上手鸣潮自动化工具 ok ww 是一款基于图像识别与界面操作模拟的鸣潮自动化工具全程通过 Windows 接口模拟用户按键与点击不读取内存、不GUI 自动化计算机视觉RPA人工智能代码质量双引擎Cangjie DevEco Plugins 的 cjformat 格式化与 cjlint 静态检查完整指南代码质量双引擎Cangjie DevEco Plugins 的 cjformat 格式化与 cjlint 静态检查完整指南 在 DevEco Studio 中开发工具IDE调试器代码质量uBlock Origin内存只多占 15MB却拦掉九成请求的免费拦截器uBlock Origin内存只多占 15MB却拦掉九成请求的免费拦截器 没有它打开一个页面网络面板里已经排着几十个跟踪请求。装上它多数请求根本走不出网络安全应用安全上一篇iTowns开发实战5个步骤实现高精度地形可视化与数据叠加下一篇如何优雅管理多环境API地址openapi-fetch环境变量终极配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑