Skip to content

Commit ba9cfff

Browse files
wsabranskyJamesHenry
authored andcommitted
feat: support shorthand JSX fragments (JamesHenry#15)
1 parent 89812c3 commit ba9cfff

7 files changed

+468
-0
lines changed

lib/ast-node-types.js

+3
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,16 @@ module.exports = {
6262
ImportSpecifier: 'ImportSpecifier',
6363
JSXAttribute: 'JSXAttribute',
6464
JSXClosingElement: 'JSXClosingElement',
65+
JSXClosingFragment: 'JSXClosingFragment',
6566
JSXElement: 'JSXElement',
6667
JSXEmptyExpression: 'JSXEmptyExpression',
6768
JSXExpressionContainer: 'JSXExpressionContainer',
69+
JSXFragment: 'JSXFragment',
6870
JSXIdentifier: 'JSXIdentifier',
6971
JSXMemberExpression: 'JSXMemberExpression',
7072
JSXNamespacedName: 'JSXNamespacedName',
7173
JSXOpeningElement: 'JSXOpeningElement',
74+
JSXOpeningFragment: 'JSXOpeningFragment',
7275
JSXSpreadAttribute: 'JSXSpreadAttribute',
7376
JSXSpreadChild: 'JSXSpreadChild',
7477
JSXText: 'JSXText',

lib/convert.js

+21
Original file line numberDiff line numberDiff line change
@@ -1976,6 +1976,15 @@ module.exports = function convert(config) {
19761976

19771977
break;
19781978

1979+
case SyntaxKind.JsxFragment:
1980+
Object.assign(result, {
1981+
type: AST_NODE_TYPES.JSXFragment,
1982+
openingElement: convertChild(node.openingElement),
1983+
closingElement: convertChild(node.closingElement),
1984+
children: node.children.map(convertChild)
1985+
});
1986+
break;
1987+
19791988
case SyntaxKind.JsxSelfClosingElement: {
19801989
/**
19811990
* Convert SyntaxKind.JsxSelfClosingElement to SyntaxKind.JsxOpeningElement,
@@ -2015,6 +2024,18 @@ module.exports = function convert(config) {
20152024
});
20162025
break;
20172026

2027+
case SyntaxKind.JsxOpeningFragment:
2028+
Object.assign(result, {
2029+
type: AST_NODE_TYPES.JSXOpeningFragment,
2030+
selfClosing: false
2031+
});
2032+
break;
2033+
case SyntaxKind.JsxClosingFragment:
2034+
Object.assign(result, {
2035+
type: AST_NODE_TYPES.JSXClosingFragment
2036+
});
2037+
break;
2038+
20182039
case SyntaxKind.JsxExpression: {
20192040
const eloc = ast.getLineAndCharacterOfPosition(result.range[0] + 1);
20202041
const expression = node.expression

tests/ast-alignment/fixtures-to-test.js

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ const jsxFilesWithKnownIssues = require('../jsx-known-issues').map(f =>
1919
*/
2020
jsxFilesWithKnownIssues.push('invalid-no-tag-name');
2121

22+
/**
23+
* JSX shorthand fragments are not supported by Babylon
24+
*/
25+
jsxFilesWithKnownIssues.push('shorthand-fragment');
26+
jsxFilesWithKnownIssues.push('shorthand-fragment-with-child');
27+
2228
/**
2329
* Custom constructs/concepts used in this file:
2430
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<><div></div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<><div /></>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<></>

0 commit comments

Comments
 (0)