Module: RSpec::Covers::SourceRange

Defined in:
lib/rspec/covers/source_range.rb

Class Method Summary collapse

Class Method Details

.ast_last_line(callable) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/rspec/covers/source_range.rb', line 12

def ast_last_line(callable)
  return unless defined?(RubyVM::AbstractSyntaxTree)

  RubyVM::AbstractSyntaxTree.of(callable).last_lineno
rescue ArgumentError, RuntimeError, TypeError
  nil
end

.last_line(callable) ⇒ Object



8
9
10
# File 'lib/rspec/covers/source_range.rb', line 8

def last_line(callable)
  ast_last_line(callable) || method_source_last_line(callable)
end

.method_source_last_line(callable) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rspec/covers/source_range.rb', line 20

def method_source_last_line(callable)
  source_location = callable.source_location
  return unless source_location

  require "method_source"
  return unless callable.respond_to?(:source)

  source_location.last + callable.source.lines.length - 1
rescue LoadError, ArgumentError
  nil
rescue StandardError => error
  raise unless defined?(MethodSource::SourceNotFoundError) && error.is_a?(MethodSource::SourceNotFoundError)

  nil
end