缓存

包含数百甚至数千个文件的庞大项目可能需要很长时间才能检查,但 RuboCop 具有减轻此问题的功能。有一个缓存机制可以存储在检查的文件中发现的违规信息。

缓存有效性

以后的运行将能够检索此信息并显示存储的信息,而不是再次检查文件。如果文件的缓存仍然有效,则将执行此操作,如果以下内容没有更改,则缓存有效:

  • 检查文件的內容

  • 文件的 RuboCop 配置

  • 传递给 rubocop 的选项,有一些例外情况与报告哪些违规行为无关

  • 用于调用 rubocop 的 Ruby 版本

  • rubocop 程序的版本(或更准确地说,调用 rubocop 程序的源代码中的任何内容)

启用和禁用缓存

如果配置参数AllCops: UseCachetrue,则启用缓存功能,默认情况下为true。命令行选项--cache false可用于关闭缓存,从而覆盖配置参数。如果在本地.rubocop.yml中将AllCops: UseCache设置为false,则--cache true将覆盖该设置。

缓存路径

默认情况下,缓存存储在$XDG_CACHE_HOME/$UID/rubocop_cache(如果设置了$XDG_CACHE_HOME)或$HOME/.cache/rubocop_cache/(如果未设置)中。

可以通过多种方式将根目录设置为不同的路径(从最高优先级到最低优先级)

  • --cache-root命令行选项

  • $RUBOCOP_CACHE_ROOT环境变量

  • AllCops: CacheRootDirectory配置参数

设置缓存根目录的一个原因可能是存在一个网络磁盘,不同机器上的用户希望在该磁盘上拥有一个通用的 RuboCop 缓存。另一个原因可能是持续集成系统允许目录(而不是临时目录)在运行之间保存,或者系统默认缓存某些文件夹。

缓存修剪

每次文件发生更改时,其违规将存储在缓存中的一个新键下。这意味着缓存将持续增长,直到我们采取措施阻止它为止。配置参数AllCops: MaxFilesInCache设置了一个限制,当缓存中的文件数量超过该限制时,最旧的文件将自动从缓存中删除。