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:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1021,6 +1021,7 @@ export default class StatementParser extends ExpressionParser {
|
||||
kind === "var" ? BIND_VAR : BIND_LEXICAL,
|
||||
undefined,
|
||||
"variable declaration",
|
||||
kind !== "var",
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user