2017-05-23 35 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