babel-parser: Add new typescript plugin option dts: boolean (#13113)
This commit is contained in:
@@ -1689,7 +1689,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
kind = "let";
|
||||
}
|
||||
|
||||
return this.tsInDeclareContext(() => {
|
||||
return this.tsInAmbientContext(() => {
|
||||
switch (starttype) {
|
||||
case tt._function:
|
||||
nany.declare = true;
|
||||
@@ -1979,7 +1979,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
this.finishNode(node, bodilessType);
|
||||
return;
|
||||
}
|
||||
if (bodilessType === "TSDeclareFunction" && this.state.isDeclareContext) {
|
||||
if (bodilessType === "TSDeclareFunction" && this.state.isAmbientContext) {
|
||||
this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);
|
||||
if (
|
||||
// $FlowIgnore
|
||||
@@ -2342,7 +2342,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
);
|
||||
};
|
||||
if (member.declare) {
|
||||
this.tsInDeclareContext(callParseClassMember);
|
||||
this.tsInAmbientContext(callParseClassMember);
|
||||
} else {
|
||||
callParseClassMember();
|
||||
}
|
||||
@@ -2569,7 +2569,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
parseClassProperty(node: N.ClassProperty): N.ClassProperty {
|
||||
this.parseClassPropertyAnnotation(node);
|
||||
|
||||
if (this.state.isDeclareContext && this.match(tt.eq)) {
|
||||
if (this.state.isAmbientContext && this.match(tt.eq)) {
|
||||
this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);
|
||||
}
|
||||
|
||||
@@ -2824,7 +2824,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
if (this.eat(tt.question)) {
|
||||
if (
|
||||
param.type !== "Identifier" &&
|
||||
!this.state.isDeclareContext &&
|
||||
!this.state.isAmbientContext &&
|
||||
!this.state.inType
|
||||
) {
|
||||
this.raise(param.start, TSErrors.PatternIsOptional);
|
||||
@@ -2935,7 +2935,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
|
||||
checkCommaAfterRest(close) {
|
||||
if (
|
||||
this.state.isDeclareContext &&
|
||||
this.state.isAmbientContext &&
|
||||
this.match(tt.comma) &&
|
||||
this.lookaheadCharCode() === close
|
||||
) {
|
||||
@@ -3081,13 +3081,13 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
return param;
|
||||
}
|
||||
|
||||
tsInDeclareContext<T>(cb: () => T): T {
|
||||
const oldIsDeclareContext = this.state.isDeclareContext;
|
||||
this.state.isDeclareContext = true;
|
||||
tsInAmbientContext<T>(cb: () => T): T {
|
||||
const oldIsAmbientContext = this.state.isAmbientContext;
|
||||
this.state.isAmbientContext = true;
|
||||
try {
|
||||
return cb();
|
||||
} finally {
|
||||
this.state.isDeclareContext = oldIsDeclareContext;
|
||||
this.state.isAmbientContext = oldIsAmbientContext;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3152,4 +3152,22 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
}
|
||||
return method;
|
||||
}
|
||||
|
||||
shouldParseAsAmbientContext(): boolean {
|
||||
return !!this.getPluginOption("typescript", "dts");
|
||||
}
|
||||
|
||||
parse() {
|
||||
if (this.shouldParseAsAmbientContext()) {
|
||||
this.state.isAmbientContext = true;
|
||||
}
|
||||
return super.parse();
|
||||
}
|
||||
|
||||
getExpression() {
|
||||
if (this.shouldParseAsAmbientContext()) {
|
||||
this.state.isAmbientContext = true;
|
||||
}
|
||||
return super.getExpression();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -65,7 +65,7 @@ export default class State {
|
||||
inPropertyName: boolean = false;
|
||||
hasFlowComment: boolean = false;
|
||||
isIterator: boolean = false;
|
||||
isDeclareContext: boolean = false;
|
||||
isAmbientContext: boolean = false;
|
||||
inAbstractClass: boolean = false;
|
||||
|
||||
// For the smartPipelines plugin:
|
||||
|
||||
Reference in New Issue
Block a user