[Pkg-javascript-commits] [node-esprima] 01/03: New upstream version 3.1.2+ds

Julien Puydt julien.puydt at laposte.net
Wed Dec 7 16:12:03 UTC 2016


This is an automated email from the git hooks/post-receive script.

jpuydt-guest pushed a commit to branch master
in repository node-esprima.

commit 80448d4828b1348e9f4bd4a8a06c94868a6678cd
Author: Julien Puydt <julien.puydt at laposte.net>
Date:   Wed Dec 7 17:07:10 2016 +0100

    New upstream version 3.1.2+ds
---
 ChangeLog                                          |   7 +
 LICENSE.BSD                                        |   2 +-
 bin/esparse.js                                     |   2 +-
 bin/esvalidate.js                                  |   2 +-
 package.json                                       |   2 +-
 src/esprima.ts                                     |   4 +-
 src/jsx-parser.ts                                  | 111 +++++---
 src/parser.ts                                      |  21 +-
 test/api-tests.js                                  |   2 +-
 test/benchmark-parser.js                           |   2 +-
 test/benchmark-tokenizer.js                        |   2 +-
 test/browser-tests.js                              |   2 +-
 test/check-complexity.js                           |   2 +-
 test/check-version.js                              |   2 +-
 test/downstream.js                                 |   2 +-
 .../import-declaration/invalid-import-boolean.js   |   1 +
 .../invalid-import-boolean.module.json             |   1 +
 .../import-declaration/invalid-import-keyword.js   |   1 +
 .../invalid-import-keyword.module.json             |   1 +
 .../ES6/import-declaration/invalid-import-null.js  |   1 +
 .../invalid-import-null.module.json                |   1 +
 test/fixtures/JSX/attribute-empty-entity1.js       |   1 +
 ...tree.json => attribute-empty-entity1.tree.json} | 177 ++++---------
 test/fixtures/JSX/attribute-empty-entity2.js       |   1 +
 ...tree.json => attribute-empty-entity2.tree.json} | 177 ++++---------
 test/fixtures/JSX/attribute-expression.tree.json   |  20 +-
 .../fixtures/JSX/attribute-illegal-short-entity.js |   1 +
 ...on => attribute-illegal-short-entity.tree.json} | 173 ++++--------
 test/fixtures/JSX/attribute-invalid-entity.js      |   1 +
 ...ree.json => attribute-invalid-entity.tree.json} | 177 ++++---------
 test/fixtures/JSX/attribute-non-hex-entity.js      |   1 +
 ...ree.json => attribute-non-hex-entity.tree.json} | 177 ++++---------
 test/fixtures/JSX/attribute-non-numeric-entity.js  |   1 +
 ...json => attribute-non-numeric-entity.tree.json} | 177 ++++---------
 test/fixtures/JSX/attribute-primary.tree.json      |  20 +-
 test/fixtures/JSX/attribute-spread.tree.json       |  20 +-
 test/fixtures/JSX/attribute-unterminated-entity.js |   1 +
 ...son => attribute-unterminated-entity.tree.json} | 173 ++++--------
 test/fixtures/JSX/attribute-x-entity.js            |   1 +
 ...mary.tree.json => attribute-x-entity.tree.json} | 177 ++++---------
 .../JSX/container-object-expression.tree.json      |  18 --
 test/fixtures/JSX/container-series.tree.json       |  56 +---
 .../JSX/simple-expression-container.tree.json      |  20 +-
 test/fixtures/JSX/template-literal.js              |   1 +
 ...ession.tree.json => template-literal.tree.json} | 293 +++++++++++----------
 test/grammar-tests.js                              |   2 +-
 test/hostile-environment-tests.js                  |   2 +-
 test/profile.js                                    |   2 +-
 test/regression-tests.js                           |   2 +-
 test/unit-tests.js                                 |   2 +-
 test/utils/create-testcases.js                     |   2 +-
 test/utils/error-to-object.js                      |   2 +-
 test/utils/evaluate-testcase.js                    |   2 +-
 tools/fixupbundle.js                               |   2 +-
 tools/generate-fixtures.js                         |   2 +-
 55 files changed, 716 insertions(+), 1339 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 73848b1..bdfdd07 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2016-11-24: Version 3.1.2
+
+      * Ensure that import specifier is more restrictive (issue 1615)
+      * Fix duplicated JSX tokens (issue 1613)
+      * Scan template literal in a JSX expression container (issue 1622)
+      * Improve XHTML entity scanning in JSX (issue 1629)
+
 2016-10-31: Version 3.1.1
 
       * Fix assignment expression problem in an export declaration (issue 1596)
diff --git a/LICENSE.BSD b/LICENSE.BSD
index 17557ec..7a55160 100644
--- a/LICENSE.BSD
+++ b/LICENSE.BSD
@@ -1,4 +1,4 @@
-Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+Copyright JS Foundation and other contributors, https://js.foundation/
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff --git a/bin/esparse.js b/bin/esparse.js
index 42a8593..45d05fb 100755
--- a/bin/esparse.js
+++ b/bin/esparse.js
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/bin/esvalidate.js b/bin/esvalidate.js
index e1ce387..4faf760 100755
--- a/bin/esvalidate.js
+++ b/bin/esvalidate.js
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/package.json b/package.json
index eecca3d..ff1fa03 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
     "esparse": "./bin/esparse.js",
     "esvalidate": "./bin/esvalidate.js"
   },
