You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Rubocop仅扫描bin/scripts子文件夹排除其余内容

问题说明
  • 项目存在bin目录,目录内包含其他子目录、顶层文件,以及需要保留扫描的bin/scripts子文件夹
  • 需求:仅扫描bin/scripts/**/*路径下的所有文件,忽略bin目录下其余所有内容
  • 原有配置会无差别排除bin目录下全部内容,无法满足需求,原有配置如下:
AllCops:
  TargetRubyVersion: 3.1.2
  NewCops: enable
  Exclude:
    - "bin/**/*"
问题原因

RuboCop的路径匹配规则中,Exclude优先级高于Include,直接配置bin/**/*会匹配bin目录下所有层级的文件,后续单独添加include规则也无法将排除的路径重新加入扫描范围。

解决方案

使用扩展glob的否定语法,排除bin目录下除scripts子目录外的所有内容即可,修改后的配置如下:

AllCops:
  TargetRubyVersion: 3.1.2
  NewCops: enable
  Exclude:
    # 排除bin根目录下的所有顶层文件
    - "bin/*"
    # 排除bin下除scripts目录外所有子目录的全部内容
    - "bin/!(scripts)/**/*"

注:!(pattern)是glob扩展语法,代表匹配除括号内指定模式之外的任意内容,RuboCop默认支持该语法。

如果你的RuboCop版本较旧不支持上述否定语法,可以用逐字符匹配的方式实现相同效果:

AllCops:
  TargetRubyVersion: 3.1.2
  NewCops: enable
  Exclude:
    - "bin/*"
    - "bin/[^s]*/**/*"
    - "bin/s[^c]*/**/*"
    - "bin/sc[^r]*/**/*"
    - "bin/scr[^i]*/**/*"
    - "bin/scri[^p]*/**/*"
    - "bin/scrip[^t]*/**/*"
    - "bin/scripts?*/**/*"

这套规则会依次排除首字母不是s、首字母s第二个字母不是c、前两个字母sc第三个字母不是r……直到排除所有名字不是scripts、以及名字以scripts开头但长度更长的目录,最终只保留bin/scripts目录下的内容不被排除。

内容的提问来源于stack exchange,提问作者Indigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:09:10