Skip to content

Commit

Permalink
Add ErrorCodes objects
Browse files Browse the repository at this point in the history
  • Loading branch information
sosukesuzuki committed Mar 26, 2021
1 parent aa6dcb7 commit 2a737a1
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 32 deletions.
8 changes: 8 additions & 0 deletions packages/babel-parser/src/parser/error-codes.js
@@ -0,0 +1,8 @@
// @flow

export const ErrorCodes = Object.freeze({
SyntaxError: "BABEL_PARSER_SYNTAX_ERROR",
SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED",
});

export type ErrorCode = $Values<typeof ErrorCodes>;
6 changes: 3 additions & 3 deletions packages/babel-parser/src/parser/error-message.js
@@ -1,6 +1,6 @@
// @flow

import { makeErrorTemplates } from "../parser/error";
import { makeErrorTemplates, ErrorCodes } from "./error";

/* eslint sort-keys: "error" */

Expand Down Expand Up @@ -220,13 +220,13 @@ export const ErrorMessages = makeErrorTemplates(
ZeroDigitNumericSeparator:
"Numeric separator can not be used after leading 0",
},
/* code */ "BABEL_PARSER_SYNTAX_ERROR",
/* code */ ErrorCodes.SyntaxError,
);

export const SourceTypeModuleErrorMessages = makeErrorTemplates(
{
ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: "module"'`,
ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: "module"'`,
},
/* code */ "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED",
/* code */ ErrorCodes.SourceTypeModuleError,
);
22 changes: 11 additions & 11 deletions packages/babel-parser/src/parser/error.js
Expand Up @@ -2,6 +2,7 @@
/* eslint sort-keys: "error" */
import { getLineInfo, type Position } from "../util/location";
import CommentsParser from "./comments";
import { type ErrorCode, ErrorCodes } from "./error-codes";

// This function is used to raise exceptions on parse errors. It
// takes an offset integer (into the current `input`) to indicate
Expand All @@ -16,31 +17,22 @@ type ErrorContext = {
code?: string,
reasonCode?: String,
};

export type ParsingError = SyntaxError & ErrorContext;

export type ErrorTemplate = {
code: string,
code: ErrorCode,
template: string,
reasonCode: string,
};

export type ErrorTemplates = {
[key: string]: ErrorTemplate,
};

export type raiseFunction = (number, ErrorTemplate, ...any) => void;

export {
ErrorMessages as Errors,
SourceTypeModuleErrorMessages as SourceTypeModuleErrors,
} from "./error-message";

