diff --git a/packages/babel-parser/src/plugins/jsx/index.js b/packages/babel-parser/src/plugins/jsx/index.js
index 5844426cb1cb..d2ecb7306e88 100644
--- a/packages/babel-parser/src/plugins/jsx/index.js
+++ b/packages/babel-parser/src/plugins/jsx/index.js
@@ -46,12 +46,6 @@ const JsxErrors = makeErrorTemplates(
);
/* eslint-disable sort-keys */
-// Be aware that this file is always executed and not only when the plugin is enabled.
-// Therefore the contexts do always exist.
-tc.j_oTag = new TokContext("...", true);
-
function isFragment(object: ?N.JSXElement): boolean {
return object
? object.type === "JSXOpeningFragment" ||
diff --git a/packages/babel-parser/src/tokenizer/context.js b/packages/babel-parser/src/tokenizer/context.js
index ebf4793afc33..6b985901814b 100644
--- a/packages/babel-parser/src/tokenizer/context.js
+++ b/packages/babel-parser/src/tokenizer/context.js
@@ -1,7 +1,7 @@
// @flow
-// The token context is used to track whether the apostrophe "`"
-// starts or ends a string template
+// The token context is used in JSX plugin to track
+// jsx tag / jsx text / normal JavaScript expression
export class TokContext {
constructor(token: string, preserveSpace?: boolean) {
@@ -13,9 +13,17 @@ export class TokContext {
preserveSpace: boolean;
}
-export const types: {
+const types: {
[key: string]: TokContext,
} = {
- brace: new TokContext("{"),
- template: new TokContext("`", true),
+ brace: new TokContext("{"), // normal JavaScript expression
+ j_oTag: new TokContext("...", true), // JSX expressions
};
+
+if (!process.env.BABEL_8_BREAKING) {
+ types.template = new TokContext("`", true);
+}
+
+export { types };