Skip to content

Commit 1d3982a

Browse files
author
Pascal Zumkehr
committed
add :ignore_errors option
1 parent b021b4a commit 1d3982a

File tree

4 files changed

+94
-36
lines changed

4 files changed

+94
-36
lines changed

lib/coderay/scanners/bash.rb

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,7 @@ def scan_tokens tokens, options
151151
kind = :plain
152152
elsif match = scan(/.+/)
153153
# this shouldn't be :reserved for highlighting bad matches
154-
kind = :error
155-
match = ">>>>>#{match}<<<<<"
154+
match, kind = handle_error(match, options)
156155
end
157156
elsif @state == :quote
158157
if (match = scan(/\\.?/))
@@ -179,9 +178,8 @@ def scan_tokens tokens, options
179178
else match = scan(/.+/)
180179
# this shouldn't be
181180
#kind = :reserved
182-
#raise match
183-
match = ">>>>>#{match}<<<<<"
184-
kind = :error
181+
#raise match
182+
match, kind = handle_error(match, options)
185183
end
186184
end
187185

@@ -191,6 +189,15 @@ def scan_tokens tokens, options
191189

192190
tokens
193191
end
192+
193+
194+
def handle_error(match, options)
195+
if options[:ignore_errors]
196+
[match, :plain]
197+
else
198+
[">>>>>#{match}<<<<<", :error]
199+
end
200+
end
194201

195202
end
196203
end

lib/coderay/scanners/erb_bash.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class ErbBash < RHTML
1111
def setup
1212
super
1313
# Scan Bash instead of HTML template
14-
@html_scanner = CodeRay.scanner :bash, :tokens => @tokens, :keep_tokens => true
14+
@html_scanner = CodeRay.scanner :bash, @options.merge(:tokens => @tokens, :keep_tokens => true)
1515
end
1616
end
1717
end

test/erb_bash.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22

33
echo "Parsed at <%= Time.now %>"
44
echo "Executed at `Date`"
5+
command 'open quote
6+
other_command

test/test.rb

Lines changed: 79 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,84 @@
1616
class TestErbBash < Test::Unit::TestCase
1717
def test_0010_ErbBash
1818
eb_file = File.join($current_dir, "erb_bash.sh")
19-
assert_equal( CodeRay.scan(File.read(eb_file), :erb_bash),
20-
[["#!/bin/sh", :directive],
21-
["\n", :end_line],
22-
["\n", :end_line],
23-
["echo", :method],
24-
[" ", :space],
25-
[:open, :string],
26-
["\"", :delimiter],
27-
["Parsed at ", :content],
28-
[:open, :inline],
29-
["<%=", :inline_delimiter],
30-
[" ", :space],
31-
["Time", :constant],
32-
[".", :operator],
33-
["now", :ident],
34-
[" ", :space],
35-
["%>", :inline_delimiter],
36-
[:close, :inline],
37-
["\"", :delimiter],
38-
[:close, :string],
39-
["\n", :end_line],
40-
["echo", :method],
41-
[" ", :space],
42-
[:open, :string],
43-
["\"", :delimiter],
44-
["Executed at `Date`", :content],
45-
["\"", :delimiter],
46-
[:close, :string],
47-
["\n", :end_line]]
48-
)
19+
assert_equal(
20+
[["#!/bin/sh", :directive],
21+
["\n", :end_line],
22+
["\n", :end_line],
23+
["echo", :method],
24+
[" ", :space],
25+
[:open, :string],
26+
["\"", :delimiter],
27+
["Parsed at ", :content],
28+
[:open, :inline],
29+
["<%=", :inline_delimiter],
30+
[" ", :space],
31+
["Time", :constant],
32+
[".", :operator],
33+
["now", :ident],
34+
[" ", :space],
35+
["%>", :inline_delimiter],
36+
[:close, :inline],
37+
["\"", :delimiter],
38+
[:close, :string],
39+
["\n", :end_line],
40+
["echo", :method],
41+
[" ", :space],
42+
[:open, :string],
43+
["\"", :delimiter],
44+
["Executed at `Date`", :content],
45+
["\"", :delimiter],
46+
[:close, :string],
47+
["\n", :end_line],
48+
["command", :method],
49+
[" ", :space],
50+
[">>>>>'open quote<<<<<", :error],
51+
["\n", :end_line],
52+
["other_command", :ident],
53+
["\n", :end_line]
54+
],
55+
CodeRay.scan(File.read(eb_file), :erb_bash) )
4956
end
57+
58+
def test_0011_ErbBash_Ignoring_Errors
59+
eb_file = File.join($current_dir, "erb_bash.sh")
60+
assert_equal(
61+
[["#!/bin/sh", :directive],
62+
["\n", :end_line],
63+
["\n", :end_line],
64+
["echo", :method],
65+
[" ", :space],
66+
[:open, :string],
67+
["\"", :delimiter],
68+
["Parsed at ", :content],
69+
[:open, :inline],
70+
["<%=", :inline_delimiter],
71+
[" ", :space],
72+
["Time", :constant],
73+
[".", :operator],
74+
["now", :ident],
75+
[" ", :space],
76+
["%>", :inline_delimiter],
77+
[:close, :inline],
78+
["\"", :delimiter],
79+
[:close, :string],
80+
["\n", :end_line],
81+
["echo", :method],
82+
[" ", :space],
83+
[:open, :string],
84+
["\"", :delimiter],
85+
["Executed at `Date`", :content],
86+
["\"", :delimiter],
87+
[:close, :string],
88+
["\n", :end_line],
89+
["command", :method],
90+
[" ", :space],
91+
["'open quote", :plain],
92+
["\n", :end_line],
93+
["other_command", :ident],
94+
["\n", :end_line]
95+
],
96+
CodeRay.scan(File.read(eb_file), :erb_bash, :ignore_errors => true))
97+
end
98+
5099
end

0 commit comments

Comments
 (0)