Skip to content

Commit e613166

Browse files
committed
Fixes an issue where ts-plugin crashes on invalid TSX data. Closes #7
1 parent f99bd6a commit e613166

File tree

16 files changed

+38
-5
lines changed

16 files changed

+38
-5
lines changed

src/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ export default () => {
387387
}
388388
}
389389

390-
if (vChildren && vChildren !== null && childrenResults.foundText) {
390+
if (vChildren && childrenResults.foundText) {
391391
vChildren = transformTextNodes(vChildren)
392392
}
393393

@@ -576,7 +576,7 @@ export default () => {
576576
propsPropertyAssignments.push(
577577
factory.createPropertyAssignment(
578578
factory.createStringLiteral(svgAttributes[propName]),
579-
getValue(initializer, visitor, factory)
579+
initializer ? getValue(initializer, visitor, factory) : factory.createTrue()
580580
)
581581
)
582582
} else {
@@ -614,10 +614,10 @@ export default () => {
614614
childrenKnown = true
615615
break
616616
case 'ref':
617-
ref = getValue(initializer, visitor, factory)
617+
ref = initializer ? getValue(initializer, visitor, factory) : null
618618
break
619619
case 'key':
620-
key = getValue(initializer, visitor, factory)
620+
key = initializer ? getValue(initializer, visitor, factory) : null
621621
break
622622
case PROP_ReCreate:
623623
hasReCreateFlag = true

src/utils/getValue.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ export default function getValue(node, visitor, factory) {
55
return factory.createStringLiteral(node.text);
66
}
77
if (node.kind === SyntaxKind.JsxExpression) {
8+
if (!node.expression) {
9+
return factory.createNull();
10+
}
811
return visitor(node.expression);
912
}
1013
}

src/utils/isNodeNull.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@ export default function isNodeNull(node) {
44
if (!node) {
55
return true;
66
}
7+
8+
if (node.kind === SyntaxKind.NullKeyword) {
9+
return true;
10+
}
11+
712
if (
813
node.kind === SyntaxKind.ArrayLiteralExpression &&
914
node.elements.length === 0
1015
) {
1116
return true;
1217
}
18+
1319
return node.text === "null";
1420
}

tests/cases/empty.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div ref={}/>

tests/cases/empty_2.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div ref={} a={1} className="test"/>

tests/cases/empty_3.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<NewComponent ref={} a={} className={} class={} a={} b c/>

tests/cases/empty_4.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<svg key={} dominantBaseline clipRule={} capHeight={3}/>

tests/references/empty.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var $inferno = require("inferno");
2+
var createVNode = $inferno.createVNode;
3+
createVNode(1, "div");

tests/references/empty_2.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var $inferno = require("inferno");
2+
var createVNode = $inferno.createVNode;
3+
createVNode(1, "div", "test", null, 1, { "a": 1 });

tests/references/empty_3.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var $inferno = require("inferno");
2+
var createComponentVNode = $inferno.createComponentVNode;
3+
createComponentVNode(2, NewComponent, { "a": null, "className": null, "class": null, "a": null, "b": true, "c": true });

0 commit comments

Comments
 (0)