Skip to content

Commit ab79bf2

Browse files
committed
fix(ruby) non-interpolable strings
1 parent 4af42d1 commit ab79bf2

File tree

6 files changed

+106
-29
lines changed

6 files changed

+106
-29
lines changed

CHANGES.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ Core Grammars:
4141
- fix(swift) - Fixed syntax highlighting for class func/var declarations [guuido]
4242
- fix(yaml) - Fixed wrong escaping behavior in single quoted strings [guuido]
4343
- enh(nim) - Add `concept` and `defer` to list of Nim keywords [Jake Leahy]
44-
44+
- fix(ruby) - Don't highlighting interpolation in single quoted strings [Boris Verkhovskiy][]
45+
4546
New Grammars:
4647

4748
- added 3rd party TTCN-3 grammar to SUPPORTED_LANGUAGES [Osmocom][]
@@ -85,7 +86,7 @@ CONTRIBUTORS
8586
[guuido]: https://github.com/guuido
8687
[clsource]: https://github.com/clsource
8788
[Jake Leahy]: https://github.com/ire4ever1190
88-
89+
[Boris Verkhovskiy]: https://github.com/verhovsky
8990

9091
## Version 11.10.0
9192

src/languages/ruby.js

+87-23
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ export default function(hljs) {
1515
/\b([A-Z]+[a-z0-9]+)+/,
1616
// ends in caps
1717
/\b([A-Z]+[a-z0-9]+)+[A-Z]+/,
18-
)
19-
;
18+
);
2019
const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\w+)*/)
2120
// very popular ruby built-ins that one might even assume
2221
// are actual keywords (despite that not being the case)
@@ -124,54 +123,119 @@ export default function(hljs) {
124123
};
125124
const STRING = {
126125
className: 'string',
127-
contains: [
128-
hljs.BACKSLASH_ESCAPE,
129-
SUBST
130-
],
126+
contains: [ hljs.BACKSLASH_ESCAPE ],
131127
variants: [
132128
{
133129
begin: /'/,
134130
end: /'/
135131
},
136132
{
137-
begin: /"/,
138-
end: /"/
139-
},
140-
{
141-
begin: /`/,
142-
end: /`/
143-
},
144-
{
145-
begin: /%[qQwWx]?\(/,
133+
begin: /%q\(/,
146134
end: /\)/
147135
},
148136
{
149-
begin: /%[qQwWx]?\[/,
137+
begin: /%q\[/,
150138
end: /\]/
151139
},
152140
{
153-
begin: /%[qQwWx]?\{/,
141+
begin: /%q\{/,
154142
end: /\}/
155143
},
156144
{
157-
begin: /%[qQwWx]?</,
145+
begin: /%q</,
158146
end: />/
159147
},
160148
{
161-
begin: /%[qQwWx]?\//,
149+
begin: /%q\//,
162150
end: /\//
163151
},
164152
{
165-
begin: /%[qQwWx]?%/,
153+
begin: /%q%/,
166154
end: /%/
167155
},
168156
{
169-
begin: /%[qQwWx]?-/,
157+
begin: /%q-/,
170158
end: /-/
171159
},
172160
{
173-
begin: /%[qQwWx]?\|/,
174-
end: /\|/
161+
begin: /"/,
162+
end: /"/,
163+
contains: [
164+
hljs.BACKSLASH_ESCAPE,
165+
SUBST
166+
]
167+
},
168+
{
169+
begin: /`/,
170+
end: /`/,
171+
contains: [
172+
hljs.BACKSLASH_ESCAPE,
173+
SUBST
174+
]
175+
},
176+
{
177+
begin: /%[QwWx]?\(/,
178+
end: /\)/,
179+
contains: [
180+
hljs.BACKSLASH_ESCAPE,
181+
SUBST
182+
]
183+
},
184+
{
185+
begin: /%[QwWx]?\[/,
186+
end: /\]/,
187+
contains: [
188+
hljs.BACKSLASH_ESCAPE,
189+
SUBST
190+
]
191+
},
192+
{
193+
begin: /%[QwWx]?\{/,
194+
end: /\}/,
195+
contains: [
196+
hljs.BACKSLASH_ESCAPE,
197+
SUBST
198+
]
199+
},
200+
{
201+
begin: /%[QwWx]?</,
202+
end: />/,
203+
contains: [
204+
hljs.BACKSLASH_ESCAPE,
205+
SUBST
206+
]
207+
},
208+
{
209+
begin: /%[QwWx]?\//,
210+
end: /\//,
211+
contains: [
212+
hljs.BACKSLASH_ESCAPE,
213+
SUBST
214+
]
215+
},
216+
{
217+
begin: /%[QwWx]?%/,
218+
end: /%/,
219+
contains: [
220+
hljs.BACKSLASH_ESCAPE,
221+
SUBST
222+
]
223+
},
224+
{
225+
begin: /%[QwWx]?-/,
226+
end: /-/,
227+
contains: [
228+
hljs.BACKSLASH_ESCAPE,
229+
SUBST
230+
]
231+
},
232+
{
233+
begin: /%[QwWx]?\|/,
234+
end: /\|/,
235+
contains: [
236+
hljs.BACKSLASH_ESCAPE,
237+
SUBST
238+
]
175239
},
176240
// in the following expressions, \B in the beginning suppresses recognition of ?-sequences
177241
// where ? is the last character of a preceding identifier, as in: `func?4`

test/markup/erb/default.expect.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66

77
&lt;%-</span><span class="language-ruby"> available_things = things.select(&amp;<span class="hljs-symbol">:available?</span>) </span><span class="language-xml">-%&gt;
88
&lt;%%</span><span class="language-ruby">- x = <span class="hljs-number">1</span> + <span class="hljs-number">2</span> -</span><span class="language-xml">%%&gt;
9-
&lt;%%</span><span class="language-ruby"> value = <span class="hljs-string">&#x27;real string <span class="hljs-subst">#{<span class="hljs-variable">@value</span>}</span>&#x27;</span> </span><span class="language-xml">%%&gt;
9+
&lt;%%</span><span class="language-ruby"> value = <span class="hljs-string">&quot;real string <span class="hljs-subst">#{<span class="hljs-variable">@value</span>}</span>&quot;</span> </span><span class="language-xml">%%&gt;
1010
&lt;%%</span><span class="language-ruby">= available_things.inspect </span><span class="language-xml">%%&gt;
1111
</span>

test/markup/erb/default.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
<%- available_things = things.select(&:available?) -%>
88
<%%- x = 1 + 2 -%%>
9-
<%% value = 'real string #{@value}' %%>
9+
<%% value = "real string #{@value}" %%>
1010
<%%= available_things.inspect %%>

test/markup/ruby/strings.expect.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,10 @@ c = <span class="hljs-string">?\u{00AF09}</span>
2727
c = <span class="hljs-string">?\u{0AF09}</span>
2828
c = <span class="hljs-string">?\u{AF9}</span>
2929
c = <span class="hljs-string">?\u{F9}</span>
30-
c = <span class="hljs-string">?\u{F}</span>
30+
c = <span class="hljs-string">?\u{F}</span>
31+
32+
<span class="hljs-comment"># Interpolation</span>
33+
c = <span class="hljs-string">&#x27;a#{1}b&#x27;</span> <span class="hljs-comment">#=&gt; &quot;a\#{1}b&quot;</span>
34+
c = <span class="hljs-string">&quot;a<span class="hljs-subst">#{<span class="hljs-number">1</span>}</span>b&quot;</span> <span class="hljs-comment">#=&gt; &quot;a1b&quot;</span>
35+
c = <span class="hljs-string">%q(a#{1}b)</span> <span class="hljs-comment">#=&gt; &quot;a\#{1}b&quot;</span>
36+
c = <span class="hljs-string">%Q{a<span class="hljs-subst">#{<span class="hljs-number">1</span>}</span>b}</span> <span class="hljs-comment">#=&gt; &quot;a1b&quot;</span>

test/markup/ruby/strings.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,10 @@ c = ?\u{00AF09}
2727
c = ?\u{0AF09}
2828
c = ?\u{AF9}
2929
c = ?\u{F9}
30-
c = ?\u{F}
30+
c = ?\u{F}
31+
32+
# Interpolation
33+
c = 'a#{1}b' #=> "a\#{1}b"
34+
c = "a#{1}b" #=> "a1b"
35+
c = %q(a#{1}b) #=> "a\#{1}b"
36+
c = %Q{a#{1}b} #=> "a1b"

0 commit comments

Comments
 (0)