-  "version": "3.1.1",
+  "version": "3.1.2",
   "files": [
     "bin",
     "dist/esprima.js"
diff --git a/src/esprima.ts b/src/esprima.ts
index e3f94a9..ff4538d 100644
--- a/src/esprima.ts
+++ b/src/esprima.ts
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
@@ -104,4 +104,4 @@ export function tokenize(code: string, options, delegate) {
 export { Syntax } from './syntax';
 
 // Sync with *.json manifests.
-export const version = '3.1.1';
+export const version = '3.1.2';
diff --git a/src/jsx-parser.ts b/src/jsx-parser.ts
index d317c50..c00cf6e 100644
--- a/src/jsx-parser.ts
+++ b/src/jsx-parser.ts
@@ -75,6 +75,16 @@ export class JSXParser extends Parser {
         this.nextToken();
     }
 
+    reenterJSX() {
+        this.startJSX();
+        this.expectJSX('}');
+
+        // Pop the closing '}' added from the lookahead.
+        if (this.config.tokens) {
+            this.tokens.pop();
+        }
+    }
+
     createJSXNode(): MetaJSXNode {
         this.collectComments();
         return {
@@ -92,27 +102,54 @@ export class JSXParser extends Parser {
         };
     }
 
-    scanXHTMLEntity() {
+    scanXHTMLEntity(quote: string) {
         let result = '&';
 
-        let str = '';
-        while (!this.scanner.eof()) {
-            const ch = this.scanner.source[this.scanner.index++];
-            if (ch === ';') {
-                if (str[0] === '#') {
-                    str = str.substr(1);
-                    const hex = (str[0] === 'x');
-                    const cp = hex ? parseInt('0' + str, 16) : parseInt(str, 10);
-                    result = String.fromCharCode(cp);
-                } else if (XHTMLEntities[str]) {
-                    result = XHTMLEntities[str];
-                } else {
-                    result += ch;
-                }
+        let valid = true;
+        let terminated = false;
+        let numeric = false;
+        let hex = false;
+
+        while (!this.scanner.eof() && valid && !terminated) {
+            const ch = this.scanner.source[this.scanner.index];
+            if (ch === quote) {
                 break;
             }
-            str += ch;
+            terminated = (ch === ';');
             result += ch;
+            ++this.scanner.index;
+            if (!terminated) {
+                switch (result.length) {
+                    case 2:
+                        // e.g. '{'
+                        numeric = (ch === '#');
+                        break;
+                    case 3:
+                        if (numeric) {
+                            // e.g. '&#x41;'
+                            hex = (ch === 'x');
+                            valid = hex || Character.isDecimalDigit(ch.charCodeAt(0));
+                            numeric = numeric && !hex;
+                        }
+                        break;
+                    default:
+                        valid = valid && !(numeric && !Character.isDecimalDigit(ch.charCodeAt(0)));
+                        valid = valid && !(hex && !Character.isHexDigit(ch.charCodeAt(0)));
+                        break;
+                }
+            }
+        }
+
+        if (valid && terminated && result.length > 2) {
+            // e.g. '&#x41;' becomes just '#x41'
+            const str = result.substr(1, result.length - 2);
+            if (numeric && str.length > 1) {
+                result = String.fromCharCode(parseInt(str.substr(1), 10));
+            } else if (hex && str.length > 2) {
+                result = String.fromCharCode(parseInt('0' + str.substr(1), 16));
+            } else if (!numeric && !hex && XHTMLEntities[str]) {
+                result = XHTMLEntities[str];
+            }
         }
 
         return result;
@@ -146,7 +183,7 @@ export class JSXParser extends Parser {
                 if (ch === quote) {
                     break;
                 } else if (ch === '&') {
-                    str += this.scanXHTMLEntity();
+                    str += this.scanXHTMLEntity(quote);
                 } else {
                     str += ch;
                 }
@@ -179,6 +216,18 @@ export class JSXParser extends Parser {
             };
         }
 
+        // `
+        if (cp === 96) {
+            // Only placeholder, since it will be rescanned as a real assignment expression.
+            return {
+                type: Token.Template,
+                lineNumber: this.scanner.lineNumber,
+                lineStart: this.scanner.lineStart,
+                start: this.scanner.index,
+                end: this.scanner.index
+            };
+        }
+
         // Identifer can not contain backslash (char code 92).
         if (Character.isIdentifierStart(cp) && (cp !== 92)) {
             const start = this.scanner.index;
@@ -362,14 +411,14 @@ export class JSXParser extends Parser {
         const node = this.createJSXNode();
 
         this.expectJSX('{');
-        let expression = null;
         this.finishJSX();
+
         if (this.match('}')) {
             this.tolerateError('JSX attributes must only be assigned a non-empty expression');
         }
-        expression = this.parseAssignmentExpression();
-        this.startJSX();
-        this.expectJSX('}');
+
+        const expression = this.parseAssignmentExpression();
+        this.reenterJSX();
 
         return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
     }
@@ -397,9 +446,8 @@ export class JSXParser extends Parser {
 
         this.finishJSX();
         const argument = this.parseAssignmentExpression();
-        this.startJSX();
+        this.reenterJSX();
 
-        this.expectJSX('}');
         return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));
     }
 
@@ -461,25 +509,20 @@ export class JSXParser extends Parser {
         return this.finalize(node, new JSXNode.JSXEmptyExpression());
     }
 
-    parseJSXExpression(): Node.Expression | JSXNode.JSXEmptyExpression {
-        let expression;
+    parseJSXExpressionContainer(): JSXNode.JSXExpressionContainer {
+        const node = this.createJSXNode();
+        this.expectJSX('{');
 
+        let expression: Node.Expression | JSXNode.JSXEmptyExpression;
         if (this.matchJSX('}')) {
             expression = this.parseJSXEmptyExpression();
+            this.expectJSX('}');
         } else {
             this.finishJSX();
             expression = this.parseAssignmentExpression();
-            this.startJSX();
+            this.reenterJSX();
         }
 
-        return expression;
-    }
-
-    parseJSXExpressionContainer(): JSXNode.JSXExpressionContainer {
-        const node = this.createJSXNode();
-        this.expectJSX('{');
-        const expression = this.parseJSXExpression();
-        this.expectJSX('}');
         return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
     }
 
diff --git a/src/parser.ts b/src/parser.ts
index b7bb66e..3ccd575 100644
--- a/src/parser.ts
+++ b/src/parser.ts
@@ -3113,13 +3113,24 @@ export class Parser {
     parseImportSpecifier(): Node.ImportSpecifier {
         const node = this.createNode();
 
-        let local;
-        const imported = this.parseIdentifierName();
-        if (this.matchContextualKeyword('as')) {
-            this.nextToken();
-            local = this.parseVariableIdentifier();
+        let imported: Node.Identifier;
+        let local: Node.Identifier;
+        if (this.lookahead.type === Token.Identifier) {
+            imported = this.parseVariableIdentifier();
+            local = imported;
+            if (this.matchContextualKeyword('as')) {
+                this.nextToken();
+                local = this.parseVariableIdentifier();
+            }
         } else {
+            imported = this.parseIdentifierName();
             local = imported;
+            if (this.matchContextualKeyword('as')) {
+                this.nextToken();
+                local = this.parseVariableIdentifier();
+            } else {
+                this.throwUnexpectedToken(this.nextToken());
+            }
         }
 
         return this.finalize(node, new Node.ImportSpecifier(local, imported));
diff --git a/test/api-tests.js b/test/api-tests.js
index 3c8060d..5e0a05e 100644
--- a/test/api-tests.js
+++ b/test/api-tests.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/benchmark-parser.js b/test/benchmark-parser.js
index 766e723..bb35c4b 100644
--- a/test/benchmark-parser.js
+++ b/test/benchmark-parser.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/benchmark-tokenizer.js b/test/benchmark-tokenizer.js
index 2bd5474..c53d2c8 100644
--- a/test/benchmark-tokenizer.js
+++ b/test/benchmark-tokenizer.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/browser-tests.js b/test/browser-tests.js
index 9201868..428890d 100644
--- a/test/browser-tests.js
+++ b/test/browser-tests.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/check-complexity.js b/test/check-complexity.js
index 69de73c..1f03e0d 100644
--- a/test/check-complexity.js
+++ b/test/check-complexity.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/check-version.js b/test/check-version.js
index 8a7e2e8..be0c071 100644
--- a/test/check-version.js
+++ b/test/check-version.js
@@ -1,7 +1,7 @@
 #!/usr/bin/env node
 
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/downstream.js b/test/downstream.js
index 37429a4..e4e9d42 100644
--- a/test/downstream.js
+++ b/test/downstream.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/fixtures/ES6/import-declaration/invalid-import-boolean.js b/test/fixtures/ES6/import-declaration/invalid-import-boolean.js
new file mode 100644
index 0000000..2f14af5
--- /dev/null
+++ b/test/fixtures/ES6/import-declaration/invalid-import-boolean.js
@@ -0,0 +1 @@
+import { true } from "logic"
diff --git a/test/fixtures/ES6/import-declaration/invalid-import-boolean.module.json b/test/fixtures/ES6/import-declaration/invalid-import-boolean.module.json
new file mode 100644
index 0000000..11972c3
--- /dev/null
+++ b/test/fixtures/ES6/import-declaration/invalid-import-boolean.module.json
@@ -0,0 +1 @@
+{"index":14,"lineNumber":1,"column":15,"message":"Error: Line 1: Unexpected token }","description":"Unexpected token }"}
\ No newline at end of file
diff --git a/test/fixtures/ES6/import-declaration/invalid-import-keyword.js b/test/fixtures/ES6/import-declaration/invalid-import-keyword.js
new file mode 100644
index 0000000..752247c
--- /dev/null
+++ b/test/fixtures/ES6/import-declaration/invalid-import-keyword.js
@@ -0,0 +1 @@
+import { for } from "iteration"
diff --git a/test/fixtures/ES6/import-declaration/invalid-import-keyword.module.json b/test/fixtures/ES6/import-declaration/invalid-import-keyword.module.json
new file mode 100644
index 0000000..1b0c23e
--- /dev/null
+++ b/test/fixtures/ES6/import-declaration/invalid-import-keyword.module.json
@@ -0,0 +1 @@
+{"index":13,"lineNumber":1,"column":14,"message":"Error: Line 1: Unexpected token }","description":"Unexpected token }"}
\ No newline at end of file
diff --git a/test/fixtures/ES6/import-declaration/invalid-import-null.js b/test/fixtures/ES6/import-declaration/invalid-import-null.js
new file mode 100644
index 0000000..4eb1d74
--- /dev/null
+++ b/test/fixtures/ES6/import-declaration/invalid-import-null.js
@@ -0,0 +1 @@
+import { null } from "null"
diff --git a/test/fixtures/ES6/import-declaration/invalid-import-null.module.json b/test/fixtures/ES6/import-declaration/invalid-import-null.module.json
new file mode 100644
index 0000000..11972c3
--- /dev/null
+++ b/test/fixtures/ES6/import-declaration/invalid-import-null.module.json
@@ -0,0 +1 @@
+{"index":14,"lineNumber":1,"column":15,"message":"Error: Line 1: Unexpected token }","description":"Unexpected token }"}
\ No newline at end of file
diff --git a/test/fixtures/JSX/attribute-empty-entity1.js b/test/fixtures/JSX/attribute-empty-entity1.js
new file mode 100644
index 0000000..9b39110
--- /dev/null
+++ b/test/fixtures/JSX/attribute-empty-entity1.js
@@ -0,0 +1 @@
+<x y="&#x;" />
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-empty-entity1.tree.json
similarity index 64%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-empty-entity1.tree.json
index bae7860..7141b09 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-empty-entity1.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "x",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "y",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "&#x;",
+                                "raw": "\"&#x;\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    11
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 11
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                11
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 11
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        14
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 14
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    14
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 14
                     }
                 }
             },
             "range": [
                 0,
-                18
+                14
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 14
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        14
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 14
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "x",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "y",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,89 +204,35 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 10
-                },
-                "end": {
-                    "line": 1,
-                    "column": 11
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "{",
-            "range": [
-                11,
-                12
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "String",
+            "value": "\"&#x;\"",
             "range": [
-                15,
-                16
+                5,
+                11
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 11
                 }
             }
         },
@@ -311,17 +240,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                12,
+                13
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 12
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 13
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                13,
+                14
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 13
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 14
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-empty-entity2.js b/test/fixtures/JSX/attribute-empty-entity2.js
new file mode 100644
index 0000000..a2d8d01
--- /dev/null
+++ b/test/fixtures/JSX/attribute-empty-entity2.js
@@ -0,0 +1 @@
+<x y="&#;" />
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-empty-entity2.tree.json
similarity index 65%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-empty-entity2.tree.json
index bae7860..077a91f 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-empty-entity2.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "x",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "y",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "&#;",
+                                "raw": "\"&#;\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    10
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 10
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                10
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 10
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        13
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 13
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    13
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 13
                     }
                 }
             },
             "range": [
                 0,
-                18
+                13
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 13
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        13
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 13
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "x",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "y",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,89 +204,35 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 10
-                },
-                "end": {
-                    "line": 1,
-                    "column": 11
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "{",
-            "range": [
-                11,
-                12
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "String",
+            "value": "\"&#;\"",
             "range": [
-                15,
-                16
+                5,
+                10
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 10
                 }
             }
         },
@@ -311,17 +240,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                11,
+                12
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 11
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 12
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                12,
+                13
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 12
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 13
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-expression.tree.json b/test/fixtures/JSX/attribute-expression.tree.json
index c133973..f23aaf9 100644
--- a/test/fixtures/JSX/attribute-expression.tree.json
+++ b/test/fixtures/JSX/attribute-expression.tree.json
@@ -324,24 +324,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                13,
-                14
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 13
-                },
-                "end": {
-                    "line": 1,
-                    "column": 14
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": ">",
             "range": [
                 14,
@@ -431,4 +413,4 @@
             }
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/test/fixtures/JSX/attribute-illegal-short-entity.js b/test/fixtures/JSX/attribute-illegal-short-entity.js
new file mode 100644
index 0000000..ebb0a80
--- /dev/null
+++ b/test/fixtures/JSX/attribute-illegal-short-entity.js
@@ -0,0 +1 @@
+<a b="xyz&;" />
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-illegal-short-entity.tree.json
similarity index 64%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-illegal-short-entity.tree.json
index bae7860..352a911 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-illegal-short-entity.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "a",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "b",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "xyz&;",
+                                "raw": "\"xyz&;\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    12
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 12
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                12
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 12
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        15
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 15
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    15
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 15
                     }
                 }
             },
             "range": [
                 0,
-                18
+                15
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 15
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        15
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 15
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "a",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "b",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,31 +204,31 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 11
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "{",
+            "type": "String",
+            "value": "\"xyz&;\"",
             "range": [
-                11,
+                5,
                 12
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 11
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
@@ -254,74 +237,20 @@
             }
         },
         {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
-                },
-                "end": {
-                    "line": 1,
-                    "column": 16
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
-                },
-                "end": {
-                    "line": 1,
-                    "column": 16
-                }
-            }
-        },
-        {
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                13,
+                14
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 13
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 14
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                14,
+                15
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 14
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 15
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-invalid-entity.js b/test/fixtures/JSX/attribute-invalid-entity.js
new file mode 100644
index 0000000..823425f
--- /dev/null
+++ b/test/fixtures/JSX/attribute-invalid-entity.js
@@ -0,0 +1 @@
+<a b="x&y" />
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-invalid-entity.tree.json
similarity index 65%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-invalid-entity.tree.json
index bae7860..97d4994 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-invalid-entity.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "a",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "b",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "x&y",
+                                "raw": "\"x&y\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    10
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 10
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                10
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 10
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        13
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 13
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    13
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 13
                     }
                 }
             },
             "range": [
                 0,
-                18
+                13
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 13
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        13
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 13
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "a",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "b",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,89 +204,35 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 10
-                },
-                "end": {
-                    "line": 1,
-                    "column": 11
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "{",
-            "range": [
-                11,
-                12
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "String",
+            "value": "\"x&y\"",
             "range": [
-                15,
-                16
+                5,
+                10
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 10
                 }
             }
         },
