SuperAPI AI 工具集

performance-lint-rules

编程与开发

查看项目

更新于 10-16 03:14

技能介绍

用途:这是 Oxc linter 规则实现的性能审查指南,仅在审查 crates/oxc_linter/src/rules/ 下的 Rust 规则代码或明确需要时使用。

主要能力与要点:

  1. 优先在规则入口做顶层节点类型检查。若规则只处理少数语法形式,应在 run 开头用 AstKind match 并对其他节点直接返回,使 lintgen 推导出更窄的 NODE_TYPES,避免在不相关 AST 节点上派发规则。修改节点类型后需用 cargo lintgen 重新生成规则运行器,并考虑在 crates/oxc_linter/src/rule.rs 中补充或更新 assert_rule_runs_on_node_types 覆盖。
  2. 只实现需要的入口点。若规则是对语义索引的整文件遍历,应只用 run_once;同时实现 run 和 run_once 会妨碍节点类型收窄。
  3. 先做更便宜的检查。按从最便宜、最具选择性到最昂贵的顺序排列,常见不匹配应快速返回,再做语义查找、分配或更深遍历。示例包括:用 matches! 匹配小的固定字符串集合;只可能匹配构造函数时先拒绝小写标识符;检查 JSX 属性是否以 aria- 开头再转小写;先检查 key prop 等必需语法再查找回调参数符号;先检查 source_range(span).contains("this") 再运行只查找 this 的 visitor。
  4. 延迟昂贵上下文。多数文件没有 lint 错误,在找到可报告的语法候选前,不要准备诊断、标签、帮助文本、修复数据、祖先、符号、JSX 元素类型或替换字符串。
  5. 尽可能遍历最小集合。整文件遍历用 run_once;查找特定名称引用时遍历符号而非 AST 节点;优先使用定向列表或语义数据。基于名称的绑定检查用 ctx.scoping().get_binding(scope_id, name),而非扫描 get_bindings(scope_id)。全局或未解析标识符检查从 ctx.scoping().root_unresolved_references().get(name) 开始。遍历未解析引用时仍需验证引用类型,跳过有符号的引用、仅类型引用以及 AstKind 非预期标识符或成员访问的节点。检查导入说明符或导出名称时,遍历具体说明符或预计算导出集合。仅在大量符号需要同一成员测试时使用预计算 FxHashSet,否则优先按键语义查找。
  6. 避免不必要的正则表达式。字节或字符串检查足够时用 contains、starts_with、ends_with 或匹配小固定集合。热注释或字符串扫描路径先用 memchr 或字节搜索拒绝多数输入,再解析候选。替换正则时保持语义,尤其是标识符边界、可选前缀和多行空白。
  7. 避免堆分配。值通常不变时用写时复制工具;迭代或借用数据足够时避免中间 Vec 和 String;临时数据尽量放栈上;延迟分配直到确实需要诊断、修复或转换值;调用 cow_to_ascii_lowercase 前用 starts_with_ignore_case 等无分配 ASCII 比较;简单 ASCII 模式如转义序列用 as_bytes().array_windows() 字节扫描;已知最终大小时预留哈希表或集合;不要仅为检查可直接在 scoping 数据中查找的名称而构建 HashSet。

限制:资料未提供该指南的安装方式、收费信息、平台支持或具体使用步骤,仅描述审查规则代码时的性能约定。