export function makeErrorTemplates(
messages: {
[key: string]: string,
},
code: string,
code: ErrorCode,
): ErrorTemplates {
const templates: ErrorTemplates = {};
Object.keys(messages).forEach(reasonCode => {
Expand All @@ -53,6 +45,14 @@ export function makeErrorTemplates(
return Object.freeze(templates);
}

export { ErrorCodes };
export {
ErrorMessages as Errors,
SourceTypeModuleErrorMessages as SourceTypeModuleErrors,
} from "./error-message";

export type raiseFunction = (number, ErrorTemplate, ...any) => void;

export default class ParserError extends CommentsParser {
// Forward-declaration: defined in tokenizer/index.js
/*::
Expand Down
9 changes: 3 additions & 6 deletions packages/babel-parser/src/parser/expression.js
Expand Up @@ -1520,17 +1520,14 @@ export default class ExpressionParser extends LValParser {
const metaProp = this.parseMetaProperty(node, meta, "target");

if (!this.scope.inNonArrowFunction && !this.scope.inClass) {
let error = Errors.UnexpectedNewTarget.template;
const errorTemplate = { ...Errors.UnexpectedNewTarget };

if (this.hasPlugin("classProperties")) {
error += " or class properties";
errorTemplate.template += " or class properties";
}

/* eslint-disable @babel/development-internal/dry-error-messages */
this.raise(metaProp.start, {
code: Errors.UnexpectedNewTarget.code,
template: error,
});
this.raise(metaProp.start, errorTemplate);
/* eslint-enable @babel/development-internal/dry-error-messages */
}

Expand Down
11 changes: 7 additions & 4 deletions packages/babel-parser/src/parser/util.js
Expand Up @@ -13,7 +13,7 @@ import ProductionParameterHandler, {
PARAM_AWAIT,
PARAM,
} from "../util/production-parameter";
import { Errors, type ErrorTemplate } from "./error";
import { Errors, type ErrorTemplate, ErrorCodes } from "./error";
/*::
import type ScopeHandler from "../util/scope";
*/
Expand Down Expand Up @@ -143,7 +143,8 @@ export default class UtilParser extends Tokenizer {
if (this.state.start > this.state.lastTokEnd) {
/* eslint-disable @babel/development-internal/dry-error-messages */
this.raise(this.state.lastTokEnd, {
code: "UnexpectedSpace",
code: ErrorCodes.SyntaxError,
reasonCode: "UnexpectedSpace",
template: message,
});
/* eslint-enable @babel/development-internal/dry-error-messages */
Expand All @@ -156,13 +157,15 @@ export default class UtilParser extends Tokenizer {
unexpected(
pos: ?number,
messageOrType: ErrorTemplate | TokenType = {
code: "UnexpectedToken",
code: ErrorCodes.SyntaxError,
reasonCode: "UnexpectedToken",
template: "Unexpected token",
},
): empty {
if (messageOrType instanceof TokenType) {
messageOrType = {
code: "UnexpectedToken",
code: ErrorCodes.SyntaxError,
reasonCode: "UnexpectedToken",
template: `Unexpected token, expected "${messageOrType.label}"`,
};
}
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-parser/src/plugins/flow/index.js
Expand Up @@ -25,7 +25,7 @@ import {
SCOPE_OTHER,
} from "../../util/scopeflags";
import type { ExpressionErrors } from "../../parser/util";
import { Errors, makeErrorTemplates } from "../../parser/error";
import { Errors, makeErrorTemplates, ErrorCodes } from "../../parser/error";

const reservedTypes = new Set([
"_",
Expand Down Expand Up @@ -135,7 +135,7 @@ const FlowErrors = makeErrorTemplates(
"Only declares and type imports are allowed inside declare module",
UnterminatedFlowComment: "Unterminated flow-comment",
},
/* code */ "BABEL_PARSER_SYNTAX_ERROR",
/* code */ ErrorCodes.SyntaxError,
);
/* eslint-disable sort-keys */

Expand Down
7 changes: 4 additions & 3 deletions packages/babel-parser/src/plugins/jsx/index.js
Expand Up @@ -14,7 +14,7 @@ import * as N from "../../types";
import { isIdentifierChar, isIdentifierStart } from "../../util/identifier";
import type { Position } from "../../util/location";
import { isNewLine } from "../../util/whitespace";
import { Errors, makeErrorTemplates } from "../../parser/error";
import { Errors, makeErrorTemplates, ErrorCodes } from "../../parser/error";

const HEX_NUMBER = /^[\da-fA-F]+$/;
const DECIMAL_NUMBER = /^\d+$/;
Expand All @@ -34,7 +34,7 @@ const JsxErrors = makeErrorTemplates(
UnwrappedAdjacentJSXElements:
"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?",
},
/* code */ "BABEL_PARSER_SYNTAX_ERROR",
/* code */ ErrorCodes.SyntaxError,
);
/* eslint-disable sort-keys */

Expand Down Expand Up @@ -137,7 +137,8 @@ export default (superClass: Class<Parser>): Class<Parser> =>
ch === charCodes.rightCurlyBrace ? "&rbrace;" : "&gt;";
const char = this.input[this.state.pos];
this.raise(this.state.pos, {
code: "UnexpectedToken",
code: ErrorCodes.SyntaxError,
reasonCode: "UnexpectedToken",
template: `Unexpected token \`${char}\`. Did you mean \`${htmlEntity}\` or \`{'${char}'}\`?`,
});
}
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-parser/src/plugins/placeholders.js
Expand Up @@ -5,7 +5,7 @@ import * as charCodes from "charcodes";
import { types as tt, TokenType } from "../tokenizer/types";
import type Parser from "../parser";
import * as N from "../types";
import { makeErrorTemplates } from "../parser/error";
import { makeErrorTemplates, ErrorCodes } from "../parser/error";

tt.placeholder = new TokenType("%%", { startsExpr: true });

Expand Down Expand Up @@ -52,7 +52,7 @@ const PlaceHolderErrors = makeErrorTemplates(
{
ClassNameIsRequired: "A class name is required",
},
/* code */ "BABEL_PARSER_SYNTAX_ERROR",
/* code */ ErrorCodes.SyntaxError,
);

export default (superClass: Class<Parser>): Class<Parser> =>
Expand Down
3 changes: 2 additions & 1 deletion packages/babel-parser/src/plugins/typescript/index.js
Expand Up @@ -33,6 +33,7 @@ import {
Errors,
makeErrorTemplates,
type ErrorTemplate,
ErrorCodes,
} from "../../parser/error";

type TsModifier =
Expand Down Expand Up @@ -130,7 +131,7 @@ const TSErrors = makeErrorTemplates(
UnsupportedSignatureParameterKind:
"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0",
},
/* code */ "BABEL_PARSER_SYNTAX_ERROR",
/* code */ ErrorCodes.SyntaxError,
);
/* eslint-disable sort-keys */

Expand Down

0 comments on commit 2a737a1

Please sign in to comment.