@@ -311,17 +240,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                11,
+                12
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 11
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 12
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                12,
+                13
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 12
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 13
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-non-hex-entity.js b/test/fixtures/JSX/attribute-non-hex-entity.js
new file mode 100644
index 0000000..3ce3d23
--- /dev/null
+++ b/test/fixtures/JSX/attribute-non-hex-entity.js
@@ -0,0 +1 @@
+<p q="Just my &#xAZ;2 &#xA2;" />
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-non-hex-entity.tree.json
similarity index 62%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-non-hex-entity.tree.json
index bae7860..59536e4 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-non-hex-entity.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "p",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "q",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "Just my &#xAZ;2 ¢",
+                                "raw": "\"Just my &#xAZ;2 &#xA2;\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    29
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 29
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                29
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 29
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        32
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 32
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    32
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 32
                     }
                 }
             },
             "range": [
                 0,
-                18
+                32
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 32
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        32
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 32
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "p",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "q",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,89 +204,35 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 10
-                },
-                "end": {
-                    "line": 1,
-                    "column": 11
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "{",
-            "range": [
-                11,
-                12
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "String",
+            "value": "\"Just my &#xAZ;2 &#xA2;\"",
             "range": [
-                15,
-                16
+                5,
+                29
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 29
                 }
             }
         },
