Skip to content

Commit 336edee

Browse files
authoredNov 22, 2021
ERB: Better embedding of Ruby (#3192)
1 parent 7b34e65 commit 336edee

File tree

6 files changed

+80
-49
lines changed

6 files changed

+80
-49
lines changed
 

‎components/prism-erb.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
(function (Prism) {
22

3-
Prism.languages.erb = Prism.languages.extend('ruby', {});
4-
Prism.languages.insertBefore('erb', 'comment', {
3+
Prism.languages.erb = {
54
'delimiter': {
6-
pattern: /^<%=?|%>$/,
5+
pattern: /^(\s*)<%=?|%>(?=\s*$)/,
6+
lookbehind: true,
77
alias: 'punctuation'
8+
},
9+
'ruby': {
10+
pattern: /\s*\S[\s\S]*/,
11+
alias: 'language-ruby',
12+
inside: Prism.languages.ruby
813
}
9-
});
14+
};
1015

1116
Prism.hooks.add('before-tokenize', function (env) {
1217
var erbPattern = /<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s(?:[^\r\n]|[\r\n](?!=end))*[\r\n]=end)+?%>/g;

‎components/prism-erb.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎tests/languages/erb+haml/erb_inclusion.test

+15-16
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,27 @@
1111
["filter-erb", [
1212
["filter-name", ":erb"],
1313
["text", [
14-
["operator", "<"],
15-
["operator", "%"],
16-
["operator", "="],
17-
" render ",
18-
["variable", "@products"],
19-
["operator", "||"],
20-
["string", ["\"empty_list\""]],
21-
["operator", "%"],
22-
["operator", ">"]
14+
["delimiter", "<%="],
15+
["ruby", [
16+
" render ",
17+
["variable", "@products"],
18+
["operator", "||"],
19+
["string", ["\"empty_list\""]]
20+
]],
21+
["delimiter", "%>"]
2322
]]
2423
]],
2524
["punctuation", "~"],
2625
["filter-erb", [
2726
["filter-name", ":erb"],
2827
["text", [
29-
["operator", "<"],
30-
["operator", "%"],
31-
["operator", "="],
32-
" render ",
33-
["variable", "@products"],
34-
["operator", "||"],
35-
["string", ["\"empty_list\""]],
28+
["delimiter", "<%="],
29+
["ruby", [
30+
" render ",
31+
["variable", "@products"],
32+
["operator", "||"],
33+
["string", ["\"empty_list\""]]
34+
]],
3635
["delimiter", "%>"]
3736
]]
3837
]]

‎tests/languages/erb/erb_feature.test

+19-13
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,36 @@
77
[
88
["erb", [
99
["delimiter", "<%"],
10-
["comment", "# comment "],
10+
["ruby", [
11+
["comment", "# comment "]
12+
]],
1113
["delimiter", "%>"]
1214
]],
1315
["erb", [
1416
["delimiter", "<%="],
15-
" render ",
16-
["variable", "@products"],
17-
["operator", "||"],
18-
["string", ["\"empty_list\""]],
17+
["ruby", [
18+
" render ",
19+
["variable", "@products"],
20+
["operator", "||"],
21+
["string", ["\"empty_list\""]]
22+
]],
1923
["delimiter", "%>"]
2024
]],
2125
["erb", [
2226
["delimiter", "<%"],
23-
["variable", "@books"],
24-
["punctuation", "."],
25-
["keyword", "each"],
26-
["keyword", "do"],
27-
["operator", "|"],
28-
"book",
29-
["operator", "|"],
27+
["ruby", [
28+
["variable", "@books"],
29+
["punctuation", "."],
30+
["keyword", "each"],
31+
["keyword", "do"],
32+
["operator", "|"],
33+
"book",
34+
["operator", "|"]
35+
]],
3036
["delimiter", "%>"]
3137
]]
3238
]
3339

3440
----------------------------------------------------
3541

36-
Checks for ERB tags.
42+
Checks for ERB tags.

‎tests/languages/erb/erb_in_markup_feature.test

+17-10
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,37 @@ ___ERB1___<%= 1 %>___ERB2___<%= 2 %>
1515
["punctuation", "\""],
1616
["erb", [
1717
["delimiter", "<%="],
18-
["builtin", "Time"],
19-
["punctuation", "."],
20-
"now",
21-
["punctuation", "."],
22-
"strftime",
23-
["punctuation", "("],
24-
["string", ["'%A'"]],
25-
["punctuation", ")"],
18+
["ruby", [
19+
["builtin", "Time"],
20+
["punctuation", "."],
21+
"now",
22+
["punctuation", "."],
23+
"strftime",
24+
["punctuation", "("],
25+
["string", ["'%A'"]],
26+
["punctuation", ")"]
27+
]],
2628
["delimiter", "%>"]
2729
]],
2830
["punctuation", "\""]
2931
]],
3032
["punctuation", ">"]
3133
]],
34+
3235
"\r\n___ERB1___",
3336
["erb", [
3437
["delimiter", "<%="],
35-
["number", "1"],
38+
["ruby", [
39+
["number", "1"]
40+
]],
3641
["delimiter", "%>"]
3742
]],
3843
"___ERB2___",
3944
["erb", [
4045
["delimiter", "<%="],
41-
["number", "2"],
46+
["ruby", [
47+
["number", "2"]
48+
]],
4249
["delimiter", "%>"]
4350
]]
4451
]

‎tests/languages/erb/issue1767.test

+19-5
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,42 @@
1818
[
1919
["erb", [
2020
["delimiter", "<%"],
21-
["comment", "# this is a block comment "],
21+
["ruby", [
22+
["comment", "# this is a block comment "]
23+
]],
2224
["delimiter", "%>"]
2325
]],
2426
["erb", [
2527
["delimiter", "<%"],
26-
["comment", "=begin %>\r\n\tblock comment\r\n\t(both lines of both the begin and end tags must be at the start of their lines)\r\n<%\r\n=end"],
28+
["ruby", [
29+
["comment", "=begin %>\r\n\tblock comment\r\n\t(both lines of both the begin and end tags must be at the start of their lines)\r\n<%\r\n=end"]
30+
]],
2731
["delimiter", "%>"]
2832
]],
2933

3034
["erb", [
3135
["delimiter", "<%"],
32-
["comment", "# this is not "],
36+
["ruby", [
37+
["comment", "# this is not "]
38+
]],
3339
["delimiter", "%>"]
3440
]],
3541
["erb", [
3642
["delimiter", "<%"],
37-
["operator", "="], ["keyword", "begin"], ["delimiter", "%>"]
43+
["ruby", [
44+
["operator", "="],
45+
["keyword", "begin"]
46+
]],
47+
["delimiter", "%>"]
3848
]],
3949
"\r\n\tnot a comment\r\n\t",
4050
["erb", [
4151
["delimiter", "<%"],
42-
["operator", "="], ["keyword", "end"], ["delimiter", "%>"]
52+
["ruby", [
53+
["operator", "="],
54+
["keyword", "end"]
55+
]],
56+
["delimiter", "%>"]
4357
]]
4458
]
4559

0 commit comments

Comments
 (0)
Please sign in to comment.