Skip to content

Guard 规则清单

76 条内置 Guard 规则的触发条件与检测逻辑。

Guard 检测引擎分 4 层,从快到慢、从浅到深:正则(行级匹配)→ 代码级(跨行配对)→ AST 语义(Tree-sitter 解析)→ 跨文件(多文件关联分析)。

Layer 0:正则规则

行级正则模式匹配,速度最快,覆盖最广。

ObjC / Swift

规则 ID级别语言分类说明
no-main-thread-syncerrorobjc, swiftcorrectness禁止在主线程上使用 dispatch_sync(main),易死锁
main-thread-sync-swifterrorswiftcorrectness禁止 DispatchQueue.main.sync,易死锁
objc-dealloc-asyncerrorobjccorrectnessdealloc 内禁止 dispatch_async / dispatch_after / postNotification
objc-block-retain-cyclewarningobjccorrectnessblock 内直接使用 self 可能循环引用,建议 weakSelf
objc-assign-objectwarningobjccorrectnessassign 用于对象类型会产生悬垂指针,建议 weakstrong
swift-force-castwarningswiftsafetyas! 强制转换在失败时崩溃,建议 as?guard let
swift-force-trywarningswiftsafetytry! 在异常时崩溃,建议 do-catchtry?
objc-timer-retain-cyclewarningobjccorrectnessNSTimer 以 self 为 target 会强引用 self
objc-possible-main-thread-blockingwarningobjcperformancesleep / usleep 可能造成主线程阻塞

JavaScript / TypeScript

规则 ID级别语言分类说明
js-no-evalerrorjs, tssafetyeval() 存在安全风险和性能问题
js-no-varwarningjs, tsstyle使用 let / const 替代 var
js-no-console-loginfojs, tsstyle生产代码应移除 console.log
js-no-debuggererrorjs, tsstyle生产代码中不应包含 debugger 语句
js-no-alertwarningjs, tsstyle生产代码中不应使用 alert()
ts-no-non-null-assertionwarningtssafety非空断言 ! 可能掩盖 null/undefined 错误

Python

规则 ID级别语言分类说明
py-no-bare-exceptwarningpythoncorrectnessexcept: 会捕获所有异常(含 SystemExit)
py-no-execerrorpythonsafetyexec() 存在安全风险
py-no-mutable-defaultwarningpythoncorrectness函数默认参数使用可变对象会导致共享状态 bug
py-no-star-importwarningpythonstylefrom module import * 命名空间污染
py-no-assert-in-prodinfopythoncorrectnessassert-O 模式下移除,不应用于生产逻辑

Java / Kotlin

规则 ID级别语言分类说明
java-no-system-exiterrorjava, kotlincorrectnessSystem.exit() 直接终止 JVM
java-no-raw-typewarningjavastyle使用泛型集合替代原始类型
java-no-empty-catchwarningjava, kotlincorrectness空 catch 块静默吞异常
java-no-thread-stoperrorjavasafetyThread.stop() 已废弃且不安全
kotlin-no-force-unwrapwarningkotlinsafety!! 非空断言在值为 null 时抛 NPE

Go

规则 ID级别语言分类说明
go-no-panicwarninggocorrectnesspanic 应仅用于不可恢复错误
go-no-err-ignoredwarninggocorrectness错误值不应用 _ 忽略
go-no-init-abuseinfogostyleinit() 函数副作用难以追踪
go-no-global-varinfogostyle全局可变变量导致并发安全问题

Dart (Flutter)

规则 ID级别语言分类说明
dart-no-printinfodartstyle生产代码应使用 logger 替代 print()
dart-avoid-dynamicwarningdartstyle避免直接使用 dynamic 作为类型
dart-no-set-state-after-disposeinfodartcorrectnesssetState 前应检查 mounted 状态
dart-avoid-bang-operatorwarningdartcorrectness避免使用 ! 空断言操作符
dart-prefer-const-constructorinfodartperformanceconst 构造函数优化 Widget 重建
dart-no-relative-importinfodartstylelib/ 内应使用 package: 绝对导入
dart-dispose-controllerwarningdartcorrectnessController 须在 dispose() 中释放
dart-no-build-context-across-asyncwarningdartcorrectnessBuildContext 不应跨越 async gap

