Skip to content
This repository was archived by the owner on Jan 14, 2019. It is now read-only.

Commit 0d89682

Browse files
committed
feat: fix issues in AST
BREAKING CHANGE: This changes the AST
1 parent f5dcd5d commit 0d89682

15 files changed

+2179
-382
lines changed

src/ast-node-types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ export const AST_NODE_TYPES: { [key: string]: string } = {
2626
ConditionalExpression: 'ConditionalExpression',
2727
ContinueStatement: 'ContinueStatement',
2828
DebuggerStatement: 'DebuggerStatement',
29-
DeclareFunction: 'DeclareFunction',
3029
Decorator: 'Decorator',
3130
DoWhileStatement: 'DoWhileStatement',
3231
EmptyStatement: 'EmptyStatement',
@@ -100,6 +99,7 @@ export const AST_NODE_TYPES: { [key: string]: string } = {
10099
TSConstructorType: 'TSConstructorType',
101100
TSConstructSignature: 'TSConstructSignature',
102101
TSDeclareKeyword: 'TSDeclareKeyword',
102+
TSDeclareFunction: 'TSDeclareFunction',
103103
TSEnumDeclaration: 'TSEnumDeclaration',
104104
TSEnumMember: 'TSEnumMember',
105105
TSExportAssignment: 'TSExportAssignment',

src/convert.ts

+21-15
Original file line numberDiff line numberDiff line change
@@ -694,15 +694,8 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
694694

695695
case SyntaxKind.FunctionDeclaration: {
696696
let functionDeclarationType = AST_NODE_TYPES.FunctionDeclaration;
697-
698-
if (node.modifiers && node.modifiers.length) {
699-
const isDeclareFunction = nodeUtils.hasModifier(
700-
SyntaxKind.DeclareKeyword,
701-
node
702-
);
703-
if (isDeclareFunction) {
704-
functionDeclarationType = AST_NODE_TYPES.DeclareFunction;
705-
}
697+
if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
698+
functionDeclarationType = AST_NODE_TYPES.TSDeclareFunction;
706699
}
707700

708701
Object.assign(result, {
@@ -712,14 +705,18 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
712705
expression: false,
713706
async: nodeUtils.hasModifier(SyntaxKind.AsyncKeyword, node),
714707
params: convertParameters(node.parameters),
715-
body: convertChild(node.body)
708+
body: convertChild(node.body) || undefined
716709
});
717710

718711
// Process returnType
719712
if (node.type) {
720713
(result as any).returnType = convertTypeAnnotation(node.type);
721714
}
722715

716+
if (functionDeclarationType === AST_NODE_TYPES.TSDeclareFunction) {
717+
result.declare = true;
718+
}
719+
723720
// Process typeParameters
724721
if (node.typeParameters && node.typeParameters.length) {
725722
result.typeParameters = convertTSTypeParametersToTypeParametersDeclaration(
@@ -758,6 +755,10 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
758755
kind: nodeUtils.getDeclarationKind(node.declarationList)
759756
});
760757

758+
if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
759+
result.declare = true;
760+
}
761+
761762
// check for exports
762763
result = nodeUtils.fixExports(node, result as any, ast);
763764
break;
@@ -1618,6 +1619,10 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
16181619
);
16191620
}
16201621

1622+
if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
1623+
result.declare = true;
1624+
}
1625+
16211626
if (node.decorators) {
16221627
result.decorators = convertDecorators(node.decorators);
16231628
}
@@ -2400,10 +2405,6 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
24002405
}
24012406

24022407
const hasImplementsClause = interfaceHeritageClauses.length > 0;
2403-
const hasAbstractKeyword = nodeUtils.hasModifier(
2404-
SyntaxKind.AbstractKeyword,
2405-
node
2406-
);
24072408
const interfaceOpenBrace = nodeUtils.findNextToken(
24082409
interfaceLastClassToken,
24092410
ast,
@@ -2422,7 +2423,6 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
24222423
};
24232424

24242425
Object.assign(result, {
2425-
abstract: hasAbstractKeyword,
24262426
type: AST_NODE_TYPES.TSInterfaceDeclaration,
24272427
body: interfaceBody,
24282428
id: convertChild(node.name),
@@ -2440,6 +2440,12 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
24402440
if (node.decorators) {
24412441
result.decorators = convertDecorators(node.decorators);
24422442
}
2443+
if (nodeUtils.hasModifier(SyntaxKind.AbstractKeyword, node)) {
2444+
result.abstract = true;
2445+
}
2446+
if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
2447+
result.declare = true;
2448+
}
24432449
// check for exports
24442450
result = nodeUtils.fixExports(node, result as any, ast);
24452451

src/temp-types-based-on-js-source.ts

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export interface ESTreeNode {
4141
static?: boolean;
4242
export?: boolean;
4343
parameter?: any;
44+
abstract?: boolean;
4445
}
4546

4647
export interface ESTreeComment extends ESTreeNode {}

tests/ast-alignment/fixtures-to-test.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,6 @@ let fixturePatternConfigsToTest = [
395395
'class-with-implements-generic',
396396
'class-with-implements',
397397
'class-with-extends-and-implements',
398-
/**
399-
* Babylon: TSDeclareFunction + declare: true
400-
* tsep: DeclareFunction
401-
*/
402-
'declare-function',
403398
/**
404399
* Babylon: TSTypeReference + identifier
405400
* tsep: TSUnknownKeyword
@@ -508,6 +503,18 @@ let fixturePatternConfigsToTest = [
508503
]
509504
}),
510505

506+
createFixturePatternConfigFor('typescript/declare', {
507+
fileType: 'ts',
508+
ignore: [
509+
/**
510+
* AST difference
511+
*/
512+
'type-alias',
513+
'interface',
514+
'abstract-class'
515+
]
516+
}),
517+
511518
createFixturePatternConfigFor('typescript/namespaces-and-modules', {
512519
fileType: 'ts',
513520
ignore: [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
declare abstract class Foo {
2+
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
declare class Foo {
2+
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
declare enum Foo {
2+
Bar,
3+
Baz
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare function foo(): void
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
declare interface Foo {
2+
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
declare module Foo {
2+
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
declare namespace Foo {
2+
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare type Foo = string
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare var foo: any;

tests/lib/__snapshots__/javascript.ts.snap

-2
Original file line numberDiff line numberDiff line change
@@ -105760,7 +105760,6 @@ Object {
105760105760
"body": Array [
105761105761
Object {
105762105762
"async": false,
105763-
"body": null,
105764105763
"expression": false,
105765105764
"generator": false,
105766105765
"id": Object {
@@ -106077,7 +106076,6 @@ Object {
106077106076
"body": Array [
106078106077
Object {
106079106078
"async": false,
106080-
"body": null,
106081106079
"expression": false,
106082106080
"generator": false,
106083106081
"id": Object {

0 commit comments

Comments
 (0)