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

feat: fix issues in AST #42

Merged
merged 2 commits into from
Dec 19, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ast-node-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ export const AST_NODE_TYPES: { [key: string]: string } = {
ConditionalExpression: 'ConditionalExpression',
ContinueStatement: 'ContinueStatement',
DebuggerStatement: 'DebuggerStatement',
DeclareFunction: 'DeclareFunction',
Decorator: 'Decorator',
DoWhileStatement: 'DoWhileStatement',
EmptyStatement: 'EmptyStatement',
Expand Down Expand Up @@ -100,6 +99,7 @@ export const AST_NODE_TYPES: { [key: string]: string } = {
TSConstructorType: 'TSConstructorType',
TSConstructSignature: 'TSConstructSignature',
TSDeclareKeyword: 'TSDeclareKeyword',
TSDeclareFunction: 'TSDeclareFunction',
TSEnumDeclaration: 'TSEnumDeclaration',
TSEnumMember: 'TSEnumMember',
TSExportAssignment: 'TSExportAssignment',
Expand Down
36 changes: 21 additions & 15 deletions src/convert.ts
Original file line number Diff line number Diff line change
Expand Up @@ -694,15 +694,8 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {

case SyntaxKind.FunctionDeclaration: {
let functionDeclarationType = AST_NODE_TYPES.FunctionDeclaration;

if (node.modifiers && node.modifiers.length) {
const isDeclareFunction = nodeUtils.hasModifier(
SyntaxKind.DeclareKeyword,
node
);
if (isDeclareFunction) {
functionDeclarationType = AST_NODE_TYPES.DeclareFunction;
}
if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
functionDeclarationType = AST_NODE_TYPES.TSDeclareFunction;
}

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

// Process returnType
if (node.type) {
(result as any).returnType = convertTypeAnnotation(node.type);
}

if (functionDeclarationType === AST_NODE_TYPES.TSDeclareFunction) {
result.declare = true;
}

// Process typeParameters
if (node.typeParameters && node.typeParameters.length) {
result.typeParameters = convertTSTypeParametersToTypeParametersDeclaration(
Expand Down Expand Up @@ -758,6 +755,10 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
kind: nodeUtils.getDeclarationKind(node.declarationList)
});

if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
result.declare = true;
}

// check for exports
result = nodeUtils.fixExports(node, result as any, ast);
break;
Expand Down Expand Up @@ -1618,6 +1619,10 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
);
}

if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
result.declare = true;
}

if (node.decorators) {
result.decorators = convertDecorators(node.decorators);
}
Expand Down Expand Up @@ -2400,10 +2405,6 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
}

const hasImplementsClause = interfaceHeritageClauses.length > 0;
const hasAbstractKeyword = nodeUtils.hasModifier(
SyntaxKind.AbstractKeyword,
node
);
const interfaceOpenBrace = nodeUtils.findNextToken(
interfaceLastClassToken,
ast,
Expand All @@ -2422,7 +2423,6 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
};

Object.assign(result, {
abstract: hasAbstractKeyword,
type: AST_NODE_TYPES.TSInterfaceDeclaration,
body: interfaceBody,
id: convertChild(node.name),
Expand All @@ -2440,6 +2440,12 @@ export default function convert(config: ConvertConfig): ESTreeNode | null {
if (node.decorators) {
result.decorators = convertDecorators(node.decorators);
}
if (nodeUtils.hasModifier(SyntaxKind.AbstractKeyword, node)) {
result.abstract = true;
}
if (nodeUtils.hasModifier(SyntaxKind.DeclareKeyword, node)) {
result.declare = true;
}
// check for exports
result = nodeUtils.fixExports(node, result as any, ast);

Expand Down
1 change: 1 addition & 0 deletions src/temp-types-based-on-js-source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export interface ESTreeNode {
static?: boolean;
export?: boolean;
parameter?: any;
abstract?: boolean;
}

export interface ESTreeComment extends ESTreeNode {}
Expand Down
17 changes: 12 additions & 5 deletions tests/ast-alignment/fixtures-to-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -395,11 +395,6 @@ let fixturePatternConfigsToTest = [
'class-with-implements-generic',
'class-with-implements',
'class-with-extends-and-implements',
/**
* Babylon: TSDeclareFunction + declare: true
* tsep: DeclareFunction
*/
'declare-function',
/**
* Babylon: TSTypeReference + identifier
* tsep: TSUnknownKeyword
Expand Down Expand Up @@ -508,6 +503,18 @@ let fixturePatternConfigsToTest = [
]
}),

createFixturePatternConfigFor('typescript/declare', {
fileType: 'ts',
ignore: [
/**
* AST difference
*/
'type-alias',
'interface',
'abstract-class'
]
}),

createFixturePatternConfigFor('typescript/namespaces-and-modules', {
fileType: 'ts',
ignore: [
Expand Down
3 changes: 3 additions & 0 deletions tests/fixtures/typescript/declare/abstract-class.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
declare abstract class Foo {

}
3 changes: 3 additions & 0 deletions tests/fixtures/typescript/declare/class.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
declare class Foo {

}
4 changes: 4 additions & 0 deletions tests/fixtures/typescript/declare/enum.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
declare enum Foo {
Bar,
Baz
}
1 change: 1 addition & 0 deletions tests/fixtures/typescript/declare/function.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare function foo(): void
3 changes: 3 additions & 0 deletions tests/fixtures/typescript/declare/interface.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
declare interface Foo {

}
3 changes: 3 additions & 0 deletions tests/fixtures/typescript/declare/module.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
declare module Foo {

}
3 changes: 3 additions & 0 deletions tests/fixtures/typescript/declare/namespace.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
declare namespace Foo {

}
1 change: 1 addition & 0 deletions tests/fixtures/typescript/declare/type-alias.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare type Foo = string
1 change: 1 addition & 0 deletions tests/fixtures/typescript/declare/variable.src.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare var foo: any;
2 changes: 0 additions & 2 deletions tests/lib/__snapshots__/javascript.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -105760,7 +105760,6 @@ Object {
"body": Array [
Object {
"async": false,
"body": null,
"expression": false,
"generator": false,
"id": Object {
Expand Down Expand Up @@ -106077,7 +106076,6 @@ Object {
"body": Array [
Object {
"async": false,
"body": null,
"expression": false,
"generator": false,
"id": Object {
Expand Down
Loading