Skip to content

Commit b21136a

Browse files
authored
feat(flags): add isAsync flag for methods and functions (#92)
Adds a flag to methods and functions that declares if the object is modified with `async`. Closes #66.
1 parent 617764d commit b21136a

File tree

13 files changed

+251
-30
lines changed

13 files changed

+251
-30
lines changed

src/declarations/Declaration.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,3 +209,20 @@ export interface StaticDeclaration extends Declaration {
209209
*/
210210
isStatic: boolean;
211211
}
212+
213+
/**
214+
* Interface for possible async declarations.
215+
*
216+
* @export
217+
* @interface AsyncDeclaration
218+
* @extends {Declaration}
219+
*/
220+
export interface AsyncDeclaration extends Declaration {
221+
/**
222+
* Defines if the declaration is async or not.
223+
*
224+
* @type {boolean}
225+
* @memberof AsyncDeclaration
226+
*/
227+
isAsync: boolean;
228+
}

src/declarations/FunctionDeclaration.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CallableDeclaration, ExportableDeclaration } from './Declaration';
1+
import { AsyncDeclaration, CallableDeclaration, ExportableDeclaration } from './Declaration';
22
import { ParameterDeclaration } from './ParameterDeclaration';
33
import { VariableDeclaration } from './VariableDeclaration';
44

