Skip to content

Commit aef77fa

Browse files
committed
fix 314
1 parent 6ce1dd5 commit aef77fa

File tree

2 files changed

+35
-26
lines changed

2 files changed

+35
-26
lines changed

lib/rules/no-raw-text.js

Lines changed: 35 additions & 18 deletions
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) {

tests/lib/rules/no-raw-text.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,6 @@ const tests = {
105105
`,
106106
options: [{ skip: ['Title.Text'] }],
107107
},
108-
{
109-
code: `
110-
const Title = ({ children }) => (<Title.Text>{children}</Title.Text>);
111-
Title.Text = ({ children }) => (<Text>{children}</Text>);
112-
<Title.Text>This is the title</Title.Text>
113-
`,
114-
options: [{ skip: ['Title.*'] }],
115-
},
116108
{
117109
code: `
118110
export default class MyComponent extends Component {

0 commit comments

Comments
 (0)