fix: Exclude catch clause from let identifier error (#10559)

* Exclude catch clause from let identifier error

* Disallow let binding based on parameter

* Add test

* Remove unused getter

* Update packages/babel-parser/src/parser/statement.js

Co-Authored-By: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
This commit is contained in:
gr
2019-10-17 04:30:36 -03:00
committed by Nicolò Ribaudo
parent 487f10f84d
commit 095f28a913
7 changed files with 139 additions and 3 deletions

View File

@@ -17,7 +17,7 @@ import type {
import type { Pos, Position } from "../util/location";
import { isStrictBindReservedWord } from "../util/identifier";
import { NodeUtils } from "./node";
import { type BindingTypes, BIND_NONE, BIND_LEXICAL } from "../util/scopeflags";
import { type BindingTypes, BIND_NONE } from "../util/scopeflags";
export default class LValParser extends NodeUtils {
// Forward-declaration: defined in expression.js
@@ -348,6 +348,7 @@ export default class LValParser extends NodeUtils {
bindingType: BindingTypes = BIND_NONE,
checkClashes: ?{ [key: string]: boolean },
contextDescription: string,
disallowLetBinding?: boolean,
): void {
switch (expr.type) {
case "Identifier":
@@ -383,7 +384,7 @@ export default class LValParser extends NodeUtils {
checkClashes[key] = true;
}
}
if (bindingType === BIND_LEXICAL && expr.name === "let") {
if (disallowLetBinding && expr.name === "let") {
this.raise(
expr.start,
"'let' is not allowed to be used as a name in 'let' or 'const' declarations.",
@@ -408,6 +409,7 @@ export default class LValParser extends NodeUtils {
bindingType,
checkClashes,
"object destructuring pattern",
disallowLetBinding,
);
}
break;
@@ -420,6 +422,7 @@ export default class LValParser extends NodeUtils {
bindingType,
checkClashes,
"array destructuring pattern",
disallowLetBinding,
);
}
}

View File

@@ -1021,6 +1021,7 @@ export default class StatementParser extends ExpressionParser {
kind === "var" ? BIND_VAR : BIND_LEXICAL,
undefined,
"variable declaration",
kind !== "var",
);
}