@@ -311,17 +240,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                30,
+                31
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 30
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 31
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                31,
+                32
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 31
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 32
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-non-numeric-entity.js b/test/fixtures/JSX/attribute-non-numeric-entity.js
new file mode 100644
index 0000000..2d96cc7
--- /dev/null
+++ b/test/fixtures/JSX/attribute-non-numeric-entity.js
@@ -0,0 +1 @@
+<x y="&#123abc {" />
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-non-numeric-entity.tree.json
similarity index 62%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-non-numeric-entity.tree.json
index bae7860..f8e1c67 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-non-numeric-entity.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "x",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "y",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "&#123abc {",
+                                "raw": "\"&#123abc {\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    22
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 22
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                22
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 22
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        25
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 25
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    25
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 25
                     }
                 }
             },
             "range": [
                 0,
-                18
+                25
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 25
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        25
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 25
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "x",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "y",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,89 +204,35 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 10
-                },
-                "end": {
-                    "line": 1,
-                    "column": 11
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "{",
-            "range": [
-                11,
-                12
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "String",
+            "value": "\"&#123abc {\"",
             "range": [
-                15,
-                16
+                5,
+                22
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 22
                 }
             }
         },
@@ -311,17 +240,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                23,
+                24
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 23
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 24
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                24,
+                25
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 24
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 25
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-primary.tree.json
index bae7860..dd7815c 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-primary.tree.json
@@ -291,24 +291,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
-                },
-                "end": {
-                    "line": 1,
-                    "column": 16
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": "/",
             "range": [
                 16,
@@ -344,4 +326,4 @@
             }
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/test/fixtures/JSX/attribute-spread.tree.json b/test/fixtures/JSX/attribute-spread.tree.json
index 4240a1a..86fd05e 100644
--- a/test/fixtures/JSX/attribute-spread.tree.json
+++ b/test/fixtures/JSX/attribute-spread.tree.json
@@ -271,24 +271,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                16,
-                17
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 16
-                },
-                "end": {
-                    "line": 1,
-                    "column": 17
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": ">",
             "range": [
                 17,
@@ -378,4 +360,4 @@
             }
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/test/fixtures/JSX/attribute-unterminated-entity.js b/test/fixtures/JSX/attribute-unterminated-entity.js
new file mode 100644
index 0000000..9f3332a
--- /dev/null
+++ b/test/fixtures/JSX/attribute-unterminated-entity.js
@@ -0,0 +1 @@
+<a b="&#123"/>
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-unterminated-entity.tree.json
similarity index 63%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-unterminated-entity.tree.json
index bae7860..2b18dc6 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-unterminated-entity.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "a",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "b",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "&#123",
+                                "raw": "\"&#123\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    12
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 12
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                12
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 12
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        14
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 14
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    14
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 14
                     }
                 }
             },
             "range": [
                 0,
-                18
+                14
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 14
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        14
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 14
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "a",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "b",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,31 +204,31 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 11
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "{",
+            "type": "String",
+            "value": "\"&#123\"",
             "range": [
-                11,
+                5,
                 12
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 11
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
@@ -254,74 +237,20 @@
             }
         },
         {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
-                },
-                "end": {
-                    "line": 1,
-                    "column": 16
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
-                },
-                "end": {
-                    "line": 1,
-                    "column": 16
-                }
-            }
-        },
-        {
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                12,
+                13
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 12
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 13
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                13,
+                14
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 13
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 14
                 }
             }
         }
