如何在CodeQL中排除测试文件?现有查询未正确过滤测试文件
调整CodeQL查询以排除测试文件
你的现有查询存在核心问题:没有将正则表达式字面量t与文件f建立关联,导致where条件对目标元素t完全不起作用,测试文件中的结果自然会被保留。
以下是几种针对性的调整方案:
方案1:关联元素并覆盖常见测试文件名规则
修正元素关联关系,同时匹配Ruby项目中常见的测试文件命名(如含spec/test关键词、特定后缀):
import codeql.ruby.AST from RegExpLiteral t, File f where t.getFile() = f // 建立正则表达式与所属文件的关联 and not ( f.getBaseName().regexpMatch("spec") or f.getBaseName().regexpMatch("test") or f.getBaseName().endsWith("_spec.rb") or f.getBaseName().endsWith("_test.rb") ) select t
方案2:通过文件路径排除测试目录
如果测试文件集中存放在spec/或test/目录下,直接检查文件路径更高效:
import codeql.ruby.AST from RegExpLiteral t, File f where t.getFile() = f and not f.getPath().regexpMatch("(spec|test)/") select t
方案3:使用CodeQL内置的测试文件判定逻辑
Ruby的CodeQL库提供了现成的测试文件判断方法,覆盖绝大多数项目的测试文件模式:
import codeql.ruby.AST import codeql.ruby.File from RegExpLiteral t where not t.getFile().isTestFile() select t
关键提示
- 所有方案的核心是建立目标元素与文件的关联,否则文件过滤条件无法作用到你要筛选的正则表达式字面量上。
- 根据项目实际的测试文件命名/存放规则选择方案,内置的
isTestFile()是最省心的选择。
内容的提问来源于stack exchange,提问作者Kakashi77
相关产品推荐
相关产品推荐

