如何识别自定义 COP 中的全局 Rails 设置?
How do I identify out the global Rails settings in a custom COP?
我的警察:
# lib/rubocop/cop/myproject/my_cop.rb
require 'rubocop'
module RuboCop
module Cop
module MyProject
class MyCop < RuboCop::Cop::Cop
# ...
end
end
end
end
这位警察需要了解一些全局设置 Rails。例如,Rails.logger.log_level
但我收到错误:
1) undefined method 'logger' for RuboCop::Cop::Rails:Module
- 当我调用 Rails.logger.log_level
2) uninitialized constant Rails
- 当我调用 ::Rails.logger.log_level
这可以实现还是愚蠢的想法?
Rubocop 是一个 static 代码分析器。这意味着当您使用 运行 rubocop
命令时,它不会加载任何 ruby 环境,包括 Rails。它只读取 ruby 个文件并将其作为文本文件进行分析。
所以简短的回答是:不,它不能用 Rubocop 实现。
您可以选择:
# lib/rubocop/cop/myproject/my_cop.rb
require 'rubocop'
require_relative '../../../../../config/environment'
module RuboCop
module Cop
module MyProject
class MyCop < RuboCop::Cop::Cop
# ...
end
end
end
end
并调用 ::Rails.logger.level
我的警察:
# lib/rubocop/cop/myproject/my_cop.rb
require 'rubocop'
module RuboCop
module Cop
module MyProject
class MyCop < RuboCop::Cop::Cop
# ...
end
end
end
end
这位警察需要了解一些全局设置 Rails。例如,Rails.logger.log_level
但我收到错误:
1) undefined method 'logger' for RuboCop::Cop::Rails:Module
- 当我调用 Rails.logger.log_level
2) uninitialized constant Rails
- 当我调用 ::Rails.logger.log_level
这可以实现还是愚蠢的想法?
Rubocop 是一个 static 代码分析器。这意味着当您使用 运行 rubocop
命令时,它不会加载任何 ruby 环境,包括 Rails。它只读取 ruby 个文件并将其作为文本文件进行分析。
所以简短的回答是:不,它不能用 Rubocop 实现。
您可以选择:
# lib/rubocop/cop/myproject/my_cop.rb
require 'rubocop'
require_relative '../../../../../config/environment'
module RuboCop
module Cop
module MyProject
class MyCop < RuboCop::Cop::Cop
# ...
end
end
end
end
并调用 ::Rails.logger.level