diff --git a/test/fixtures/JSX/attribute-x-entity.js b/test/fixtures/JSX/attribute-x-entity.js
new file mode 100644
index 0000000..cd2c2f9
--- /dev/null
+++ b/test/fixtures/JSX/attribute-x-entity.js
@@ -0,0 +1 @@
+<a b="&#X41;"/>
diff --git a/test/fixtures/JSX/attribute-primary.tree.json b/test/fixtures/JSX/attribute-x-entity.tree.json
similarity index 63%
copy from test/fixtures/JSX/attribute-primary.tree.json
copy to test/fixtures/JSX/attribute-x-entity.tree.json
index bae7860..f3500f7 100644
--- a/test/fixtures/JSX/attribute-primary.tree.json
+++ b/test/fixtures/JSX/attribute-x-entity.tree.json
@@ -9,10 +9,10 @@
                     "type": "JSXOpeningElement",
                     "name": {
                         "type": "JSXIdentifier",
-                        "name": "img",
+                        "name": "a",
                         "range": [
                             1,
-                            4
+                            2
                         ],
                         "loc": {
                             "start": {
@@ -21,7 +21,7 @@
                             },
                             "end": {
                                 "line": 1,
-                                "column": 4
+                                "column": 2
                             }
                         }
                     },
@@ -31,77 +31,60 @@
                             "type": "JSXAttribute",
                             "name": {
                                 "type": "JSXIdentifier",
-                                "name": "width",
+                                "name": "b",
                                 "range": [
-                                    5,
-                                    10
+                                    3,
+                                    4
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 5
+                                        "column": 3
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 10
+                                        "column": 4
                                     }
                                 }
                             },
                             "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Literal",