Rust

规则 ID级别语言分类说明
rust-no-unwrapwarningrustcorrectness生产代码避免 .unwrap(),使用 ?expect
rust-no-expect-without-msginforuststyleexpect() 应提供有意义的错误消息
rust-unsafe-blockwarningrustsafetyunsafe 块需要 // SAFETY: 注释
rust-no-todo-macrowarningrustcorrectness生产代码不应包含 todo! / unimplemented!
rust-clone-overuseinforustperformance频繁 .clone() 可能暗示所有权设计问题
rust-no-panic-in-libwarningrustcorrectnesspanic! 在库代码中应避免
rust-std-mutex-in-asyncwarningrustcorrectnessasync 代码中不应使用 std::sync::Mutex
rust-no-string-push-in-loopinforustperformance循环中 String 拼接可能导致多次分配

Layer 1:代码级检查

跨行配对检查,检测跨越多行的结构性问题。

规则 ID语言级别说明可配置阈值
objc-kvo-missing-removeobjcwarning存在 addObserver 未发现配对 removeObserver
objc-duplicate-categoryobjcwarning同文件内 Category 重名
js-unhandled-promisejs, tswarningPromise 链缺少 .catch() 错误处理
go-defer-in-loopgowarningdefer 在循环内会延迟到函数返回
py-mixed-indentationpythonwarning文件混用 tab 和 space 缩进
swift-excessive-force-unwrapswiftwarning文件包含过多强制解包 (!)默认: 5
java-resource-leakjavawarning资源分配后未使用 try-with-resources
java-sync-non-finaljavawarningsynchronized 使用了非 final 变量
kotlin-global-scopekotlinwarningGlobalScope.launch/async 不绑定生命周期
kotlin-run-blockingkotlinwarningrunBlocking 会阻塞当前线程
rust-excessive-unwraprustwarning文件包含过多 .unwrap()默认: 3
rust-excessive-unsaferustwarning文件包含过多 unsafe默认: 3
dart-setstate-after-disposedartwarningsetState 调用未检查 mounted 状态
dart-excessive-latedartwarning过多 late 非 final 变量无初始值默认: 3

Layer 2:AST 语义规则

基于 Tree-sitter 解析的语义级检查,检测结构性代码质量问题。

规则 ID级别说明默认阈值
ast_class_bloatwarning类方法数过多20
ast_method_complexitywarning方法圈复杂度过高15
ast_method_too_longwarning方法行数过长80
ast_deep_nestingwarning方法嵌套过深5
ast_deep_inheritancewarning继承链过深4
ast_wide_protocol_conformancewarning单类遵守协议过多5
ast_god_classwarningGod Class(方法 >30 且属性 >15)methods: 30, properties: 15
ast_singleton_abuseinfo文件中过多单例模式2
ast_assign_object_propertywarningObjC assign 修饰对象类型属性
ast_missing_nonatomicinfoObjC 属性缺少 nonatomic
ast_mutable_public_collectionwarningObjC 公开可变集合属性
ast_missing_weakifywarningObjC block 捕获 self 未使用 weakify

Layer 3:跨文件规则

跨文件关联分析,检测文件间的结构性问题。

规则 ID语言级别说明
objc-cross-file-duplicate-categoryobjcwarningCategory 跨文件重复声明
js-circular-importjs, tswarning直接双向循环依赖(A→B 且 B→A)
java-duplicate-class-namejava, kotlininfo同名类在多个文件中定义
go-multiple-initgoinfo同 package 多文件都有 init()
swift-cross-file-extension-conflictswiftwarningExtension 方法跨文件冲突

规则统计

检测层规则数覆盖语言
Layer 0 正则45ObjC · Swift · JS/TS · Python · Java · Kotlin · Go · Dart · Rust
Layer 1 代码级14ObjC · JS/TS · Swift · Java · Kotlin · Go · Python · Rust · Dart
Layer 2 AST12通用(所有 Tree-sitter 支持的语言)
Layer 3 跨文件5ObjC · JS/TS · Java/Kotlin · Go · Swift
合计7610 语言

Released under the MIT License.