Class: RSpec::Core::Formatters::SnippetExtractor

### Home Classes Methods

### In Files

- lib/rspec/core/formatters/snippet_extractor.rb

### Parent

Object

### Namespace

- CLASS RSpec::Core::Formatters::SnippetExtractor::CoderayConverter
- CLASS RSpec::Core::Formatters::SnippetExtractor::NullConverter

### Methods

- #lines_around
- #post_process
- #snippet
- #snippet_for

### Class/Module Index

Quicksearch

- RSpec
- RSpec::Core
- RSpec::Core::AnonymousExampleGroup
- RSpec::Core::Backports
- RSpec::Core::Backports::Random
- RSpec::Core::Backports::Random::Implementation
- RSpec::Core::Backports::Random::MT19937
- RSpec::Core::BacktraceFormatter
- RSpec::Core::Configuration
- RSpec::Core::Configuration::DeprecationReporterBuffer
- RSpec::Core::Configuration::ExposeCurrentExample
- RSpec::Core::Configuration::MustBeConfiguredBeforeExampleGroupsError
- RSpec::Core::ConfigurationOptions
- RSpec::Core::DRbOptions
- RSpec::Core::DRbRunner
- RSpec::Core::DSL
- RSpec::Core::DSL::RSpec
- RSpec::Core::Example
- RSpec::Core::Example::ExecutionResult
- RSpec::Core::Example::Procsy
- RSpec::Core::ExampleGroup
- RSpec::Core::ExclusionRules
- RSpec::Core::FilterManager
- RSpec::Core::FilterRules
- RSpec::Core::FilterableItemRepository
- RSpec::Core::FilterableItemRepository::QueryOptimized
- RSpec::Core::FilterableItemRepository::UpdateOptimized
- RSpec::Core::FlatMap
- RSpec::Core::Formatters
- RSpec::Core::Formatters::BaseFormatter
- RSpec::Core::Formatters::BaseTextFormatter
- RSpec::Core::Formatters::ConsoleCodes
- RSpec::Core::Formatters::DeprecationFormatter
- RSpec::Core::Formatters::DeprecationFormatter::DelayedPrinter
- RSpec::Core::Formatters::DeprecationFormatter::FileStream
- RSpec::Core::Formatters::DeprecationFormatter::ImmediatePrinter
- RSpec::Core::Formatters::DeprecationFormatter::RaiseErrorStream
- RSpec::Core::Formatters::DocumentationFormatter
- RSpec::Core::Formatters::Helpers
- RSpec::Core::Formatters::HtmlFormatter
- RSpec::Core::Formatters::HtmlPrinter
- RSpec::Core::Formatters::JsonFormatter
- RSpec::Core::Formatters::Loader
- RSpec::Core::Formatters::ProfileFormatter
- RSpec::Core::Formatters::ProgressFormatter
- RSpec::Core::Formatters::Protocol
- RSpec::Core::Formatters::SnippetExtractor
- RSpec::Core::Formatters::SnippetExtractor::CoderayConverter
- RSpec::Core::Formatters::SnippetExtractor::NullConverter
- RSpec::Core::HashImitatable
- RSpec::Core::HashImitatable::ClassMethods
- RSpec::Core::Hooks
- RSpec::Core::Hooks::AfterContextHook
- RSpec::Core::Hooks::AfterHook
- RSpec::Core::Hooks::AroundHook
- RSpec::Core::Hooks::BeforeHook
- RSpec::Core::Hooks::Hook
- RSpec::Core::Hooks::HookCollections
- RSpec::Core::InclusionRules
- RSpec::Core::LegacyExampleGroupHash
- RSpec::Core::MemoizedHelpers
- RSpec::Core::MemoizedHelpers::ClassMethods
- RSpec::Core::MemoizedHelpers::ContextHookMemoizedHash
- RSpec::Core::MemoizedHelpers::ContextHookMemoizedHash::After
- RSpec::Core::MemoizedHelpers::ContextHookMemoizedHash::Before
- RSpec::Core::Metadata
- RSpec::Core::Metadata::ExampleGroupHash
- RSpec::Core::Metadata::ExampleHash
- RSpec::Core::Metadata::HashPopulator
- RSpec::Core::MetadataFilter
- RSpec::Core::MinitestAssertionsAdapter
- RSpec::Core::MockingAdapters
- RSpec::Core::MockingAdapters::Flexmock
- RSpec::Core::MockingAdapters::Mocha
- RSpec::Core::MockingAdapters::Null
- RSpec::Core::MockingAdapters::RR
- RSpec::Core::MockingAdapters::RSpec
- RSpec::Core::Notifications
- RSpec::Core::Notifications::DeprecationNotification
- RSpec::Core::Notifications::ExampleNotification
- RSpec::Core::Notifications::ExamplesNotification
- RSpec::Core::Notifications::FailedExampleNotification
- RSpec::Core::Notifications::NullColorizer
- RSpec::Core::Notifications::NullNotification
- RSpec::Core::Notifications::PendingExampleFailedAsExpectedNotification
- RSpec::Core::Notifications::PendingExampleFixedNotification
- RSpec::Core::Notifications::PendingExampleNotificationMethods
- RSpec::Core::Notifications::ProfileNotification
- RSpec::Core::Notifications::SeedNotification
- RSpec::Core::Notifications::SkippedExampleNotification
- RSpec::Core::Notifications::SummaryNotification
- RSpec::Core::NullReporter
- RSpec::Core::Ordering
- RSpec::Core::Ordering::ConfigurationManager
- RSpec::Core::Ordering::Custom
- RSpec::Core::Ordering::Identity
- RSpec::Core::Ordering::Random
- RSpec::Core::Ordering::Registry
- RSpec::Core::Parser
- RSpec::Core::Pending
- RSpec::Core::Pending::PendingExampleFixedError
- RSpec::Core::Pending::SkipDeclaredInExample
- RSpec::Core::ProjectInitializer
- RSpec::Core::RakeTask
- RSpec::Core::RandomNumberGenerator
- RSpec::Core::Reporter
- RSpec::Core::RubyProject
- RSpec::Core::Runner
- RSpec::Core::Sandbox
- RSpec::Core::SharedContext
- RSpec::Core::SharedExampleGroup
- RSpec::Core::SharedExampleGroup::Registry
- RSpec::Core::SharedExampleGroup::TopLevelDSL
- RSpec::Core::SharedExampleGroupInclusionStackFrame
- RSpec::Core::SharedExampleGroupModule
- RSpec::Core::SuiteHookContext
- RSpec::Core::TestUnitAssertionsAdapter
- RSpec::Core::Time
- RSpec::Core::Version
- RSpec::Core::Warnings
- RSpec::Core::World
- RSpec::ExampleGroups
- Object