-                                    "value": 320,
-                                    "raw": "320",
-                                    "range": [
-                                        12,
-                                        15
-                                    ],
-                                    "loc": {
-                                        "start": {
-                                            "line": 1,
-                                            "column": 12
-                                        },
-                                        "end": {
-                                            "line": 1,
-                                            "column": 15
-                                        }
-                                    }
-                                },
+                                "type": "Literal",
+                                "value": "&#X41;",
+                                "raw": "\"&#X41;\"",
                                 "range": [
-                                    11,
-                                    16
+                                    5,
+                                    13
                                 ],
                                 "loc": {
                                     "start": {
                                         "line": 1,
-                                        "column": 11
+                                        "column": 5
                                     },
                                     "end": {
                                         "line": 1,
-                                        "column": 16
+                                        "column": 13
                                     }
                                 }
                             },
                             "range": [
-                                5,
-                                16
+                                3,
+                                13
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 5
+                                    "column": 3
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 16
+                                    "column": 13
                                 }
                             }
                         }
                     ],
                     "range": [
                         0,
-                        18
+                        15
                     ],
                     "loc": {
                         "start": {
@@ -110,7 +93,7 @@
                         },
                         "end": {
                             "line": 1,
-                            "column": 18
+                            "column": 15
                         }
                     }
                 },
@@ -118,7 +101,7 @@
                 "closingElement": null,
                 "range": [
                     0,
-                    18
+                    15
                 ],
                 "loc": {
                     "start": {
@@ -127,13 +110,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 18
+                        "column": 15
                     }
                 }
             },
             "range": [
                 0,
-                18
+                15
             ],
             "loc": {
                 "start": {
@@ -142,7 +125,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 15
                 }
             }
         }
@@ -150,7 +133,7 @@
     "sourceType": "script",
     "range": [
         0,
-        18
+        15
     ],
     "loc": {
         "start": {
@@ -159,7 +142,7 @@
         },
         "end": {
             "line": 1,
-            "column": 18
+            "column": 15
         }
     },
     "tokens": [
@@ -183,10 +166,10 @@
         },
         {
             "type": "JSXIdentifier",
-            "value": "img",
+            "value": "a",
             "range": [
                 1,
-                4
+                2
             ],
             "loc": {
                 "start": {
@@ -195,25 +178,25 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 4
+                    "column": 2
                 }
             }
         },
         {
             "type": "JSXIdentifier",
-            "value": "width",
+            "value": "b",
             "range": [
-                5,
-                10
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 5
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 10
+                    "column": 4
                 }
             }
         },
@@ -221,89 +204,35 @@
             "type": "Punctuator",
             "value": "=",
             "range": [
-                10,
-                11
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 10
-                },
-                "end": {
-                    "line": 1,
-                    "column": 11
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "{",
-            "range": [
-                11,
-                12
+                4,
+                5
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Numeric",
-            "value": "320",
-            "range": [
-                12,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 12
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
-            "value": "}",
-            "range": [
-                15,
-                16
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 15
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 5
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "String",
+            "value": "\"&#X41;\"",
             "range": [
-                15,
-                16
+                5,
+                13
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 5
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 13
                 }
             }
         },
@@ -311,17 +240,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                13,
+                14
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 13
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 14
                 }
             }
         },
@@ -329,17 +258,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                17,
-                18
+                14,
+                15
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 14
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 15
                 }
             }
         }
