Skip to content

Commit 952e564

Browse files
author
edvardchen
committed
refactor: add prehandler for every selector of visitor
1 parent 4d762e9 commit 952e564

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

lib/rules/no-literal-string.js

+21-4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ module.exports = {
9595
return temp;
9696
}
9797

98+
function isString(node) {
99+
return typeof node.value === 'string';
100+
}
101+
98102
const scriptVisitor = {
99103
//
100104
// ─── EXPORT AND IMPORT ───────────────────────────────────────────
@@ -162,7 +166,6 @@ module.exports = {
162166
},
163167

164168
'Property > Literal'(node) {
165-
if (visited.includes(node)) return;
166169
const { parent } = node;
167170
// if node is key of property, skip
168171
if (parent.key === node) visited.push(node);
@@ -174,14 +177,11 @@ module.exports = {
174177
},
175178

176179
'CallExpression Literal'(node) {
177-
if (visited.includes(node)) return;
178180
const parent = getNearestAncestor(node, 'CallExpression');
179181
if (isValidFunctionCall(parent)) visited.push(node);
180182
},
181183

182184
'Literal:exit'(node) {
183-
if (visited.includes(node)) return;
184-
185185
if (typeof node.value === 'string') {
186186
const trimed = node.value.trim();
187187
if (!trimed) return;
@@ -196,6 +196,23 @@ module.exports = {
196196
}
197197
}
198198
};
199+
200+
function wrapVisitor() {
201+
Object.keys(scriptVisitor).forEach(key => {
202+
const old = scriptVisitor[key];
203+
scriptVisitor[key] = node => {
204+
// make sure node is string literal
205+
if (!isString(node)) return;
206+
207+
// visited and passed linting
208+
if (visited.includes(node)) return;
209+
old(node);
210+
};
211+
});
212+
}
213+
214+
wrapVisitor();
215+
199216
return (
200217
(parserServices.defineTemplateBodyVisitor &&
201218
parserServices.defineTemplateBodyVisitor(

tests/lib/rules/no-literal-string.js

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ ruleTester.run('no-literal-string', rule, {
3535
{ code: 'require("hello");' },
3636
{ code: 'const a = require(["hello"]);' },
3737
{ code: 'const a = require(["hel" + "lo"]);' },
38+
{ code: 'const a = 1;' },
3839
{ code: 'i18n("hello");' },
3940
{ code: 'dispatch("hello");' },
4041
{ code: 'store.dispatch("hello");' },

0 commit comments

Comments
 (0)