No matching classes.

# RSpec::Core::Formatters::SnippetExtractor

@api private

Extracts code snippets by looking at the backtrace of the passed error and applies synax highlighting and line numbers using html.

### Public Instance Methods

lines_around(file, line) click to toggle source

@api private

Extract lines of code centered around a particular line within a source file.

@param file [String] filename @param line [Fixnum] line number @return [String] lines around the target line within the file (2 above

    and 1 below).

    # File lib/rspec/core/formatters/snippet_extractor.rb, line 75
    def lines_around(file, line)
      if File.file?(file)
        lines = File.read(file).split("\n")
        min = [0, line - 3].max
        max = [line + 1, lines.length - 1].min
        selected_lines = []
        selected_lines.join("\n")
        lines[min..max].join("\n")
      else
        "# Couldn't get snippet for #{file}"
      end
    rescue SecurityError
      "# Couldn't get snippet for #{file}"
    end

post_process(highlighted, offending_line) click to toggle source

@api private

Adds line numbers to all lines and highlights the line where the failure occurred using html `span` tags.

@param highlighted [String] syntax-highlighted snippet surrounding the

    offending line of code

@param offending_line [Fixnum] line where failure occured @return [String] completed snippet

    # File lib/rspec/core/formatters/snippet_extractor.rb, line 99
    def post_process(highlighted, offending_line)
      new_lines = []
      highlighted.split("\n").each_with_index do |line, i|
        new_line = "<span class=\"linenum\">#{offending_line + i - 2}</span>#{line}"
        new_line = "<span class=\"offending\">#{new_line}</span>" if i == 2
        new_lines << new_line
      end
      new_lines.join("\n")
    end

snippet(backtrace) click to toggle source

@api private

Extract lines of code corresponding to a backtrace.

@param backtrace [String] the backtrace from a test failure @return [String] highlighted code snippet indicating where the test

    failure occured

@see post_process

    # File lib/rspec/core/formatters/snippet_extractor.rb, line 41
    def snippet(backtrace)
      raw_code, line = snippet_for(backtrace[0])
      highlighted = @@converter.convert(raw_code)
      post_process(highlighted, line)
    end

snippet_for(error_line) click to toggle source

@api private

Create a snippet from a line of code.

@param error_line [String] file name with line number (i.e.

    'foo_spec.rb:12')

@return [String] lines around the target line within the file

@see lines_around

    # File lib/rspec/core/formatters/snippet_extractor.rb, line 56
    def snippet_for(error_line)
      if error_line =~ /(.*):(\d+)/
        file = Regexp.last_match[1]
        line = Regexp.last_match[2].to_i
        [lines_around(file, line), line]
      else
        ["# Couldn't get snippet for #{error_line}", 1]
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.