diff --git a/test/fixtures/JSX/container-object-expression.tree.json b/test/fixtures/JSX/container-object-expression.tree.json
index bc3ef6c..3483944 100644
--- a/test/fixtures/JSX/container-object-expression.tree.json
+++ b/test/fixtures/JSX/container-object-expression.tree.json
@@ -365,24 +365,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                19,
-                20
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 19
-                },
-                "end": {
-                    "line": 1,
-                    "column": 20
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": "<",
             "range": [
                 20,
diff --git a/test/fixtures/JSX/container-series.tree.json b/test/fixtures/JSX/container-series.tree.json
index 8f6f29c..7b4dadd 100644
--- a/test/fixtures/JSX/container-series.tree.json
+++ b/test/fixtures/JSX/container-series.tree.json
@@ -341,24 +341,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                8,
-                9
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 8
-                },
-                "end": {
-                    "line": 1,
-                    "column": 9
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": "{",
             "range": [
                 9,
@@ -413,24 +395,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                11,
-                12
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 11
-                },
-                "end": {
-                    "line": 1,
-                    "column": 12
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": "{",
             "range": [
                 12,
@@ -485,24 +449,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                14,
-                15
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 14
-                },
-                "end": {
-                    "line": 1,
-                    "column": 15
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": "<",
             "range": [
                 15,
@@ -574,4 +520,4 @@
             }
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/test/fixtures/JSX/simple-expression-container.tree.json b/test/fixtures/JSX/simple-expression-container.tree.json
index d29518f..7e7b0db 100644
--- a/test/fixtures/JSX/simple-expression-container.tree.json
+++ b/test/fixtures/JSX/simple-expression-container.tree.json
@@ -271,24 +271,6 @@
         },
         {
             "type": "Punctuator",
-            "value": "}",
-            "range": [
-                16,
-                17
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 16
-                },
-                "end": {
-                    "line": 1,
-                    "column": 17
-                }
-            }
-        },
-        {
-            "type": "Punctuator",
             "value": "<",
             "range": [
                 17,
@@ -360,4 +342,4 @@
             }
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/test/fixtures/JSX/template-literal.js b/test/fixtures/JSX/template-literal.js
new file mode 100644
index 0000000..cecd21e
--- /dev/null
+++ b/test/fixtures/JSX/template-literal.js
@@ -0,0 +1 @@
+<a>{`${1}`}</a>
diff --git a/test/fixtures/JSX/attribute-expression.tree.json b/test/fixtures/JSX/template-literal.tree.json
similarity index 66%
copy from test/fixtures/JSX/attribute-expression.tree.json
copy to test/fixtures/JSX/template-literal.tree.json
index c133973..17f04d4 100644
--- a/test/fixtures/JSX/attribute-expression.tree.json
+++ b/test/fixtures/JSX/template-literal.tree.json
@@ -26,132 +26,163 @@
                         }
                     },
                     "selfClosing": false,
-                    "attributes": [
-                        {
-                            "type": "JSXAttribute",
-                            "name": {
-                                "type": "JSXIdentifier",
-                                "name": "href",
-                                "range": [
-                                    3,
-                                    7
-                                ],
-                                "loc": {
-                                    "start": {
-                                        "line": 1,
-                                        "column": 3
+                    "attributes": [],
+                    "range": [
+                        0,
+                        3
+                    ],
+                    "loc": {
+                        "start": {
+                            "line": 1,
+                            "column": 0
+                        },
+                        "end": {
+                            "line": 1,
+                            "column": 3
+                        }
+                    }
+                },
+                "children": [
+                    {
+                        "type": "JSXExpressionContainer",
+                        "expression": {
+                            "type": "TemplateLiteral",
+                            "quasis": [
+                                {
+                                    "type": "TemplateElement",
+                                    "value": {
+                                        "raw": "",
+                                        "cooked": ""
                                     },
-                                    "end": {
-                                        "line": 1,
-                                        "column": 7
-                                    }
-                                }
-                            },
-                            "value": {
-                                "type": "JSXExpressionContainer",
-                                "expression": {
-                                    "type": "Identifier",
-                                    "name": "link",
+                                    "tail": false,
                                     "range": [
-                                        9,
-                                        13
+                                        4,
+                                        7
                                     ],
                                     "loc": {
                                         "start": {
                                             "line": 1,
-                                            "column": 9
+                                            "column": 4
                                         },
                                         "end": {
                                             "line": 1,
-                                            "column": 13
+                                            "column": 7
                                         }
                                     }
                                 },
-                                "range": [
-                                    8,
-                                    14
-                                ],
-                                "loc": {
-                                    "start": {
-                                        "line": 1,
-                                        "column": 8
+                                {
+                                    "type": "TemplateElement",
+                                    "value": {
+                                        "raw": "",
+                                        "cooked": ""
                                     },
-                                    "end": {
-                                        "line": 1,
-                                        "column": 14
+                                    "tail": true,
+                                    "range": [
+                                        8,
+                                        10
+                                    ],
+                                    "loc": {
+                                        "start": {
+                                            "line": 1,
+                                            "column": 8
+                                        },
+                                        "end": {
+                                            "line": 1,
+                                            "column": 10
+                                        }
                                     }
                                 }
-                            },
+                            ],
+                            "expressions": [
+                                {
+                                    "type": "Literal",
+                                    "value": 1,
+                                    "raw": "1",
+                                    "range": [
+                                        7,
+                                        8
+                                    ],
+                                    "loc": {
+                                        "start": {
+                                            "line": 1,
+                                            "column": 7
+                                        },
+                                        "end": {
+                                            "line": 1,
+                                            "column": 8
+                                        }
+                                    }
+                                }
+                            ],
                             "range": [
-                                3,
-                                14
+                                4,
+                                10
                             ],
                             "loc": {
                                 "start": {
                                     "line": 1,
-                                    "column": 3
+                                    "column": 4
                                 },
                                 "end": {
                                     "line": 1,
-                                    "column": 14
+                                    "column": 10
                                 }
                             }
-                        }
-                    ],
-                    "range": [
-                        0,
-                        15
-                    ],
-                    "loc": {
-                        "start": {
-                            "line": 1,
-                            "column": 0
                         },
-                        "end": {
-                            "line": 1,
-                            "column": 15
+                        "range": [
+                            3,
+                            11
+                        ],
+                        "loc": {
+                            "start": {
+                                "line": 1,
+                                "column": 3
+                            },
+                            "end": {
+                                "line": 1,
+                                "column": 11
+                            }
                         }
                     }
-                },
-                "children": [],
+                ],
                 "closingElement": {
                     "type": "JSXClosingElement",
                     "name": {
                         "type": "JSXIdentifier",
                         "name": "a",
                         "range": [
-                            17,
-                            18
+                            13,
+                            14
                         ],
                         "loc": {
                             "start": {
                                 "line": 1,
-                                "column": 17
+                                "column": 13
                             },
                             "end": {
                                 "line": 1,
-                                "column": 18
+                                "column": 14
                             }
                         }
                     },
                     "range": [
-                        15,
-                        19
+                        11,
+                        15
                     ],
                     "loc": {
                         "start": {
                             "line": 1,
-                            "column": 15
+                            "column": 11
                         },
                         "end": {
                             "line": 1,
-                            "column": 19
+                            "column": 15
                         }
                     }
                 },
                 "range": [
                     0,
-                    19
+                    15
                 ],
                 "loc": {
                     "start": {
@@ -160,13 +191,13 @@
                     },
                     "end": {
                         "line": 1,
-                        "column": 19
+                        "column": 15
                     }
                 }
             },
             "range": [
                 0,
-                19
+                15
             ],
             "loc": {
                 "start": {
@@ -175,7 +206,7 @@
                 },
                 "end": {
                     "line": 1,
-                    "column": 19
+                    "column": 15
                 }
             }
         }
@@ -183,7 +214,7 @@
     "sourceType": "script",
     "range": [
         0,
-        19
+        15
     ],
     "loc": {
         "start": {
@@ -192,7 +223,7 @@
         },
         "end": {
             "line": 1,
-            "column": 19
+            "column": 15
         }
     },
     "tokens": [
@@ -233,38 +264,20 @@
             }
         },
         {
-            "type": "JSXIdentifier",
-            "value": "href",
-            "range": [
-                3,
-                7
-            ],
-            "loc": {
-                "start": {
-                    "line": 1,
-                    "column": 3
-                },
-                "end": {
-                    "line": 1,
-                    "column": 7
-                }
-            }
-        },
-        {
             "type": "Punctuator",
-            "value": "=",
+            "value": ">",
             "range": [
-                7,
-                8
+                2,
+                3
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 7
+                    "column": 2
                 },
                 "end": {
                     "line": 1,
-                    "column": 8
+                    "column": 3
                 }
             }
         },
@@ -272,89 +285,89 @@
             "type": "Punctuator",
             "value": "{",
             "range": [
-                8,
-                9
+                3,
+                4
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 8
+                    "column": 3
                 },
                 "end": {
                     "line": 1,
-                    "column": 9
+                    "column": 4
                 }
             }
         },
         {
-            "type": "Identifier",
-            "value": "link",
+            "type": "Template",
+            "value": "`${",
             "range": [
-                9,
-                13
+                4,
+                7
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 9
+                    "column": 4
                 },
                 "end": {
                     "line": 1,
-                    "column": 13
+                    "column": 7
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "Numeric",
+            "value": "1",
             "range": [
-                13,
-                14
+                7,
+                8
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 13
+                    "column": 7
                 },
                 "end": {
                     "line": 1,
-                    "column": 14
+                    "column": 8
                 }
             }
         },
         {
-            "type": "Punctuator",
-            "value": "}",
+            "type": "Template",
+            "value": "}`",
             "range": [
-                13,
-                14
+                8,
+                10
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 13
+                    "column": 8
                 },
                 "end": {
                     "line": 1,
-                    "column": 14
+                    "column": 10
                 }
             }
         },
         {
             "type": "Punctuator",
-            "value": ">",
+            "value": "}",
             "range": [
-                14,
-                15
+                10,
+                11
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 14
+                    "column": 10
                 },
                 "end": {
                     "line": 1,
-                    "column": 15
+                    "column": 11
                 }
             }
         },
@@ -362,17 +375,17 @@
             "type": "Punctuator",
             "value": "<",
             "range": [
-                15,
-                16
+                11,
+                12
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 15
+                    "column": 11
                 },
                 "end": {
                     "line": 1,
-                    "column": 16
+                    "column": 12
                 }
             }
         },
