Class: RSpectre::Linter

Inherits:
Object
  • Object
show all
Defined in:
lib/rspectre/linter.rb,
lib/rspectre/linter/unused_let.rb,
lib/rspectre/linter/unused_subject.rb,
lib/rspectre/linter/unused_shared_setup.rb

Direct Known Subclasses

UnusedLet, UnusedSharedSetup, UnusedSubject

Defined Under Namespace

Classes: UnusedLet, UnusedSharedSetup, UnusedSubject

Constant Summary collapse

SOURCE_FILES =

rubocop:disable Style/MutableConstant

{}

Class Method Summary collapse

Class Method Details

.example_groupObject



7
8
9
# File 'lib/rspectre/linter.rb', line 7

def self.example_group
  RSpec::Core::ExampleGroup
end

.node_map(file) ⇒ Object



32
33
34
# File 'lib/rspectre/linter.rb', line 32

def self.node_map(file)
  SOURCE_FILES[file] ||= SourceMap.parse(file)
end

.prepend_behavior(scope, method_name) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/rspectre/linter.rb', line 40

def self.prepend_behavior(scope, method_name)
  original_method = scope.instance_method(method_name)

  scope.__send__(:define_method, method_name) do |*args, &block|
    yield

    original_method.bind(self).(*args, &block)
  end
end

.record(node) ⇒ Object



36
37
38
# File 'lib/rspectre/linter.rb', line 36

def self.record(node)
  TRACKER.record(self::TAG, node)
end

.register(selector, locations) ⇒ Object

rubocop:disable Metrics/MethodLength



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rspectre/linter.rb', line 11

def self.register(selector, locations) # rubocop:disable Metrics/MethodLength
  location = locations.first

  file = File.realpath(location.path)
  line = location.lineno

  return unless file.to_s.start_with?(File.realpath(Dir.pwd))

  raw_node = node_map(file).find_method(selector, line)

  if raw_node
    node = RSpectre::Node.new(file, line, raw_node)
    TRACKER.register(self::TAG, node)
    if block_given?
      yield node
    else
      return node
    end
  end
end