Skip to content

Commit ffbf15d

Browse files
authored
fix: Remove dependency on @babel/traverse to fix linting issues (#314)
* Remove dependency on @babel/traverse to fix linting issues * Allow text in children of Text components
1 parent 7fdaedc commit ffbf15d

File tree

4 files changed

+121
-38
lines changed

4 files changed

+121
-38
lines changed

lib/rules/no-raw-text.js

+36-20
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,42 @@
55

66
'use strict';
77

8-
const { default: traverse } = require('@babel/traverse');
9-
10-
const elementName = (node, scope) => {
11-
const identifiers = [];
12-
13-
traverse(node, {
14-
JSXOpeningElement({ node: element }) {
15-
traverse(element, {
16-
JSXIdentifier({ node: identifier }) {
17-
if (identifier.parent.type === 'JSXOpeningElement'
18-
|| identifier.parent.type === 'JSXMemberExpression') {
19-
identifiers.push(identifier.name);
20-
}
21-
},
22-
}, scope);
23-
},
24-
}, scope);
8+
const elementName = (node) => {
9+
const reversedIdentifiers = [];
10+
if (
11+
node.type === 'JSXElement'
12+
&& node.openingElement.type === 'JSXOpeningElement'
13+
) {
14+
let object = node.openingElement.name;
15+
while (object.type === 'JSXMemberExpression') {
16+
if (object.property.type === 'JSXIdentifier') {
17+
reversedIdentifiers.push(object.property.name);
18+
}
19+
object = object.object;
20+
}
21+
22+
if (object.type === 'JSXIdentifier') {
23+
reversedIdentifiers.push(object.name);
24+
}
25+
}
26+
27+
return reversedIdentifiers.reverse().join('.');
28+
};
29+
30+
const hasAllowedParent = (parent, allowedElements) => {
31+
let curNode = parent;
32+
33+
while (curNode) {
34+
if (curNode.type === 'JSXElement') {
35+
const name = elementName(curNode);
36+
if (allowedElements.includes(name)) {
37+
return true;
38+
}
39+
}
40+
curNode = curNode.parent;
41+
}
2542

26-
return identifiers.join('.');
43+
return false;
2744
};
2845

2946
function create(context) {
@@ -49,8 +66,7 @@ function create(context) {
4966

5067
const hasOnlyLineBreak = (value) => /^[\r\n\t\f\v]+$/.test(value.replace(/ /g, ''));
5168

52-
const scope = context.getScope();
53-
const getValidation = (node) => !allowedElements.includes(elementName(node.parent, scope));
69+
const getValidation = (node) => !hasAllowedParent(node.parent, allowedElements);
5470

5571
return {
5672
Literal(node) {

0 commit comments

Comments
 (0)