@@ -380,17 +393,17 @@
             "type": "Punctuator",
             "value": "/",
             "range": [
-                16,
-                17
+                12,
+                13
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 16
+                    "column": 12
                 },
                 "end": {
                     "line": 1,
-                    "column": 17
+                    "column": 13
                 }
             }
         },
@@ -398,17 +411,17 @@
             "type": "JSXIdentifier",
             "value": "a",
             "range": [
-                17,
-                18
+                13,
+                14
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 17
+                    "column": 13
                 },
                 "end": {
                     "line": 1,
-                    "column": 18
+                    "column": 14
                 }
             }
         },
@@ -416,17 +429,17 @@
             "type": "Punctuator",
             "value": ">",
             "range": [
-                18,
-                19
+                14,
+                15
             ],
             "loc": {
                 "start": {
                     "line": 1,
-                    "column": 18
+                    "column": 14
                 },
                 "end": {
                     "line": 1,
-                    "column": 19
+                    "column": 15
                 }
             }
         }
diff --git a/test/grammar-tests.js b/test/grammar-tests.js
index 804eb1b..2c81ea7 100644
--- a/test/grammar-tests.js
+++ b/test/grammar-tests.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/hostile-environment-tests.js b/test/hostile-environment-tests.js
index a328279..7ae44b4 100644
--- a/test/hostile-environment-tests.js
+++ b/test/hostile-environment-tests.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/profile.js b/test/profile.js
index d9430c5..86548f5 100644
--- a/test/profile.js
+++ b/test/profile.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/regression-tests.js b/test/regression-tests.js
index b8c5170..2958536 100644
--- a/test/regression-tests.js
+++ b/test/regression-tests.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/unit-tests.js b/test/unit-tests.js
index f608ba0..2dbb9e7 100644
--- a/test/unit-tests.js
+++ b/test/unit-tests.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/utils/create-testcases.js b/test/utils/create-testcases.js
index 53aebbb..d646306 100644
--- a/test/utils/create-testcases.js
+++ b/test/utils/create-testcases.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/utils/error-to-object.js b/test/utils/error-to-object.js
index e30ff9b..2091de8 100644
--- a/test/utils/error-to-object.js
+++ b/test/utils/error-to-object.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/test/utils/evaluate-testcase.js b/test/utils/evaluate-testcase.js
index d997259..8e8370c 100644
--- a/test/utils/evaluate-testcase.js
+++ b/test/utils/evaluate-testcase.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
diff --git a/tools/fixupbundle.js b/tools/fixupbundle.js
index 789141e..d74c261 100644
--- a/tools/fixupbundle.js
+++ b/tools/fixupbundle.js
@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 /*
- Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+ Copyright JS Foundation and other contributors, https://js.foundation/
 
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are met:
diff --git a/tools/generate-fixtures.js b/tools/generate-fixtures.js
index bdfe993..4305c0b 100644
--- a/tools/generate-fixtures.js
+++ b/tools/generate-fixtures.js
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
+  Copyright JS Foundation and other contributors, https://js.foundation/
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are met:
     * Redistributions of source code must retain the above copyright

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-esprima.git



More information about the Pkg-javascript-commits mailing list