Class: RSpec::Core::Formatters::HtmlSnippetExtractor Private
- Inherits:
-
Object
- Object
- RSpec::Core::Formatters::HtmlSnippetExtractor
- Defined in:
- lib/rspec/core/formatters/html_snippet_extractor.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Extracts code snippets by looking at the backtrace of the passed error and applies synax highlighting and line numbers using html.
Constant Summary collapse
- @@converter =
This classvariable is part of a private API. You should avoid using this classvariable if possible, as it may be removed or be changed in the future.
rubocop:disable Style/ClassVars
NullConverter
Instance Method Summary collapse
-
#lines_around(file, line) ⇒ String
private
Extract lines of code centered around a particular line within a source file.
-
#post_process(highlighted, offending_line) ⇒ String
private
Adds line numbers to all lines and highlights the line where the failure occurred using html
span
tags. -
#snippet(backtrace) ⇒ String
private
Extract lines of code corresponding to a backtrace.
-
#snippet_for(error_line) ⇒ String
private
Create a snippet from a line of code.
Instance Method Details
#lines_around(file, line) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Extract lines of code centered around a particular line within a source file.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/rspec/core/formatters/html_snippet_extractor.rb', line 80 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) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Adds line numbers to all lines and highlights the line where the
failure occurred using html span
tags.
104 105 106 107 108 109 110 111 112 |
# File 'lib/rspec/core/formatters/html_snippet_extractor.rb', line 104 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) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Extract lines of code corresponding to a backtrace.
45 46 47 48 49 |
# File 'lib/rspec/core/formatters/html_snippet_extractor.rb', line 45 def snippet(backtrace) raw_code, line = snippet_for(backtrace[0]) highlighted = @@converter.convert(raw_code) post_process(highlighted, line) end |
#snippet_for(error_line) ⇒ String
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Create a snippet from a line of code.
61 62 63 64 65 66 67 68 69 |
# File 'lib/rspec/core/formatters/html_snippet_extractor.rb', line 61 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 |