[ts] Support override modifiers for parameter properties (#13428)

This commit is contained in:
Sosuke Suzuki
2021-06-11 05:29:38 +09:00
committed by GitHub
parent b1fe831e4a
commit 0eb2853732
12 changed files with 500 additions and 4 deletions

View File

@@ -283,6 +283,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
} else {
enforceOrder(startPos, modifier, modifier, "override");
enforceOrder(startPos, modifier, modifier, "static");
enforceOrder(startPos, modifier, modifier, "readonly");
modified.accessibility = modifier;
}
@@ -1927,10 +1928,23 @@ export default (superClass: Class<Parser>): Class<Parser> =>
let accessibility: ?N.Accessibility;
let readonly = false;
let override = false;
if (allowModifiers !== undefined) {
accessibility = this.parseAccessModifier();
readonly = !!this.tsParseModifier(["readonly"]);
if (allowModifiers === false && (accessibility || readonly)) {
const modified = {};
this.tsParseModifiers(modified, [
"public",
"private",
"protected",
"override",
"readonly",
]);
accessibility = modified.accessibility;
override = modified.override;
readonly = modified.readonly;
if (
allowModifiers === false &&
(accessibility || readonly || override)
) {
this.raise(startPos, TSErrors.UnexpectedParameterModifier);
}
}
@@ -1938,13 +1952,14 @@ export default (superClass: Class<Parser>): Class<Parser> =>
const left = this.parseMaybeDefault();
this.parseAssignableListItemTypes(left);
const elt = this.parseMaybeDefault(left.start, left.loc.start, left);
if (accessibility || readonly) {
if (accessibility || readonly || override) {
const pp: N.TSParameterProperty = this.startNodeAt(startPos, startLoc);
if (decorators.length) {
pp.decorators = decorators;
}
if (accessibility) pp.accessibility = accessibility;
if (readonly) pp.readonly = readonly;
if (override) pp.override = override;
if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") {
this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);
}

View File

@@ -1178,6 +1178,7 @@ export type TSParameterProperty = HasDecorators & {
// At least one of `accessibility` or `readonly` must be set.
accessibility?: ?Accessibility,
readonly?: ?true,
override?: ?true,
parameter: Identifier | AssignmentPattern,
};