@@ -109,6 +109,10 @@ export interface Node extends TextRange {
109109}
110110
111111export function createNode ( kind : SyntaxKind , tsOriginal ?: ts . Node , parent ?: Node ) : Node {
112+ if ( tsOriginal === undefined ) {
113+ return { kind, parent} ;
114+ }
115+
112116 const sourcePosition = getSourcePosition ( tsOriginal ) ;
113117 if ( sourcePosition ) {
114118 return { kind, parent, line : sourcePosition . line , column : sourcePosition . column } ;
@@ -128,7 +132,11 @@ export function setNodePosition<T extends Node>(node: T, position: TextRange): T
128132 return node ;
129133}
130134
131- export function setNodeOriginal < T extends Node > ( node : T , tsOriginal : ts . Node ) : T {
135+ export function setNodeOriginal < T extends Node > ( node : T | undefined , tsOriginal : ts . Node ) : T | undefined {
136+ if ( node === undefined ) {
137+ return undefined ;
138+ }
139+
132140 const sourcePosition = getSourcePosition ( tsOriginal ) ;
133141 if ( sourcePosition ) {
134142 setNodePosition ( node , sourcePosition ) ;
@@ -172,14 +180,14 @@ export function getOriginalPos(node: Node): TextRange {
172180
173181export interface Block extends Node {
174182 kind : SyntaxKind . Block ;
175- statements ? : Statement [ ] ;
183+ statements : Statement [ ] ;
176184}
177185
178186export function isBlock ( node : Node ) : node is Block {
179187 return node . kind === SyntaxKind . Block ;
180188}
181189
182- export function createBlock ( statements ? : Statement [ ] , tsOriginal ?: ts . Node , parent ?: Node ) : Block {
190+ export function createBlock ( statements : Statement [ ] , tsOriginal ?: ts . Node , parent ?: Node ) : Block {
183191 const block = createNode ( SyntaxKind . Block , tsOriginal , parent ) as Block ;
184192 setParent ( statements , block ) ;
185193 block . statements = statements ;
@@ -192,14 +200,14 @@ export interface Statement extends Node {
192200
193201export interface DoStatement extends Statement {
194202 kind : SyntaxKind . DoStatement ;
195- statements ? : Statement [ ] ;
203+ statements : Statement [ ] ;
196204}
197205
198206export function isDoStatement ( node : Node ) : node is DoStatement {
199207 return node . kind === SyntaxKind . DoStatement ;
200208}
201209
202- export function createDoStatement ( statements ? : Statement [ ] , tsOriginal ?: ts . Node , parent ?: Node ) : DoStatement {
210+ export function createDoStatement ( statements : Statement [ ] , tsOriginal ?: ts . Node , parent ?: Node ) : DoStatement {
203211 const statement = createNode ( SyntaxKind . DoStatement , tsOriginal , parent ) as DoStatement ;
204212 setParent ( statements , statement ) ;
205213 statement . statements = statements ;
@@ -257,7 +265,7 @@ export function isAssignmentStatement(node: Node): node is AssignmentStatement {
257265
258266export function createAssignmentStatement (
259267 left : IdentifierOrTableIndexExpression | IdentifierOrTableIndexExpression [ ] ,
260- right : Expression | Expression [ ] ,
268+ right ? : Expression | Expression [ ] ,
261269 tsOriginal ?: ts . Node ,
262270 parent ?: Node
263271) : AssignmentStatement
@@ -273,7 +281,7 @@ export function createAssignmentStatement(
273281 if ( Array . isArray ( right ) ) {
274282 statement . right = right ;
275283 } else {
276- statement . right = [ right ] ;
284+ statement . right = right ? [ right ] : [ ] ;
277285 }
278286 return statement ;
279287}
@@ -878,18 +886,19 @@ export function isFunctionDefinition(statement: VariableDeclarationStatement | A
878886 : statement is FunctionDefinition
879887{
880888 return statement . left . length === 1
881- && statement . right
889+ && statement . right !== undefined
882890 && statement . right . length === 1
883891 && isFunctionExpression ( statement . right [ 0 ] ) ;
884892}
885893
886894export type InlineFunctionExpression = FunctionExpression & {
887- body : { statements : [ ReturnStatement ] ; } ;
895+ body : { statements : [ ReturnStatement & { expressions : Expression [ ] } ] ; } ;
888896} ;
889897
890898export function isInlineFunctionExpression ( expression : FunctionExpression ) : expression is InlineFunctionExpression {
891- return expression . body . statements
899+ return expression . body . statements !== undefined
892900 && expression . body . statements . length === 1
893901 && isReturnStatement ( expression . body . statements [ 0 ] )
902+ && ( expression . body . statements [ 0 ] as ReturnStatement ) . expressions !== undefined
894903 && ( expression . flags & FunctionExpressionFlags . Inline ) !== 0 ;
895904}
0 commit comments