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