Skip to content

Commit 28ad6ac

Browse files
committed
refactor: inline expression ignoring
use negative lookbehind so we only evaluate non-ignored expressions
1 parent 7711830 commit 28ad6ac

File tree

3 files changed

+17
-28
lines changed

3 files changed

+17
-28
lines changed

lib/index.js

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const revertBackupedLocals = require('./backup').revert
1010
const placeholders = require('./placeholders')
1111

1212
const delimitersSettings = []
13-
let conditionals, switches, loops, scopes, ignored, ignoredBefore, ignoredAfter, toReplace, ignoredNodeExpression, ignoredAttrsExpression
13+
let conditionals, switches, loops, scopes, ignored, delimitersReplace, unescapeDelimitersReplace
1414

1515
/**
1616
* @description Creates a set of local variables within the loop, and evaluates all nodes within the loop, returning their contents
@@ -124,12 +124,12 @@ module.exports = function postHTMLExpressions (options) {
124124
let before = escapeRegexpString(options.delimiters[0])
125125
let after = escapeRegexpString(options.delimiters[1])
126126

127-
const delimitersRegexp = new RegExp(`${before}(.+?)${after}`, 'g')
127+
const delimitersRegexp = new RegExp(`(?<!@)${before}(.+?)${after}`, 'g')
128128

129129
before = escapeRegexpString(options.unescapeDelimiters[0])
130130
after = escapeRegexpString(options.unescapeDelimiters[1])
131131

132-
const unescapeDelimitersRegexp = new RegExp(`${before}(.+?)${after}`, 'g')
132+
const unescapeDelimitersRegexp = new RegExp(`(?<!@)${before}(.+?)${after}`, 'g')
133133

134134
// make array of delimiters
135135
const delimiters = [
@@ -147,13 +147,9 @@ module.exports = function postHTMLExpressions (options) {
147147
delimitersSettings[0] = delimiters[1]
148148
delimitersSettings[1] = delimiters[0]
149149
}
150-
151-
152-
ignoredBefore = delimitersSettings[1].text[0]
153-
ignoredAfter = delimitersSettings[1].text[1]
154-
toReplace = new RegExp(`@${ignoredBefore}`, 'g')
155-
ignoredNodeExpression = new RegExp(`@${ignoredBefore}(.+?)${ignoredAfter}`, 'g')
156-
ignoredAttrsExpression = new RegExp(`.*@${ignoredBefore}(.+?)${ignoredAfter}`)
150+
151+
delimitersReplace = new RegExp(`@${delimitersSettings[1].text[0]}`, 'g')
152+
unescapeDelimitersReplace = new RegExp(`@${delimitersSettings[0].text[0]}`, 'g')
157153

158154
// kick off the parsing
159155
return walk.bind(null, { locals: options.locals })
@@ -183,16 +179,10 @@ function walk (opts, nodes) {
183179

184180
// if we have a string, match and replace it
185181
if (typeof node === 'string') {
186-
// if node contains ignored expression delimiter, output as-is
187-
if (ignoredNodeExpression.test(node)) {
188-
node = node.replace(toReplace, ignoredBefore)
189-
190-
m.push(node)
191-
192-
return m
193-
}
194-
195182
node = placeholders(node, ctx, delimitersSettings)
183+
node = node
184+
.replace(unescapeDelimitersReplace, delimitersSettings[0].text[0])
185+
.replace(delimitersReplace, delimitersSettings[1].text[0])
196186

197187
m.push(node)
198188

@@ -202,11 +192,10 @@ function walk (opts, nodes) {
202192
// if not, we have an object, so we need to run the attributes and contents
203193
if (node.attrs) {
204194
for (const key in node.attrs) {
205-
if (ignoredAttrsExpression.test(node.attrs[key])) {
206-
node.attrs[key] = node.attrs[key].replace(toReplace, ignoredBefore)
207-
} else {
208-
node.attrs[key] = placeholders(node.attrs[key], ctx, delimitersSettings)
209-
}
195+
node.attrs[key] = placeholders(node.attrs[key], ctx, delimitersSettings)
196+
node.attrs[key] = node.attrs[key]
197+
.replace(unescapeDelimitersReplace, delimitersSettings[0].text[0])
198+
.replace(delimitersReplace, delimitersSettings[1].text[0])
210199
}
211200
}
212201

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{{ foo }}
2-
<p data-username="{{ user.name }}" data-user-id="user-{{ user.id }}">
3-
Here's one {{ variable }} and here's {{ another }}.
2+
<p data-username="{{ user.name }}" data-user-id="user-{{ user.id }}-bar-{{ foo }}">
3+
Here's one {{ variable }} and here's {{ another }}. And some bar.
44
</p>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
@{{ foo }}
2-
<p data-username="@{{ user.name }}" data-user-id="user-@{{ user.id }}">
3-
Here's one @{{ variable }} and here's @{{ another }}.
2+
<p data-username="@{{ user.name }}" data-user-id="user-@{{ user.id }}-{{ foo }}-@{{ foo }}">
3+
Here's one @{{ variable }} and here's @{{ another }}. And some {{ foo }}.
44
</p>

0 commit comments

Comments
 (0)