2017-05-23 38 views
1

我想阻止在我们的代码库中使用unscoped。 rubocop中是否存在允许指定关键字的linter?如果不是,如果我想完成它,我是否必须写一个自定义警察?如何让Rubocop检查特定方法/关键字的用法?

+1

'unscoped'是一个方法 - 不是关键字。关键字是对解析器具有特定意义的标识符,例如'if,else,case,do,when' – max

+0

在看到[此问题]后(https://github.com/bbatsov/rubocop/issues/2939)我想答案是写一个自定义的警察。 – BoraMa

回答

0

我的同行帮助了我。看起来我们需要写一个自定义的警察。

module RuboCop 
    module Cop 
    module Hired 
     class Unscoped < Cop 
     MSG = "Avoid using `unscoped`." 

     def_node_matcher :unscoped?, <<-END 
      (send _ :unscoped) 
     END 

     def on_send(node) 
      return unless unscoped?(node) 
      add_offense(node, :expression, MSG % node.source) 
     end 
     end 
    end 
    end 
end 

把它塞进一个文件夹中,好比说lib/cops/然后将其添加到.rubocop.yml

require: 
- ./lib/cops/<whatever_you_called_the_file>.rb 

看到http://www.rubydoc.info/github/bbatsov/RuboCop/RuboCop/NodePattern

+0

看起来不错! :-)注意,如果你省略了最后一个参数,'MSG'会自动传递给'#add_offense'。 – Drenmi