@@ -58,6 +58,29 @@ function validateModuleChildren(children?: ts.Node[])
58
58
}
59
59
}
60
60
61
+ function handleComment < T extends ts . Node > ( doclet : IDocletBase , node : T ) : T
62
+ {
63
+ if ( doclet . comment && doclet . comment . length > 4 )
64
+ {
65
+ let comment = doclet . comment ;
66
+
67
+ // remove '/*' and '*/'
68
+ comment = comment . substring ( 2 , doclet . comment . length - 2 ) ;
69
+
70
+ // remove ' *' leading spaces
71
+ comment = comment . replace ( / [ \t ] + \* / g, ' *' ) ;
72
+
73
+ // remove trailing spaces
74
+ comment = comment . trim ( ) + '\n ' ;
75
+
76
+ const kind = ts . SyntaxKind . MultiLineCommentTrivia ;
77
+
78
+ ts . addSyntheticLeadingComment ( node , kind , comment , true ) ;
79
+ }
80
+
81
+ return node ;
82
+ }
83
+
61
84
export function createClass ( doclet : IClassDoclet , children ?: ts . Node [ ] ) : ts . ClassDeclaration
62
85
{
63
86
validateClassChildren ( children ) ;
@@ -84,14 +107,14 @@ export function createClass(doclet: IClassDoclet, children?: ts.Node[]): ts.Clas
84
107
) ;
85
108
}
86
109
87
- return ts . createClassDeclaration (
110
+ return handleComment ( doclet , ts . createClassDeclaration (
88
111
undefined , // decorators
89
112
mods , // modifiers
90
113
doclet . name , // name
91
114
typeParams , // typeParameters
92
115
heritageClauses , // heritageClauses
93
116
members // members
94
- ) ;
117
+ ) ) ;
95
118
}
96
119
97
120
export function createInterface ( doclet : IClassDoclet , children ?: ts . Node [ ] ) : ts . InterfaceDeclaration
@@ -106,14 +129,14 @@ export function createInterface(doclet: IClassDoclet, children?: ts.Node[]): ts.
106
129
if ( doclet . name . startsWith ( 'exports.' ) )
107
130
doclet . name = doclet . name . replace ( 'exports.' , '' ) ;
108
131
109
- return ts . createInterfaceDeclaration (
132
+ return handleComment ( doclet , ts . createInterfaceDeclaration (
110
133
undefined , // decorators
111
134
mods , // modifiers
112
135
doclet . name , // name
113
136
typeParams , // typeParameters
114
137
heritageClauses , // heritageClauses
115
138
members // members
116
- ) ;
139
+ ) ) ;
117
140
}
118
141
119
142
export function createFunction ( doclet : IFunctionDoclet ) : ts . FunctionDeclaration
@@ -126,7 +149,7 @@ export function createFunction(doclet: IFunctionDoclet): ts.FunctionDeclaration
126
149
if ( doclet . name . startsWith ( 'exports.' ) )
127
150
doclet . name = doclet . name . replace ( 'exports.' , '' ) ;
128
151
129
- return ts . createFunctionDeclaration (
152
+ return handleComment ( doclet , ts . createFunctionDeclaration (
130
153
undefined , // decorators
131
154
mods , // modifiers
132
155
undefined , // asteriskToken
@@ -135,7 +158,7 @@ export function createFunction(doclet: IFunctionDoclet): ts.FunctionDeclaration
135
158
params , // parameters
136
159
type , // type
137
160
undefined // body
138
- ) ;
161
+ ) ) ;
139
162
}
140
163
141
164
export function createClassMethod ( doclet : IFunctionDoclet ) : ts . MethodDeclaration
@@ -161,7 +184,7 @@ export function createClassMethod(doclet: IFunctionDoclet): ts.MethodDeclaration
161
184
if ( doclet . name . startsWith ( 'exports.' ) )
162
185
doclet . name = doclet . name . replace ( 'exports.' , '' ) ;
163
186
164
- return ts . createMethod (
187
+ return handleComment ( doclet , ts . createMethod (
165
188
undefined , // decorators
166
189
mods , // modifiers
167
190
undefined , // asteriskToken
@@ -171,7 +194,7 @@ export function createClassMethod(doclet: IFunctionDoclet): ts.MethodDeclaration
171
194
params , // parameters
172
195
type , // type
173
196
undefined // body
174
- ) ;
197
+ ) ) ;
175
198
}
176
199
177
200
export function createInterfaceMethod ( doclet : IFunctionDoclet ) : ts . MethodSignature
@@ -190,13 +213,13 @@ export function createInterfaceMethod(doclet: IFunctionDoclet): ts.MethodSignatu
190
213
if ( doclet . name . startsWith ( 'exports.' ) )
191
214
doclet . name = doclet . name . replace ( 'exports.' , '' ) ;
192
215
193
- return ts . createMethodSignature (
216
+ return handleComment ( doclet , ts . createMethodSignature (
194
217
typeParams , // typeParameters
195
218
params , // parameters
196
219
type , // type
197
220
doclet . name , // name
198
221
undefined // questionToken
199
- ) ;
222
+ ) ) ;
200
223
}
201
224
202
225
export function createEnum ( doclet : IMemberDoclet ) : ts . EnumDeclaration
@@ -220,12 +243,12 @@ export function createEnum(doclet: IMemberDoclet): ts.EnumDeclaration
220
243
}
221
244
}
222
245
223
- return ts . createEnumDeclaration (
246
+ return handleComment ( doclet , ts . createEnumDeclaration (
224
247
undefined ,
225
248
mods ,
226
249
doclet . name ,
227
250
props ,
228
- ) ;
251
+ ) ) ;
229
252
}
230
253
231
254
export function createClassMember ( doclet : IMemberDoclet ) : ts . PropertyDeclaration
@@ -246,14 +269,14 @@ export function createClassMember(doclet: IMemberDoclet): ts.PropertyDeclaration
246
269
else if ( doclet . access === 'public' )
247
270
mods . push ( ts . createModifier ( ts . SyntaxKind . PublicKeyword ) ) ;
248
271
249
- return ts . createProperty (
272
+ return handleComment ( doclet , ts . createProperty (
250
273
undefined , // decorators
251
274
mods , // modifiers
252
275
doclet . name , // name
253
276
undefined , // questionToken
254
277
type , // type
255
278
undefined // initializer
256
- ) ;
279
+ ) ) ;
257
280
}
258
281
259
282
export function createInterfaceMember ( doclet : IMemberDoclet ) : ts . PropertySignature
@@ -267,13 +290,13 @@ export function createInterfaceMember(doclet: IMemberDoclet): ts.PropertySignatu
267
290
if ( doclet . scope === 'static' )
268
291
mods . push ( ts . createModifier ( ts . SyntaxKind . StaticKeyword ) ) ;
269
292
270
- return ts . createPropertySignature (
293
+ return handleComment ( doclet , ts . createPropertySignature (
271
294
mods , // modifiers
272
295
doclet . name , // name
273
296
undefined , // questionToken
274
297
type , // type
275
298
undefined // initializer
276
- ) ;
299
+ ) ) ;
277
300
}
278
301
279
302
export function createNamespaceMember ( doclet : IMemberDoclet ) : ts . VariableStatement
@@ -284,14 +307,14 @@ export function createNamespaceMember(doclet: IMemberDoclet): ts.VariableStateme
284
307
if ( doclet . name . startsWith ( 'exports.' ) )
285
308
doclet . name = doclet . name . replace ( 'exports.' , '' ) ;
286
309
287
- return ts . createVariableStatement (
310
+ return handleComment ( doclet , ts . createVariableStatement (
288
311
mods ,
289
312
[ ts . createVariableDeclaration (
290
313
doclet . name , // name
291
314
type , // type
292
315
undefined // initializer
293
316
) ]
294
- ) ;
317
+ ) ) ;
295
318
}
296
319
297
320
export function createModule ( doclet : INamespaceDoclet , nested : boolean , children ?: ts . Node [ ] ) : ts . ModuleDeclaration
@@ -315,13 +338,13 @@ export function createModule(doclet: INamespaceDoclet, nested: boolean, children
315
338
316
339
const name = ts . createIdentifier ( doclet . name ) ;
317
340
318
- return ts . createModuleDeclaration (
341
+ return handleComment ( doclet , ts . createModuleDeclaration (
319
342
undefined , // decorators
320
343
mods , // modifiers
321
344
name , // name
322
345
body , // body
323
346
flags // flags
324
- ) ;
347
+ ) ) ;
325
348
}
326
349
327
350
export function createNamespace ( doclet : INamespaceDoclet , nested : boolean , children ?: ts . Node [ ] ) : ts . ModuleDeclaration
@@ -345,13 +368,13 @@ export function createNamespace(doclet: INamespaceDoclet, nested: boolean, child
345
368
346
369
const name = ts . createIdentifier ( doclet . name ) ;
347
370
348
- return ts . createModuleDeclaration (
371
+ return handleComment ( doclet , ts . createModuleDeclaration (
349
372
undefined , // decorators
350
373
mods , // modifiers
351
374
name , // name
352
375
body , // body
353
376
flags // flags
354
- ) ;
377
+ ) ) ;
355
378
}
356
379
357
380
export function createTypedef ( doclet : ITypedefDoclet , children ?: ts . Node [ ] ) : ts . TypeAliasDeclaration
@@ -363,11 +386,11 @@ export function createTypedef(doclet: ITypedefDoclet, children?: ts.Node[]): ts.
363
386
if ( doclet . name . startsWith ( 'exports.' ) )
364
387
doclet . name = doclet . name . replace ( 'exports.' , '' ) ;
365
388
366
- return ts . createTypeAliasDeclaration (
389
+ return handleComment ( doclet , ts . createTypeAliasDeclaration (
367
390
undefined , // decorators
368
391
mods , // modifiers
369
392
doclet . name , // name
370
393
typeParams , // typeParameters
371
394
type // type
372
- ) ;
395
+ ) ) ;
373
396
}
0 commit comments