Merge branch 'fix-rubocop-ee-module-injection-detection' into 'master'
Fix detecting nested EE constants in RuboCop See merge request gitlab-org/gitlab-ce!24430
This commit is contained in:
commit
941f95ec7c
|
@ -11,9 +11,13 @@ module RuboCop
|
|||
|
||||
METHODS = Set.new(%i[include extend prepend]).freeze
|
||||
|
||||
def_node_matcher :ee_const?, <<~PATTERN
|
||||
(const (const _ :EE) _)
|
||||
PATTERN
|
||||
def ee_const?(node)
|
||||
line = node.location.expression.source_line
|
||||
|
||||
# We use `match?` here instead of RuboCop's AST matching, as this makes
|
||||
# it far easier to handle nested constants such as `EE::Foo::Bar::Baz`.
|
||||
line.match?(/(\s|\()(::)?EE::/)
|
||||
end
|
||||
|
||||
def on_send(node)
|
||||
return unless METHODS.include?(node.children[1])
|
||||
|
|
|
@ -19,6 +19,41 @@ describe RuboCop::Cop::InjectEnterpriseEditionModule do
|
|||
SOURCE
|
||||
end
|
||||
|
||||
it 'does not flag the use of `prepend EEFoo` in the middle of a file' do
|
||||
expect_no_offenses(<<~SOURCE)
|
||||
class Foo
|
||||
prepend EEFoo
|
||||
end
|
||||
SOURCE
|
||||
end
|
||||
|
||||
it 'flags the use of `prepend EE::Foo::Bar` in the middle of a file' do
|
||||
expect_offense(<<~SOURCE)
|
||||
class Foo
|
||||
prepend EE::Foo::Bar
|
||||
^^^^^^^^^^^^^^^^^^^^ Injecting EE modules must be done on the last line of this file, outside of any class or module definitions
|
||||
end
|
||||
SOURCE
|
||||
end
|
||||
|
||||
it 'flags the use of `prepend(EE::Foo::Bar)` in the middle of a file' do
|
||||
expect_offense(<<~SOURCE)
|
||||
class Foo
|
||||
prepend(EE::Foo::Bar)
|
||||
^^^^^^^^^^^^^^^^^^^^^ Injecting EE modules must be done on the last line of this file, outside of any class or module definitions
|
||||
end
|
||||
SOURCE
|
||||
end
|
||||
|
||||
it 'flags the use of `prepend EE::Foo::Bar::Baz` in the middle of a file' do
|
||||
expect_offense(<<~SOURCE)
|
||||
class Foo
|
||||
prepend EE::Foo::Bar::Baz
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^ Injecting EE modules must be done on the last line of this file, outside of any class or module definitions
|
||||
end
|
||||
SOURCE
|
||||
end
|
||||
|
||||
it 'flags the use of `prepend ::EE` in the middle of a file' do
|
||||
expect_offense(<<~SOURCE)
|
||||
class Foo
|
||||
|
|
Loading…
Reference in New Issue