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:
Rémy Coutable 2019-01-16 18:10:38 +00:00
commit 941f95ec7c
2 changed files with 42 additions and 3 deletions

View File

@ -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])

View File

@ -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