@@ -4,6 +4,7 @@ import { AccessorNode } from "../elements/accessor-node";
44import { ClassNode } from "../elements/class-node" ;
55import { ElementNode } from "../elements/element-node" ;
66import { ElementNodeGroup } from "../elements/element-node-group" ;
7+ import { ExpressionNode } from "../elements/expression-node" ;
78import { FunctionNode } from "../elements/function-node" ;
89import { GetterNode } from "../elements/getter-node" ;
910import { GetterSignatureNode } from "../elements/getter-signature-node" ;
@@ -70,15 +71,15 @@ export class SourceCodePrinter
7071
7172 if ( beforeMembers . length > 0 )
7273 {
73- nodeSourceCode . add ( beforeMembers ) ;
74+ nodeSourceCode . addAfter ( beforeMembers ) ;
7475 nodeSourceCode . addNewLineAfter ( ) ;
7576 }
7677
77- nodeSourceCode . add ( members ) ;
78+ nodeSourceCode . addAfter ( members ) ;
7879
7980 if ( afterMembers . length > 0 )
8081 {
81- nodeSourceCode . add ( afterMembers ) ;
82+ nodeSourceCode . addAfter ( afterMembers ) ;
8283 }
8384
8485 return nodeSourceCode ;
@@ -92,6 +93,17 @@ export class SourceCodePrinter
9293 const nameBinding = node . nameBinding ;
9394 const namespace = node . namespace ;
9495 let sourceCode = ""
96+ let namedImportsSourceCode = "" ;
97+
98+ if ( namedImports . length > 0 )
99+ {
100+ const allTypeOnly = namedImports . every ( ni => ni . typeOnly ) ;
101+
102+ namedImportsSourceCode += allTypeOnly ? "type " : "" ;
103+ namedImportsSourceCode += "{ " ;
104+ namedImportsSourceCode += namedImports . map ( ni => ( ni . typeOnly && ! allTypeOnly ? "type " : "" ) + ( ni . alias ? ( ni . alias + " as " ) : "" ) + ni . name ) . join ( ", " ) ;
105+ namedImportsSourceCode += " }" ;
106+ }
95107
96108 if ( nameBinding )
97109 {
@@ -101,7 +113,7 @@ export class SourceCodePrinter
101113 }
102114 else if ( namedImports . length > 0 )
103115 {
104- sourceCode = `import ${ nameBinding } , { ${ namedImports . map ( ni => ( ni . type ? "type " : "" ) + ( ni . alias ? ( ni . alias + " as " ) : "" ) + ni . name ) . join ( ", " ) } } from ${ quote } ${ source } ${ quote } ;` ;
116+ sourceCode = `import ${ nameBinding } , ${ namedImportsSourceCode } from ${ quote } ${ source } ${ quote } ;` ;
105117 }
106118 else
107119 {
@@ -114,7 +126,7 @@ export class SourceCodePrinter
114126 }
115127 else if ( namedImports . length > 0 )
116128 {
117- sourceCode = `import { ${ namedImports . map ( ni => ( ni . type ? "type " : "" ) + ( ni . alias ? ( ni . alias + " as " ) : "" ) + ni . name ) . join ( ", " ) } } from ${ quote } ${ source } ${ quote } ;` ;
129+ sourceCode = `import ${ namedImportsSourceCode } from ${ quote } ${ source } ${ quote } ;` ;
118130 }
119131 else
120132 {
@@ -138,15 +150,15 @@ export class SourceCodePrinter
138150
139151 if ( beforeMembers . length > 0 )
140152 {
141- nodeSourceCode . add ( beforeMembers ) ;
153+ nodeSourceCode . addAfter ( beforeMembers ) ;
142154 nodeSourceCode . addNewLineAfter ( ) ;
143155 }
144156
145- nodeSourceCode . add ( members ) ;
157+ nodeSourceCode . addAfter ( members ) ;
146158
147159 if ( afterMembers . length > 0 )
148160 {
149- nodeSourceCode . add ( afterMembers ) ;
161+ nodeSourceCode . addAfter ( afterMembers ) ;
150162 }
151163
152164 return nodeSourceCode ;
@@ -198,7 +210,7 @@ export class SourceCodePrinter
198210 const nodeGroupNodeCount = nodeGroup . getNodeCount ( ) ;
199211
200212 // print subgroups
201- nodeGroupSourceCode . add ( this . printNodeGroups ( nodeGroup . nodeSubGroups , configuration ) ) ;
213+ nodeGroupSourceCode . addAfter ( this . printNodeGroups ( nodeGroup . nodeSubGroups , configuration ) ) ;
202214
203215 // print nodes within a group
204216 for ( const node of nodeGroup . nodes )
@@ -229,7 +241,8 @@ export class SourceCodePrinter
229241 node instanceof FunctionNode ||
230242 node instanceof MethodNode ||
231243 ( node instanceof PropertyNode && node . writeMode !== WriteModifier . readOnly && node . isArrowFunction && configuration . classes . members . treatArrowFunctionPropertiesAsMethods ) ||
232- ( node instanceof PropertyNode && node . writeMode === WriteModifier . readOnly && node . isArrowFunction && configuration . classes . members . treatArrowFunctionReadOnlyPropertiesAsMethods ) )
244+ ( node instanceof PropertyNode && node . writeMode === WriteModifier . readOnly && node . isArrowFunction && configuration . classes . members . treatArrowFunctionReadOnlyPropertiesAsMethods ) ||
245+ node instanceof ExpressionNode )
233246 {
234247 if ( nodeGroup . nodes . indexOf ( node ) > 0 )
235248 {
@@ -249,7 +262,7 @@ export class SourceCodePrinter
249262 }
250263 }
251264
252- nodeGroupSourceCode . add ( nodeSourceCode ) ;
265+ nodeGroupSourceCode . addAfter ( nodeSourceCode ) ;
253266 }
254267
255268 if ( nodeGroup . isRegion && nodeGroup . regionConfiguration ?. addRegions )
@@ -277,7 +290,7 @@ export class SourceCodePrinter
277290 sourceCode . addNewLineBefore ( ) ;
278291 }
279292
280- nodeGroupsSourceCode . add ( sourceCode ) ;
293+ nodeGroupsSourceCode . addAfter ( sourceCode ) ;
281294 }
282295
283296 return nodeGroupsSourceCode ;
@@ -308,15 +321,15 @@ export class SourceCodePrinter
308321
309322 if ( beforeMembers . length > 0 )
310323 {
311- nodeSourceCode . add ( beforeMembers ) ;
324+ nodeSourceCode . addAfter ( beforeMembers ) ;
312325 nodeSourceCode . addNewLineAfter ( ) ;
313326 }
314327
315- nodeSourceCode . add ( members ) ;
328+ nodeSourceCode . addAfter ( members ) ;
316329
317330 if ( afterMembers . length > 0 )
318331 {
319- nodeSourceCode . add ( afterMembers ) ;
332+ nodeSourceCode . addAfter ( afterMembers ) ;
320333 }
321334
322335 return nodeSourceCode ;
0 commit comments