29 lines
842 B
Ruby
29 lines
842 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module RuboCop
|
||
|
module Cop
|
||
|
class RubyInterpolationInTranslation < RuboCop::Cop::Cop
|
||
|
MSG = "Don't use ruby interpolation \#{} inside translated strings, instead use \%{}"
|
||
|
|
||
|
TRANSLATION_METHODS = ':_ :s_ :N_ :n_'
|
||
|
|
||
|
def_node_matcher :translation_method?, <<~PATTERN
|
||
|
(send nil? {#{TRANSLATION_METHODS}} $dstr ...)
|
||
|
PATTERN
|
||
|
|
||
|
def_node_matcher :plural_translation_method?, <<~PATTERN
|
||
|
(send nil? :n_ str $dstr ...)
|
||
|
PATTERN
|
||
|
|
||
|
def on_send(node)
|
||
|
interpolation = translation_method?(node) || plural_translation_method?(node)
|
||
|
return unless interpolation
|
||
|
|
||
|
interpolation.descendants.each do |possible_violation|
|
||
|
add_offense(possible_violation, message: MSG) if possible_violation.type != :str
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|