Skip to content

Commit b526e8c

Browse files
Ruby: Optimized regex and string patterns (#2354)
1 parent b4ed5de commit b526e8c

File tree

2 files changed

+17
-61
lines changed

2 files changed

+17
-61
lines changed

Diff for: components/prism-ruby.js

+16-60
Original file line numberDiff line numberDiff line change
@@ -39,36 +39,14 @@
3939
Prism.languages.insertBefore('ruby', 'keyword', {
4040
'regex': [
4141
{
42-
pattern: /%r([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/,
43-
greedy: true,
44-
inside: {
45-
'interpolation': interpolation
46-
}
47-
},
48-
{
49-
pattern: /%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,
50-
greedy: true,
51-
inside: {
52-
'interpolation': interpolation
53-
}
54-
},
55-
{
56-
// Here we need to specifically allow interpolation
57-
pattern: /%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,
58-
greedy: true,
59-
inside: {
60-
'interpolation': interpolation
61-
}
62-
},
63-
{
64-
pattern: /%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,
65-
greedy: true,
66-
inside: {
67-
'interpolation': interpolation
68-
}
69-
},
70-
{
71-
pattern: /%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,
42+
pattern: RegExp(/%r/.source + '(?:' + [
43+
/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/.source,
44+
/\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/.source,
45+
// Here we need to specifically allow interpolation
46+
/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/.source,
47+
/\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/.source,
48+
/<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/.source
49+
].join('|') + ')'),
7250
greedy: true,
7351
inside: {
7452
'interpolation': interpolation
@@ -102,36 +80,14 @@
10280

10381
Prism.languages.ruby.string = [
10482
{
105-
pattern: /%[qQiIwWxs]?([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,
106-
greedy: true,
107-
inside: {
108-
'interpolation': interpolation
109-
}
110-
},
111-
{
112-
pattern: /%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,
113-
greedy: true,
114-
inside: {
115-
'interpolation': interpolation
116-
}
117-
},
118-
{
119-
// Here we need to specifically allow interpolation
120-
pattern: /%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,
121-
greedy: true,
122-
inside: {
123-
'interpolation': interpolation
124-
}
125-
},
126-
{
127-
pattern: /%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,
128-
greedy: true,
129-
inside: {
130-
'interpolation': interpolation
131-
}
132-
},
133-
{
134-
pattern: /%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,
83+
pattern: RegExp(/%[qQiIwWxs]?/.source + '(?:' + [
84+
/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,
85+
/\((?:[^()\\]|\\[\s\S])*\)/.source,
86+
// Here we need to specifically allow interpolation
87+
/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/.source,
88+
/\[(?:[^\[\]\\]|\\[\s\S])*\]/.source,
89+
/<(?:[^<>\\]|\\[\s\S])*>/.source
90+
].join('|') + ')'),
13591
greedy: true,
13692
inside: {
13793
'interpolation': interpolation

Diff for: components/prism-ruby.min.js

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

0 commit comments

Comments
 (0)