Rome CLI `rome check` 命令实战:Lint、格式化与导入整理的统一检查与自动修复 📅 发布时间:2026/9/20 16:03:00 👁 浏览次数: Rome CLIrome check命令实战Lint、格式化与导入整理的统一检查与自动修复【免费下载链接】toolsUnified developer tools for JavaScript, TypeScript, and the web项目地址: https://gitcode.com/gh_mirrors/to/tools导读本文以 Rome 仓库中 check.md 记录的终端输出为切入点系统讲解rome check命令的定位、用法、输出格式与底层实现。rome check是 Rome当前仓库的快照版本命令名为rome中一次运行即可同时完成**代码检查lint、格式化检查format与导入语句整理organize imports**的一站式命令是日常开发与 CI 中最常使用的入口。读完本文你将掌握rome check的全部参数、三种运行模式只检查 / 安全修复 / 含不安全修复、如何读懂它逐行渲染的诊断报告以及它背后的源码调用链。rome check是什么一次运行三类检查Rome 将 JavaScript / TypeScript / JSON / JSX / TSX 等 Web 前端语言的工具链统一到了单一二进制中。在 CLI 层面它拆分为几个命令rome format仅做格式化检查或写回rome lint仅做代码检查rome checklint 格式化 导入整理三合一。这一点可以从源码中得到印证在 crates/rome_cli/src/execute/traverse.rs 的can_handle实现中TraversalMode::Check模式下只要文件支持 Lint、Format、OrganizeImports 三者之一就会被处理而TraversalMode::Format只关心 FormatTraversalMode::Lint只关心 Lint。具体到单个文件crates/rome_cli/src/execute/process_file/check.rs 的check_file依次执行三个阶段Lintlint_with_guard运行 linter产出规则诊断OrganizeImportsorganize_imports_with_guard整理 import 语句Formatformat_with_guard检查/执行格式化。任一阶段产出错误该文件即被标记为失败。rome check因此非常适合作为提交前检查与CI 入口。快速上手从一次真实的rome check输出说起check.md记录了在项目根目录直接执行rome check的真实终端输出。这份输出同时展示了三条 lint 诊断非常适合用来读懂 Rome 的诊断渲染格式$ rome check src/App.jsx:12:3 lint/jsx-a11y/altText ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✖ Provide alt text when using img, area, input typeimage, and object elements. 10 │ return div classNameApp 11 │ header classNameApp-header 12 │ img src{logo2} classNameApp-logo / │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 13 │ p 14 │ Edit ℹ Meaningful alternative text on elements helps users relying on screen readers to understand contents purpose within a page. src/App.jsx:12:13 lint/js/noUndeclaredVariables ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✖ The logo2 variable is undeclared 10 │ return div classNameApp 11 │ header classNameApp-header 12 │ img src{logo2} classNameApp-logo / │ ^^^^^ 13 │ p 14 │ Edit ℹ Did you mean logo? - logo2 logo src/App.jsx:2:7 lint/js/noUnusedVariables ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✖ The import variable logo is unused. 1 │ // jsx 2 │ import logo from ./logo.svg; │ ^^^^ 3 │ import ./App.css; ℹ Unused variables are dead code and usually the result of incomplete refactoring. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✖ Found 3 problems逐段拆解这份输出可以总结出 Rome 诊断渲染的固定结构头部位置 规则码每条诊断以文件:行:列与规则码开头例如src/App.jsx:12:3 lint/jsx-a11y/altText—— 位置在src/App.jsx第 12 行第 3 列触发的是jsx-a11y可访问性规则组下的altText规则src/App.jsx:12:13 lint/js/noUndeclaredVariables—— 同一行第 13 列触发js规则组的noUndeclaredVariablessrc/App.jsx:2:7 lint/js/noUnusedVariables—— 第 2 行第 7 列触发noUnusedVariables。规则码的命名空间格式为lint/group/ruleName这与仓库中 rome_diagnostics_categories 定义的诊断分类体系一致。上述三类规则的实现分别位于 crates/rome_js_analyze/src/aria_analyzers/jsx-a11y 组与 crates/rome_js_analyze/src/semantic_analyzers/基于语义分析的 js 规则组。主体错误消息 源码片段 定位标记✖开头的加粗行是错误消息。例如altText规则要求在使用img、area、input typeimage与object元素时提供alt文本随后的代码块展示带行号的源码片段 12 │指向出错行行下方以^组成的波浪线精确圈出问题跨度。第一个诊断把整个img ... /元素圈了出来第二个诊断只圈住logo2标识符第三个诊断圈住 import 中的logo变量——跨度范围完全由规则在 AST 上的定位决定ℹ开头的浅色行是补充说明advice。altText的说明解释了可访问性动机有意义的替代文本能帮助依赖屏幕阅读器的用户理解页面中内容的作用noUnusedVariables则提示未使用变量属于死代码通常是不完整重构的结果。修复建议与 diff 预览第二个诊断展示了 Rome 最有价值的能力之一——建议式修复suggested fix。当规则能推断出修改方案时会在诊断末尾渲染一个简单的 diffℹ Did you mean logo? - logo2 logonoUndeclaredVariables通过语义模型发现logo2与已声明变量logo高度相似因此给出你是不是想说logo的建议并附上把logo2替换为logo的最小改动。这类不安全修复不会在默认模式下自动应用需要显式使用--apply-unsafe。汇总行输出末尾的横线之下是汇总✖ Found 3 problems。当存在问题时命令以非零退出码结束方便接入 CI。三种运行模式检查、安全修复、含不安全修复rome check默认只报告问题不修改文件。需要自动修复时使用--apply或--apply-unsafe。两者在命令入口 crates/rome_cli/src/commands/check.rs 中被翻译为不同的FixFileMode命令FixFileMode行为rome check无只检查报告诊断不写文件rome check --applySafeFixes应用安全修复与格式化SafeFixesrome check --apply-unsafeSafeAndUnsafeFixes应用安全修复 不安全修复并执行格式化与导入排序--apply与--apply-unsafe互斥同时传入会直接报错源码中CliDiagnostic::incompatible_arguments(--apply, --apply-unsafe)。为什么区分安全与不安全因为部分修复可能改变代码语义。以noUnusedVariables为例移除一个未使用的 import 通常是安全的但像noUndeclaredVariables给出的把logo2改成logo这种建议虽然大概率是开发者想要的却无法保证 100% 正确因此归入不安全修复。这一点在官方文档中也有对应说明例如 website/src/pages/linter/index.mdx 演示了rome check --apply ./src与rome check --apply-unsafe ./src两种用法。导入整理organize imports的差异同样可以在源码中确认在 crates/rome_cli/src/execute/process_file/organize_imports.rs 中只有当处于is_check_apply_unsafe()模式时才会把排序后的代码写回文件否则仅产生一个 Diff 消息。也就是说默认的rome check会提示 import 顺序问题--apply不会自动排序只有--apply-unsafe才会执行导入排序并写回。当以 apply 模式运行且修复后仍有遗留错误时CLI 会给出ApplyError诊断traverse.rs中还会打印提示语If you wish to apply the suggested (unsafe) fixes, use the commandrome check --apply-unsafe。完整参数与配置说明rome check的官方参数说明记录在 website/src/pages/cli.md 的# rome check一节完整整理如下。命令特有选项rome check [--apply] [--apply-unsafe] [PATH]...选项说明--apply应用安全修复与格式化--apply-unsafe应用安全修复与不安全修复执行格式化与导入排序--formatter-enabledtrue\|false开关检查中的格式化阶段--linter-enabledtrue\|false开关检查中的 linter 阶段--organize-imports-enabledtrue\|false开关导入整理阶段--stdin-file-pathPATH从标准输入读取代码并用该路径含扩展名决定解析语言例如echo let a; \| rome check --stdin-file-pathfile.js-h, --help打印帮助信息三个*-enabled开关在 check.rs 中会覆盖rome.json里的对应配置项formatter.enabled、linter.enabled、organize_imports.enabled实现命令行优先的按需裁剪。来自 rome.json 的配置项可被 CLI 覆盖rome check会读取项目根目录的rome.json。下表是check支持覆盖的配置项及其默认值配置项取值默认值--indent-styletab/space—--indent-size数字2--line-width数字80--quote-styledouble/singledouble--jsx-quote-styledouble/singledouble--quote-propertiespreserve/as-neededas-needed--trailing-commaall/es5/noneall--semicolonsalways/as-needed是否所有语句都打印分号--vcs-client-kindgit—--vcs-enabledtrue/false是否与 VCS 客户端集成--vcs-use-ignore-filetrue/false是否使用 VCS 的 ignore 文件过滤待检查文件--vcs-root路径默认使用rome.json所在目录找不到配置时退回当前工作目录--files-max-size数字字节1 MiB超过此大小的文件为性能考虑被忽略--files-ignore-unknowntrue/false遇到未知类型文件时不发诊断其中 VCS 相关选项在 check.rs 中通过store_path_to_ignore_from_vcs将.gitignore等文件中的忽略规则合并进配置使得rome check能天然跳过被版本控制忽略的路径。全局选项选项说明--colorsoff\|force控制 ANSI 颜色输出off纯文本force强制着色--use-server连接到已运行的 Rome daemon 服务--verbose输出更详细的诊断附加信息--config-pathPATH指定rome.json所在目录--max-diagnosticsNUMBER限制显示的诊断条数默认 20--skip-errors跳过含语法错误的文件而不是发出错误诊断--no-errors-on-unmatched没有文件被处理时静默而非报错--json以 JSON 格式输出报告位置参数PATH可以是单个文件、单个目录或一组路径不传路径且不配合--stdin-file-path时命令会报缺少INPUT参数见 traverse.rs 的missing_argument检查。输出与退出码适合 CI 的设计rome check的终端汇总由 crates/rome_cli/src/execute/traverse.rs 中的CheckResult生成格式为Checked N file(s) in 12ms Found N error(s)其退出码逻辑同样位于该文件处理过程中出现错误诊断errors 0时返回CliDiagnostic::check_error即非零退出码一个文件都没处理成功count - skipped 0时返回no_files_processed除非指定--no-errors-on-unmatched若开启--error-on-warnings相关行为存在警告也会导致非零退出。配合--max-diagnostics默认 20当诊断数量超过上限时Rome 会折叠多余部分并提示Diagnostics not shown: N.避免大仓库刷屏。结合--json则可以将报告序列化为结构化数据供其他工具消费。另外rome check的渲染还支持富文本 markuprome_console的markup!宏体系见 crates/rome_console/src/markup.rs终端下以颜色区分错误红、信息蓝、警告黄--colorsoff可切为纯文本以便重定向。从标准输入检查管道友好rome check支持不落盘检查将代码通过管道喂入并用--stdin-file-path告知 Rome 该代码的文件名与扩展名决定解析器语言echo let a; | rome check --stdin-file-pathfile.js echo img src{logo2} / | rome check --stdin-file-pathApp.jsx在 check.rs 中若指定了stdin_file_path但管道没有实际输入命令会报missing_argument(stdin, check)读取成功后输入内容会随TraversalMode::Check一起进入execute_mode处理。源码级原理一次rome check的完整调用链把前面散落的源码证据串起来一次rome check的完整流程是入口crates/rome_cli/src/commands/check.rs 的check函数解析--apply/--apply-unsafe得到FixFileMode配置load_configuration读取rome.json命令行开关覆盖formatter.enabled、linter.enabled、organize_imports.enabled随后把 VCS 忽略文件合并进配置并update_settings写入 workspace遍历crates/rome_cli/src/execute/traverse.rs 用 Rayon 线程池并发遍历输入路径can_handle依据file_features判断每个文件支持哪些功能逐文件处理crates/rome_cli/src/execute/process_file/check.rs 的check_file依次执行lint_with_guard→organize_imports_with_guard→format_with_guard把诊断消息推入 channel渲染与退出控制台线程消费消息按--max-diagnostics限额渲染诊断最终汇总 Checked N file(s) 与 Found N error(s)并根据错误数决定退出码。规则诊断的产生则由 crates/rome_js_analyze 完成语法分析基于 crates/rome_js_parser语义信息未声明变量、未使用变量等依赖 crates/rome_js_semantic 构建的语义模型。altText这类可访问性规则位于aria_analyzersnoUndeclaredVariables、noUnusedVariables这类依赖语义分析的规则位于semantic_analyzers。测试验证行为都有用例背书Rome 为rome check建立了系统的 CLI 快照测试位于 crates/rome_cli/tests/commands/check.rs覆盖了check --help帮助输出快照干净文件通过含只读文件系统场景语法错误parse_error时输出错误诊断noDebugger、noUndeclaredVariables、noUnusedVariables等规则的检查与--apply/--apply-unsafe修复前后内容对比如FIX_BEFORE/FIX_AFTER、APPLY_SUGGESTED_BEFORE/APPLY_SUGGESTED_AFTER通过rome.json配置禁用 linter、忽略文件、升降级诊断严重级别等组合场景。这些测试印证了本文所述的参数行为与输出格式读者在修改或扩展 check 逻辑后可直接运行该测试文件中的用例回归验证。小结rome check是 Rome 工具链中一处入口、三类检查的核心命令默认只读地报告 lint、格式化与导入整理问题--apply安全修复--apply-unsafe进一步应用建议式修复并执行导入排序。它的诊断输出以位置 规则码 源码片段 定位标记 修复 diff的结构化格式呈现--max-diagnostics、--json、--stdin-file-path等选项使其既能面向开发者终端也能无缝嵌入 CI 与编辑器。无论是阅读诊断、配置规则还是深入源码扩展行为本文梳理的命令、配置与调用链都可以作为你的起点。【免费下载链接】toolsUnified developer tools for JavaScript, TypeScript, and the web项目地址: https://gitcode.com/gh_mirrors/to/tools创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考