feat(typescript): add delcare modifier support for vars, classes and functions (#1436)
parent
4b3835925e
commit
7a02e9ad27
|
@ -332,7 +332,11 @@ function genericPrintNoParens(path, options, print, args) {
|
||||||
]);
|
]);
|
||||||
case "FunctionDeclaration":
|
case "FunctionDeclaration":
|
||||||
case "FunctionExpression":
|
case "FunctionExpression":
|
||||||
return printFunctionDeclaration(path, print, options);
|
if (isNodeStartingWithDeclare(n, options)) {
|
||||||
|
parts.push("declare ");
|
||||||
|
}
|
||||||
|
parts.push(printFunctionDeclaration(path, print, options));
|
||||||
|
return concat(parts);
|
||||||
case "ArrowFunctionExpression": {
|
case "ArrowFunctionExpression": {
|
||||||
if (n.async) parts.push("async ");
|
if (n.async) parts.push("async ");
|
||||||
|
|
||||||
|
@ -996,6 +1000,7 @@ function genericPrintNoParens(path, options, print, args) {
|
||||||
}, "declarations");
|
}, "declarations");
|
||||||
|
|
||||||
parts = [
|
parts = [
|
||||||
|
isNodeStartingWithDeclare(n, options) ? "declare " : "",
|
||||||
n.kind,
|
n.kind,
|
||||||
" ",
|
" ",
|
||||||
printed[0],
|
printed[0],
|
||||||
|
@ -1476,7 +1481,11 @@ function genericPrintNoParens(path, options, print, args) {
|
||||||
case "ClassDeclaration":
|
case "ClassDeclaration":
|
||||||
case "ClassExpression":
|
case "ClassExpression":
|
||||||
case "TSAbstractClassDeclaration":
|
case "TSAbstractClassDeclaration":
|
||||||
return concat(printClass(path, options, print));
|
if (isNodeStartingWithDeclare(n, options)) {
|
||||||
|
parts.push("declare ");
|
||||||
|
}
|
||||||
|
parts.push(concat(printClass(path, options, print)));
|
||||||
|
return concat(parts);
|
||||||
case "TemplateElement":
|
case "TemplateElement":
|
||||||
return join(literalline, n.value.raw.split("\n"));
|
return join(literalline, n.value.raw.split("\n"));
|
||||||
case "TemplateLiteral":
|
case "TemplateLiteral":
|
||||||
|
@ -1684,7 +1693,7 @@ function genericPrintNoParens(path, options, print, args) {
|
||||||
case "InterfaceDeclaration": {
|
case "InterfaceDeclaration": {
|
||||||
if (
|
if (
|
||||||
n.type === "DeclareInterface" ||
|
n.type === "DeclareInterface" ||
|
||||||
isFlowNodeStartingWithDeclare(n, options)
|
isNodeStartingWithDeclare(n, options)
|
||||||
) {
|
) {
|
||||||
parts.push("declare ");
|
parts.push("declare ");
|
||||||
}
|
}
|
||||||
|
@ -1823,7 +1832,7 @@ function genericPrintNoParens(path, options, print, args) {
|
||||||
case "TypeAlias": {
|
case "TypeAlias": {
|
||||||
if (
|
if (
|
||||||
n.type === "DeclareTypeAlias" ||
|
n.type === "DeclareTypeAlias" ||
|
||||||
isFlowNodeStartingWithDeclare(n, options)
|
isNodeStartingWithDeclare(n, options)
|
||||||
) {
|
) {
|
||||||
parts.push("declare ");
|
parts.push("declare ");
|
||||||
}
|
}
|
||||||
|
@ -1933,7 +1942,7 @@ function genericPrintNoParens(path, options, print, args) {
|
||||||
return concat([path.call(print, "elementType"), "[]"]);
|
return concat([path.call(print, "elementType"), "[]"]);
|
||||||
case "TSPropertySignature":
|
case "TSPropertySignature":
|
||||||
parts.push(path.call(print, "name"));
|
parts.push(path.call(print, "name"));
|
||||||
parts.push(": ")
|
parts.push(": ");
|
||||||
parts.push(path.call(print, "typeAnnotation"));
|
parts.push(path.call(print, "typeAnnotation"));
|
||||||
|
|
||||||
return concat(parts);
|
return concat(parts);
|
||||||
|
@ -2133,7 +2142,6 @@ function printStatementSequence(path, options, print) {
|
||||||
parts.push(stmtPrinted);
|
parts.push(stmtPrinted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!options.semi && isClass) {
|
if (!options.semi && isClass) {
|
||||||
if (classPropMayCauseASIProblems(stmtPath)) {
|
if (classPropMayCauseASIProblems(stmtPath)) {
|
||||||
parts.push(";");
|
parts.push(";");
|
||||||
|
@ -2562,7 +2570,7 @@ function printReturnType(path, print) {
|
||||||
|
|
||||||
// prepend colon to TypeScript type annotation
|
// prepend colon to TypeScript type annotation
|
||||||
if (n.returnType && n.returnType.typeAnnotation) {
|
if (n.returnType && n.returnType.typeAnnotation) {
|
||||||
parts.unshift(": ")
|
parts.unshift(": ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n.predicate) {
|
if (n.predicate) {
|
||||||
|
@ -3658,14 +3666,16 @@ function isTypeAnnotationAFunction(node) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isFlowNodeStartingWithDeclare(node, options) {
|
function isNodeStartingWithDeclare(node, options) {
|
||||||
if (options.parser !== "flow") {
|
if (!(options.parser === "flow" || options.parser === "typescript")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return (
|
||||||
return options.originalText
|
options.originalText.slice(0, util.locStart(node)).match(/declare\s*$/) ||
|
||||||
.slice(0, util.locStart(node))
|
options.originalText
|
||||||
.match(/declare\s*$/);
|
.slice(node.range[0], node.range[1])
|
||||||
|
.startsWith("declare ")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function printArrayItems(path, options, printPath, print) {
|
function printArrayItems(path, options, printPath, print) {
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`ambientDeclarations.ts 1`] = `
|
||||||
|
declare var n;
|
||||||
|
|
||||||
|
declare var m: string;
|
||||||
|
|
||||||
|
declare function fn1();
|
||||||
|
|
||||||
|
declare function fn2(n: string): number;
|
||||||
|
|
||||||
|
declare function fn3(n: string): number;
|
||||||
|
declare function fn4(n: number, y: number): string;
|
||||||
|
|
||||||
|
declare function fn5(x, y?);
|
||||||
|
declare function fn6(e?);
|
||||||
|
declare function fn7(x, y?, ...z);
|
||||||
|
declare function fn8(y?, ...z: number[]);
|
||||||
|
declare function fn9(...q: {}[]);
|
||||||
|
declare function fn10<T>(...q: T[]);
|
||||||
|
|
||||||
|
declare class cls {
|
||||||
|
constructor();
|
||||||
|
method(): cls;
|
||||||
|
static static(p): number;
|
||||||
|
static q;
|
||||||
|
private fn();
|
||||||
|
private static fns();
|
||||||
|
}
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
declare var n;
|
||||||
|
|
||||||
|
declare var m: string;
|
||||||
|
|
||||||
|
declare function fn1()
|
||||||
|
|
||||||
|
declare function fn2(n: string): number
|
||||||
|
|
||||||
|
declare function fn3(n: string): number
|
||||||
|
declare function fn4(n: number, y: number): string
|
||||||
|
|
||||||
|
declare function fn5(x, y?)
|
||||||
|
declare function fn6(e?)
|
||||||
|
declare function fn7(x, y?, ...z)
|
||||||
|
declare function fn8(y?, ...z: number[])
|
||||||
|
declare function fn9(...q: {}[])
|
||||||
|
declare function fn10<T>(...q: T[])
|
||||||
|
|
||||||
|
declare class cls {
|
||||||
|
constructor();
|
||||||
|
method(): cls;
|
||||||
|
static static(p): number;
|
||||||
|
static q;
|
||||||
|
private fn();
|
||||||
|
static private fns();
|
||||||
|
}
|
||||||
|
|
||||||
|
`;
|
|
@ -0,0 +1,26 @@
|
||||||
|
declare var n;
|
||||||
|
|
||||||
|
declare var m: string;
|
||||||
|
|
||||||
|
declare function fn1();
|
||||||
|
|
||||||
|
declare function fn2(n: string): number;
|
||||||
|
|
||||||
|
declare function fn3(n: string): number;
|
||||||
|
declare function fn4(n: number, y: number): string;
|
||||||
|
|
||||||
|
declare function fn5(x, y?);
|
||||||
|
declare function fn6(e?);
|
||||||
|
declare function fn7(x, y?, ...z);
|
||||||
|
declare function fn8(y?, ...z: number[]);
|
||||||
|
declare function fn9(...q: {}[]);
|
||||||
|
declare function fn10<T>(...q: T[]);
|
||||||
|
|
||||||
|
declare class cls {
|
||||||
|
constructor();
|
||||||
|
method(): cls;
|
||||||
|
static static(p): number;
|
||||||
|
static q;
|
||||||
|
private fn();
|
||||||
|
private static fns();
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
run_spec(__dirname, { parser: "typescript" });
|
|
@ -5,7 +5,7 @@ declare class MyArray<T> extends Array<T> {
|
||||||
sort(compareFn?: (a: T, b: T) => number): this;
|
sort(compareFn?: (a: T, b: T) => number): this;
|
||||||
}
|
}
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
class MyArray<T> extends Array {
|
declare class MyArray<T> extends Array {
|
||||||
sort(compareFn?: (a: T, b: T) => number): this;
|
sort(compareFn?: (a: T, b: T) => number): this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`declareModifier.d.ts 1`] = `
|
||||||
|
|
||||||
|
declare function a();
|
||||||
|
|
||||||
|
declare const b: string;
|
||||||
|
|
||||||
|
declare var c: number;
|
||||||
|
|
||||||
|
declare let d: any;
|
||||||
|
|
||||||
|
declare class e {}
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
declare function a()
|
||||||
|
|
||||||
|
declare const b: string;
|
||||||
|
|
||||||
|
declare var c: number;
|
||||||
|
|
||||||
|
declare let d: any;
|
||||||
|
|
||||||
|
declare class e {}
|
||||||
|
|
||||||
|
`;
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
declare function a();
|
||||||
|
|
||||||
|
declare const b: string;
|
||||||
|
|
||||||
|
declare var c: number;
|
||||||
|
|
||||||
|
declare let d: any;
|
||||||
|
|
||||||
|
declare class e {}
|
|
@ -0,0 +1 @@
|
||||||
|
run_spec(__dirname, { parser: "typescript" });
|
Loading…
Reference in New Issue