Skip to content

Commit

Permalink
Merge pull request #943 from rspec/issue-932
Browse files Browse the repository at this point in the history
Replace syntax gem with coderay (now with fixtures)
  • Loading branch information
soulcutter committed Jun 17, 2013
2 parents f835cdf + 7b37110 commit dee12fc
Show file tree
Hide file tree
Showing 19 changed files with 555 additions and 499 deletions.
1 change: 1 addition & 0 deletions Changelog.md
Expand Up @@ -7,6 +7,7 @@ Breaking Changes for 3.0.0:
Enhancements

* Clean up some internal use of Enumerable methods. (Vipul A M)
* Replace unmaintained syntax gem with coderay gem. (Xavier Shay)

Bug fix

Expand Down
19 changes: 14 additions & 5 deletions lib/rspec/core/formatters/snippet_extractor.rb
Expand Up @@ -5,11 +5,21 @@ module Formatters
#
# Extracts code snippets by looking at the backtrace of the passed error and applies synax highlighting and line numbers using html.
class SnippetExtractor
class NullConverter; def convert(code, pre); code; end; end
class NullConverter
def convert(code)
%Q(#{code}\n<span class="comment"># Install the coderay gem to get syntax highlighting</span>)
end
end

class CoderayConverter
def convert(code)
CodeRay.scan(code, :ruby).html(:line_numbers => false)
end
end

begin
require 'syntax/convertors/html'
@@converter = Syntax::Convertors::HTML.for_syntax "ruby"
require 'coderay'
@@converter = CoderayConverter.new
rescue LoadError
@@converter = NullConverter.new
end
Expand All @@ -24,8 +34,7 @@ class NullConverter; def convert(code, pre); code; end; end
# @see #post_process
def snippet(backtrace)
raw_code, line = snippet_for(backtrace[0])
highlighted = @@converter.convert(raw_code, false)
highlighted << "\n<span class=\"comment\"># gem install syntax to get syntax highlighting</span>" if @@converter.is_a?(NullConverter)
highlighted = @@converter.convert(raw_code)
post_process(highlighted, line)
end

Expand Down
3 changes: 2 additions & 1 deletion rspec-core.gemspec
Expand Up @@ -31,7 +31,8 @@ Gem::Specification.new do |s|

s.add_development_dependency "ZenTest", "~> 4.6"
s.add_development_dependency "nokogiri", "1.5.2"
s.add_development_dependency "syntax", "1.0.0"
s.add_development_dependency "coderay", "~> 1.0.9"


s.add_development_dependency "mocha", "~> 0.13.0"
s.add_development_dependency "rr", "~> 1.0.4"
Expand Down
38 changes: 25 additions & 13 deletions spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html
Expand Up @@ -317,13 +317,17 @@ <h1>RSpec Code Examples</h1>
<div class="failure" id="failure_1">
<div class="message"><pre>RSpec::Core::Pending::PendingExampleFixedError</pre></div>
<div class="backtrace"><pre>./spec/rspec/core/resources/formatter_specs.rb:18:in `(root)'
./spec/support/sandboxed_mock_space.rb:33:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:33:in `run'
./spec/support/sandboxed_mock_space.rb:72:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:32:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">16</span> <span class="ident">context</span> <span class="punct">&quot;</span><span class="string">with content that would pass</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="linenum">17</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">fails</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">18</span> <span class="ident">pending</span> <span class="keyword">do</span></span>
<span class="linenum">19</span> <span class="ident">expect</span><span class="punct">(</span><span class="number">1</span><span class="punct">).</span><span class="ident">to</span> <span class="ident">eq</span><span class="punct">(</span><span class="number">1</span><span class="punct">)</span>
./spec/support/sandboxed_mock_space.rb:32:in `run'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `generated_html'
./spec/rspec/core/formatters/html_formatter_spec.rb:73:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:72:in `Formatters'
./spec/support/sandboxed_mock_space.rb:38:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">16</span> context <span class="string"><span class="delimiter">&quot;</span><span class="content">with content that would pass</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="linenum">17</span> it <span class="string"><span class="delimiter">&quot;</span><span class="content">fails</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">18</span> pending <span class="keyword">do</span></span>
<span class="linenum">19</span> expect(<span class="integer">1</span>).to eq(<span class="integer">1</span>)
<span class="linenum">20</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
Expand Down Expand Up @@ -353,12 +357,16 @@ <h1>RSpec Code Examples</h1>
(compared using ==)
</pre></div>
<div class="backtrace"><pre>./spec/rspec/core/resources/formatter_specs.rb:33:in `(root)'
./spec/support/sandboxed_mock_space.rb:33:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:33:in `run'
./spec/support/sandboxed_mock_space.rb:72:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:32:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">31</span><span class="ident">describe</span> <span class="punct">&quot;</span><span class="string">failing spec</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">fails</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">33</span> <span class="ident">expect</span><span class="punct">(</span><span class="number">1</span><span class="punct">).</span><span class="ident">to</span> <span class="ident">eq</span><span class="punct">(</span><span class="number">2</span><span class="punct">)</span></span>
./spec/support/sandboxed_mock_space.rb:32:in `run'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `generated_html'
./spec/rspec/core/formatters/html_formatter_spec.rb:73:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:72:in `Formatters'
./spec/support/sandboxed_mock_space.rb:38:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">31</span>describe <span class="string"><span class="delimiter">&quot;</span><span class="content">failing spec</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="linenum">32</span> it <span class="string"><span class="delimiter">&quot;</span><span class="content">fails</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">33</span> expect(<span class="integer">1</span>).to eq(<span class="integer">2</span>)</span>
<span class="linenum">34</span> <span class="keyword">end</span>
<span class="linenum">35</span><span class="keyword">end</span></code></pre>
</div>
Expand All @@ -378,9 +386,13 @@ <h1>RSpec Code Examples</h1>
<div class="message"><pre>foo</pre></div>
<div class="backtrace"><pre>(erb):1:in `result'
./spec/rspec/core/resources/formatter_specs.rb:41:in `(root)'
./spec/support/sandboxed_mock_space.rb:33:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:33:in `run'
./spec/support/sandboxed_mock_space.rb:72:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:32:in `sandboxed'</pre></div>
./spec/support/sandboxed_mock_space.rb:32:in `run'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `generated_html'
./spec/rspec/core/formatters/html_formatter_spec.rb:73:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:72:in `Formatters'
./spec/support/sandboxed_mock_space.rb:38:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">-1</span><span class="comment"># Couldn't get snippet for (erb)</span></code></pre>
</div>
</dd>
Expand Down
62 changes: 31 additions & 31 deletions spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html
Expand Up @@ -324,13 +324,13 @@ <h1>RSpec Code Examples</h1>
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `__script__'
kernel/common/hash18.rb:195:in `fetch'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `__script__'
kernel/common/io.rb:217:in `open'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `__script__'
kernel/common/dir.rb:92:in `chdir'
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `__script__'
kernel/common/eval18.rb:45:in `instance_eval'
kernel/bootstrap/proc.rb:22:in `call'
kernel/common/eval18.rb:45:in `instance_eval'
Expand All @@ -341,13 +341,13 @@ <h1>RSpec Code Examples</h1>
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/proc.rb:22:in `call'
kernel/loader.rb:698:in `run_at_exits'
kernel/loader.rb:718:in `epilogue'
kernel/loader.rb:851:in `main'</pre></div>
<pre class="ruby"><code><span class="linenum">16</span> <span class="ident">context</span> <span class="punct">&quot;</span><span class="string">with content that would pass</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="linenum">17</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">fails</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">18</span> <span class="ident">pending</span> <span class="keyword">do</span></span>
<span class="linenum">19</span> <span class="ident">expect</span><span class="punct">(</span><span class="number">1</span><span class="punct">).</span><span class="ident">to</span> <span class="ident">eq</span><span class="punct">(</span><span class="number">1</span><span class="punct">)</span>
kernel/loader.rb:702:in `run_at_exits'
kernel/loader.rb:722:in `epilogue'
kernel/loader.rb:855:in `main'</pre></div>
<pre class="ruby"><code><span class="linenum">16</span> context <span class="string"><span class="delimiter">&quot;</span><span class="content">with content that would pass</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="linenum">17</span> it <span class="string"><span class="delimiter">&quot;</span><span class="content">fails</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">18</span> pending <span class="keyword">do</span></span>
<span class="linenum">19</span> expect(<span class="integer">1</span>).to eq(<span class="integer">1</span>)
<span class="linenum">20</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
Expand Down Expand Up @@ -383,13 +383,13 @@ <h1>RSpec Code Examples</h1>
./spec/support/sandboxed_mock_space.rb:32:in `run'
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `__script__'
kernel/common/hash18.rb:195:in `fetch'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `__script__'
kernel/common/io.rb:217:in `open'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `__script__'
kernel/common/dir.rb:92:in `chdir'
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `__script__'
kernel/common/eval18.rb:45:in `instance_eval'
kernel/bootstrap/proc.rb:22:in `call'
kernel/common/eval18.rb:45:in `instance_eval'
Expand All @@ -400,12 +400,12 @@ <h1>RSpec Code Examples</h1>
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/proc.rb:22:in `call'
kernel/loader.rb:698:in `run_at_exits'
kernel/loader.rb:718:in `epilogue'
kernel/loader.rb:851:in `main'</pre></div>
<pre class="ruby"><code><span class="linenum">31</span><span class="ident">describe</span> <span class="punct">&quot;</span><span class="string">failing spec</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">fails</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">33</span> <span class="ident">expect</span><span class="punct">(</span><span class="number">1</span><span class="punct">).</span><span class="ident">to</span> <span class="ident">eq</span><span class="punct">(</span><span class="number">2</span><span class="punct">)</span></span>
kernel/loader.rb:702:in `run_at_exits'
kernel/loader.rb:722:in `epilogue'
kernel/loader.rb:855:in `main'</pre></div>
<pre class="ruby"><code><span class="linenum">31</span>describe <span class="string"><span class="delimiter">&quot;</span><span class="content">failing spec</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="linenum">32</span> it <span class="string"><span class="delimiter">&quot;</span><span class="content">fails</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">33</span> expect(<span class="integer">1</span>).to eq(<span class="integer">2</span>)</span>
<span class="linenum">34</span> <span class="keyword">end</span>
<span class="linenum">35</span><span class="keyword">end</span></code></pre>
</div>
Expand All @@ -424,23 +424,23 @@ <h1>RSpec Code Examples</h1>
<div class="failure" id="failure_3">
<div class="message"><pre>foo</pre></div>
<div class="backtrace"><pre>(erb):1:in `__script__'
kernel/common/block_environment.rb:75:in `call_on_instance'
kernel/common/eval.rb:75:in `eval'
/Users/jon/.rvm/rubies/rbx-head/lib/18/erb.rb:719:in `result'
kernel/common/block_environment.rb:57:in `call_on_instance'
kernel/common/eval.rb:73:in `eval'
/Users/bradley/.rvm/rubies/rbx-head-18mode/lib/18/erb.rb:719:in `result'
./spec/rspec/core/resources/formatter_specs.rb:41:in `__script__'
kernel/common/eval18.rb:45:in `instance_eval'
./spec/support/sandboxed_mock_space.rb:33:in `run'
./spec/support/sandboxed_mock_space.rb:72:in `sandboxed'
./spec/support/sandboxed_mock_space.rb:32:in `run'
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:37:in `__script__'
kernel/common/hash18.rb:195:in `fetch'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `__script__'
kernel/common/io.rb:217:in `open'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:59:in `__script__'
kernel/common/dir.rb:92:in `chdir'
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `Formatters'
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `__script__'
kernel/common/eval18.rb:45:in `instance_eval'
kernel/bootstrap/proc.rb:22:in `call'
kernel/common/eval18.rb:45:in `instance_eval'
Expand All @@ -451,9 +451,9 @@ <h1>RSpec Code Examples</h1>
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/array18.rb:18:in `map'
kernel/bootstrap/proc.rb:22:in `call'
kernel/loader.rb:698:in `run_at_exits'
kernel/loader.rb:718:in `epilogue'
kernel/loader.rb:851:in `main'</pre></div>
kernel/loader.rb:702:in `run_at_exits'
kernel/loader.rb:722:in `epilogue'
kernel/loader.rb:855:in `main'</pre></div>
<pre class="ruby"><code><span class="linenum">-1</span><span class="comment"># Couldn't get snippet for (erb)</span></code></pre>
</div>
</dd>
Expand Down
14 changes: 7 additions & 7 deletions spec/rspec/core/formatters/html_formatted-1.8.7.html
Expand Up @@ -327,10 +327,10 @@ <h1>RSpec Code Examples</h1>
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `chdir'
./spec/rspec/core/formatters/html_formatter_spec.rb:58
./spec/support/sandboxed_mock_space.rb:38:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">16</span> <span class="ident">context</span> <span class="punct">&quot;</span><span class="string">with content that would pass</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="linenum">17</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">fails</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">18</span> <span class="ident">pending</span> <span class="keyword">do</span></span>
<span class="linenum">19</span> <span class="ident">expect</span><span class="punct">(</span><span class="number">1</span><span class="punct">).</span><span class="ident">to</span> <span class="ident">eq</span><span class="punct">(</span><span class="number">1</span><span class="punct">)</span>
<pre class="ruby"><code><span class="linenum">16</span> context <span class="string"><span class="delimiter">&quot;</span><span class="content">with content that would pass</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="linenum">17</span> it <span class="string"><span class="delimiter">&quot;</span><span class="content">fails</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">18</span> pending <span class="keyword">do</span></span>
<span class="linenum">19</span> expect(<span class="integer">1</span>).to eq(<span class="integer">1</span>)
<span class="linenum">20</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
Expand Down Expand Up @@ -370,9 +370,9 @@ <h1>RSpec Code Examples</h1>
./spec/rspec/core/formatters/html_formatter_spec.rb:58:in `chdir'
./spec/rspec/core/formatters/html_formatter_spec.rb:58
./spec/support/sandboxed_mock_space.rb:38:in `sandboxed'</pre></div>
<pre class="ruby"><code><span class="linenum">31</span><span class="ident">describe</span> <span class="punct">&quot;</span><span class="string">failing spec</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">fails</span><span class="punct">&quot;</span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">33</span> <span class="ident">expect</span><span class="punct">(</span><span class="number">1</span><span class="punct">).</span><span class="ident">to</span> <span class="ident">eq</span><span class="punct">(</span><span class="number">2</span><span class="punct">)</span></span>
<pre class="ruby"><code><span class="linenum">31</span>describe <span class="string"><span class="delimiter">&quot;</span><span class="content">failing spec</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="linenum">32</span> it <span class="string"><span class="delimiter">&quot;</span><span class="content">fails</span><span class="delimiter">&quot;</span></span> <span class="keyword">do</span>
<span class="offending"><span class="linenum">33</span> expect(<span class="integer">1</span>).to eq(<span class="integer">2</span>)</span>
<span class="linenum">34</span> <span class="keyword">end</span>
<span class="linenum">35</span><span class="keyword">end</span></code></pre>
</div>
Expand Down

0 comments on commit dee12fc

Please sign in to comment.