@@ -11,13 +11,14 @@ import { VariableDeclaration } from './VariableDeclaration';
1111
* @implements {CallableDeclaration}
1212
* @implements {ExportableDeclaration}
1313
*/
14-
export class FunctionDeclaration implements CallableDeclaration, ExportableDeclaration {
14+
export class FunctionDeclaration implements AsyncDeclaration, CallableDeclaration, ExportableDeclaration {
1515
public parameters: ParameterDeclaration[] = [];
1616
public variables: VariableDeclaration[] = [];
1717

1818
constructor(
1919
public name: string,
2020
public isExported: boolean,
21+
public isAsync: boolean,
2122
public type?: string,
2223
public start?: number,
2324
public end?: number,

src/declarations/MethodDeclaration.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
AbstractDeclaration,
3+
AsyncDeclaration,
34
CallableDeclaration,
45
OptionalDeclaration,
56
ScopedDeclaration,
@@ -22,6 +23,7 @@ import { VariableDeclaration } from './VariableDeclaration';
2223
*/
2324
export class MethodDeclaration implements
2425
AbstractDeclaration,
26+
AsyncDeclaration,
2527
CallableDeclaration,
2628
OptionalDeclaration,
2729
ScopedDeclaration,
@@ -38,6 +40,7 @@ export class MethodDeclaration implements
3840
public type: string | undefined,
3941
public isOptional: boolean,
4042
public isStatic: boolean,
43+
public isAsync: boolean,
4144
public start?: number,
4245
public end?: number,
4346
) { }

src/node-parser/class-parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ export function parseClass(tsResource: Resource, node: ClassDeclaration): void {
204204
getNodeType(o.type),
205205
!!o.questionToken,
206206
containsModifier(o, SyntaxKind.StaticKeyword),
207+
containsModifier(o, SyntaxKind.AsyncKeyword),
207208
o.getStart(),
208209
o.getEnd(),
209210
);

src/node-parser/function-parser.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,13 @@ import {
3030
isPropertySignature,
3131
} from '../type-guards/TypescriptGuards';
3232
import { parseIdentifier } from './identifier-parser';
33-
import { getDefaultResourceIdentifier, getNodeType, isNodeDefaultExported, isNodeExported } from './parse-utilities';
33+
import {
34+
containsModifier,
35+
getDefaultResourceIdentifier,
36+
getNodeType,
37+
isNodeDefaultExported,
38+
isNodeExported,
39+
} from './parse-utilities';
3440
import { parseVariable } from './variable-parser';
3541

3642
/**
@@ -137,7 +143,12 @@ export function parseMethodParams(
137143
export function parseFunction(resource: Resource, node: FunctionDeclaration): void {
138144
const name = node.name ? node.name.text : getDefaultResourceIdentifier(resource);
139145
const func = new TshFunction(
140-
name, isNodeExported(node), getNodeType(node.type), node.getStart(), node.getEnd(),
146+
name,
147+
isNodeExported(node),
148+
containsModifier(node, SyntaxKind.AsyncKeyword),
149+
getNodeType(node.type),
150+
node.getStart(),
151+
node.getEnd(),
141152
);
142153
if (isNodeDefaultExported(node)) {
143154
func.isExported = false;

src/node-parser/interface-parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export function parseInterface(resource: Resource, node: InterfaceDeclaration):
5757
getNodeType(o.type),
5858
!!o.questionToken,
5959
containsModifier(o, SyntaxKind.StaticKeyword),
60+
containsModifier(o, SyntaxKind.AsyncKeyword),
6061
o.getStart(),
6162
o.getEnd(),
6263
);

test/__snapshots__/TypescriptParser.spec.ts.snap

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ ClassDeclaration {
2323
MethodDeclaration {
2424
"end": 203,
2525
"isAbstract": false,
26+
"isAsync": false,
2627
"isOptional": false,
2728
"isStatic": false,
2829
"name": "method1",
@@ -35,6 +36,7 @@ ClassDeclaration {
3536
MethodDeclaration {
3637
"end": 237,
3738
"isAbstract": false,
39+
"isAsync": false,
3840
"isOptional": false,
3941
"isStatic": false,
4042
"name": "method2",
@@ -47,6 +49,7 @@ ClassDeclaration {
4749
MethodDeclaration {
4850
"end": 300,
4951
"isAbstract": false,
52+
"isAsync": false,
5053
"isOptional": false,
5154
"isStatic": false,
5255
"name": "method3",
@@ -132,6 +135,7 @@ ClassDeclaration {
132135
MethodDeclaration {
133136
"end": 55,
134137
"isAbstract": false,
138+
"isAsync": false,
135139
"isOptional": false,
136140
"isStatic": false,
137141
"name": "method1",
@@ -144,6 +148,7 @@ ClassDeclaration {
144148
MethodDeclaration {
145149
"end": 100,
146150
"isAbstract": true,
151+
"isAsync": false,
147152
"isOptional": false,
148153
"isStatic": false,
149154
"name": "abstractMethod",
@@ -259,6 +264,7 @@ Array [
259264
MethodDeclaration {
260265
"end": 1251,
261266
"isAbstract": false,
267+
"isAsync": false,
262268
"isOptional": false,
263269
"isStatic": false,
264270
"name": "objMethod",
@@ -298,6 +304,7 @@ Array [
298304
MethodDeclaration {
299305
"end": 1307,
300306
"isAbstract": false,
307+
"isAsync": false,
301308
"isOptional": false,
302309
"isStatic": false,
303310
"name": "arrMethod",
@@ -337,6 +344,7 @@ Array [
337344
MethodDeclaration {
338345
"end": 1386,
339346
"isAbstract": false,
347+
"isAsync": false,
340348
"isOptional": false,
341349
"isStatic": false,
342350
"name": "objAndArrMethod",
@@ -478,6 +486,7 @@ ClassDeclaration {
478486
MethodDeclaration {
479487
"end": 1621,
480488
"isAbstract": false,
489+
"isAsync": false,
481490
"isOptional": false,
482491
"isStatic": true,
483492
"name": "method",
@@ -490,6 +499,7 @@ ClassDeclaration {
490499
MethodDeclaration {
491500
"end": 1660,
492501
"isAbstract": false,
502+
"isAsync": false,
493503
"isOptional": false,
494504
"isStatic": false,
495505
"name": "methodNonStatic",
@@ -546,6 +556,7 @@ EnumDeclaration {
546556
exports[`TypescriptParser Declaration parsing Functions should parse a function correctly 1`] = `
547557
FunctionDeclaration {
548558
"end": 84,
559+
"isAsync": false,
549560
"isExported": false,
550561
"name": "function1",
551562
"parameters": Array [
@@ -574,6 +585,7 @@ FunctionDeclaration {
574585
exports[`TypescriptParser Declaration parsing Functions should parse an exported function correctly 1`] = `
575586
FunctionDeclaration {
576587
"end": 219,
588+
"isAsync": false,
577589
"isExported": true,
578590
"name": "function2",
579591
"parameters": Array [
@@ -736,6 +748,7 @@ InterfaceDeclaration {
736748
MethodDeclaration {
737749
"end": 93,
738750
"isAbstract": true,
751+
"isAsync": false,
739752
"isOptional": false,
740753
"isStatic": false,
741754
"name": "method1",
@@ -748,6 +761,7 @@ InterfaceDeclaration {
748761
MethodDeclaration {
749762
"end": 128,
750763
"isAbstract": true,
764+
"isAsync": false,
751765
"isOptional": false,
752766
"isStatic": false,
753767
"name": "method2",
@@ -799,6 +813,7 @@ InterfaceDeclaration {
799813
MethodDeclaration {
800814
"end": 247,
801815
"isAbstract": true,
816+
"isAsync": false,
802817
"isOptional": false,
803818
"isStatic": false,
804819
"name": "method1",
@@ -832,6 +847,7 @@ InterfaceDeclaration {
832847
MethodDeclaration {
833848
"end": 284,
834849
"isAbstract": true,
850+
"isAsync": false,
835851
"isOptional": false,
836852
"isStatic": false,
837853
"name": "method2",
@@ -897,6 +913,7 @@ InterfaceDeclaration {
897913
MethodDeclaration {
898914
"end": 680,
899915
"isAbstract": true,
916+
"isAsync": false,
900917
"isOptional": false,
901918
"isStatic": false,
902919
"name": "nonOptionalFunction2",
@@ -909,6 +926,7 @@ InterfaceDeclaration {
909926
MethodDeclaration {
910927
"end": 712,
911928
"isAbstract": true,
929+
"isAsync": false,
912930
"isOptional": true,
913931
"isStatic": false,
914932
"name": "optionalFunction3",
@@ -990,6 +1008,7 @@ Module {
9901008
"declarations": Array [
9911009
FunctionDeclaration {
9921010
"end": 62,
1011+
"isAsync": false,
9931012
"isExported": true,
9941013
"name": "modFunc",
9951014
"parameters": Array [],
@@ -1273,6 +1292,7 @@ ObjectBoundParameterDeclaration {
12731292
exports[`TypescriptParser Declaration parsing Parameters should parse some mixed parameters (all above) 1`] = `
12741293
FunctionDeclaration {
12751294
"end": 654,
1295+
"isAsync": false,
12761296
"isExported": false,
12771297
"name": "mixed",
12781298
"parameters": Array [
@@ -1846,6 +1866,7 @@ File {
18461866
MethodDeclaration {
18471867
"end": 304,
18481868
"isAbstract": false,
1869+
"isAsync": false,
18491870
"isOptional": false,
18501871
"isStatic": false,
18511872
"name": "render",
@@ -1912,6 +1933,7 @@ Array [
19121933
MethodDeclaration {
19131934
"end": 304,
19141935
"isAbstract": false,
1936+
"isAsync": false,
19151937
"isOptional": false,
19161938
"isStatic": false,
19171939
"name": "render",
@@ -1978,6 +2000,7 @@ File {
19782000
MethodDeclaration {
19792001
"end": 304,
19802002
"isAbstract": false,
2003+
"isAsync": false,
19812004
"isOptional": false,
19822005
"isStatic": false,
19832006
"name": "render",
@@ -2052,6 +2075,7 @@ File {
20522075
MethodDeclaration {
20532076
"end": 93,
20542077
"isAbstract": false,
2078+
"isAsync": false,
20552079
"isOptional": false,
20562080
"isStatic": false,
20572081
"name": "doSomething",
@@ -2112,6 +2136,7 @@ Array [
21122136
MethodDeclaration {
21132137
"end": 93,
21142138
"isAbstract": false,
2139+
"isAsync": false,
21152140
"isOptional": false,
21162141
"isStatic": false,
21172142
"name": "doSomething",
@@ -2172,6 +2197,7 @@ File {
21722197
MethodDeclaration {
21732198
"end": 93,
21742199
"isAbstract": false,
2200+
"isAsync": false,
21752201
"isOptional": false,
21762202
"isStatic": false,
21772203
"name": "doSomething",
@@ -2273,6 +2299,7 @@ File {
22732299
MethodDeclaration {
22742300
"end": 142,
22752301
"isAbstract": false,
2302+
"isAsync": false,
22762303
"isOptional": false,
22772304
"isStatic": false,
22782305
"name": "test",
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Class1 {
2+
public static async staticAsync() { }
3+
public func(): void { }
4+
public async asyncFunc(): Promise<void> { }
5+
public async asyncFuncWithoutType() { }
6+
}
7+
8+
function func(): void { }
9+
async function asyncFunc(): Promise<void> { }
10+
async function asyncFuncWithoutType() { }
11+
function promiseFunc(): Promise<void> { }

0 commit comments

Comments
 (0)