Skip to content

Commit 09b5cdf

Browse files
committed
Fixes #56, adds support for keeping jsdoc comments
1 parent 0f34eb2 commit 09b5cdf

File tree

1 file changed

+47
-24
lines changed

1 file changed

+47
-24
lines changed

src/create_helpers.ts

+47-24
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,29 @@ function validateModuleChildren(children?: ts.Node[])
5858
}
5959
}
6060

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+
6184
export function createClass(doclet: IClassDoclet, children?: ts.Node[]): ts.ClassDeclaration
6285
{
6386
validateClassChildren(children);
@@ -84,14 +107,14 @@ export function createClass(doclet: IClassDoclet, children?: ts.Node[]): ts.Clas
84107
);
85108
}
86109

87-
return ts.createClassDeclaration(
110+
return handleComment(doclet, ts.createClassDeclaration(
88111
undefined, // decorators
89112
mods, // modifiers
90113
doclet.name, // name
91114
typeParams, // typeParameters
92115
heritageClauses,// heritageClauses
93116
members // members
94-
);
117+
));
95118
}
96119

97120
export function createInterface(doclet: IClassDoclet, children?: ts.Node[]): ts.InterfaceDeclaration
@@ -106,14 +129,14 @@ export function createInterface(doclet: IClassDoclet, children?: ts.Node[]): ts.
106129
if (doclet.name.startsWith('exports.'))
107130
doclet.name = doclet.name.replace('exports.', '');
108131

109-
return ts.createInterfaceDeclaration(
132+
return handleComment(doclet, ts.createInterfaceDeclaration(
110133
undefined, // decorators
111134
mods, // modifiers
112135
doclet.name, // name
113136
typeParams, // typeParameters
114137
heritageClauses,// heritageClauses
115138
members // members
116-
);
139+
));
117140
}
118141

119142
export function createFunction(doclet: IFunctionDoclet): ts.FunctionDeclaration
@@ -126,7 +149,7 @@ export function createFunction(doclet: IFunctionDoclet): ts.FunctionDeclaration
126149
if (doclet.name.startsWith('exports.'))
127150
doclet.name = doclet.name.replace('exports.', '');
128151

129-
return ts.createFunctionDeclaration(
152+
return handleComment(doclet, ts.createFunctionDeclaration(
130153
undefined, // decorators
131154
mods, // modifiers
132155
undefined, // asteriskToken
@@ -135,7 +158,7 @@ export function createFunction(doclet: IFunctionDoclet): ts.FunctionDeclaration
135158
params, // parameters
136159
type, // type
137160
undefined // body
138-
);
161+
));
139162
}
140163

141164
export function createClassMethod(doclet: IFunctionDoclet): ts.MethodDeclaration
@@ -161,7 +184,7 @@ export function createClassMethod(doclet: IFunctionDoclet): ts.MethodDeclaration
161184
if (doclet.name.startsWith('exports.'))
162185
doclet.name = doclet.name.replace('exports.', '');
163186

164-
return ts.createMethod(
187+
return handleComment(doclet, ts.createMethod(
165188
undefined, // decorators
166189
mods, // modifiers
167190
undefined, // asteriskToken
@@ -171,7 +194,7 @@ export function createClassMethod(doclet: IFunctionDoclet): ts.MethodDeclaration
171194
params, // parameters
172195
type, // type
173196
undefined // body
174-
);
197+
));
175198
}
176199

177200
export function createInterfaceMethod(doclet: IFunctionDoclet): ts.MethodSignature
@@ -190,13 +213,13 @@ export function createInterfaceMethod(doclet: IFunctionDoclet): ts.MethodSignatu
190213
if (doclet.name.startsWith('exports.'))
191214
doclet.name = doclet.name.replace('exports.', '');
192215

193-
return ts.createMethodSignature(
216+
return handleComment(doclet, ts.createMethodSignature(
194217
typeParams, // typeParameters
195218
params, // parameters
196219
type, // type
197220
doclet.name, // name
198221
undefined // questionToken
199-
);
222+
));
200223
}
201224

202225
export function createEnum(doclet: IMemberDoclet): ts.EnumDeclaration
@@ -220,12 +243,12 @@ export function createEnum(doclet: IMemberDoclet): ts.EnumDeclaration
220243
}
221244
}
222245

223-
return ts.createEnumDeclaration(
246+
return handleComment(doclet, ts.createEnumDeclaration(
224247
undefined,
225248
mods,
226249
doclet.name,
227250
props,
228-
);
251+
));
229252
}
230253

231254
export function createClassMember(doclet: IMemberDoclet): ts.PropertyDeclaration
@@ -246,14 +269,14 @@ export function createClassMember(doclet: IMemberDoclet): ts.PropertyDeclaration
246269
else if (doclet.access === 'public')
247270
mods.push(ts.createModifier(ts.SyntaxKind.PublicKeyword));
248271

249-
return ts.createProperty(
272+
return handleComment(doclet, ts.createProperty(
250273
undefined, // decorators
251274
mods, // modifiers
252275
doclet.name, // name
253276
undefined, // questionToken
254277
type, // type
255278
undefined // initializer
256-
);
279+
));
257280
}
258281

259282
export function createInterfaceMember(doclet: IMemberDoclet): ts.PropertySignature
@@ -267,13 +290,13 @@ export function createInterfaceMember(doclet: IMemberDoclet): ts.PropertySignatu
267290
if (doclet.scope === 'static')
268291
mods.push(ts.createModifier(ts.SyntaxKind.StaticKeyword));
269292

270-
return ts.createPropertySignature(
293+
return handleComment(doclet, ts.createPropertySignature(
271294
mods, // modifiers
272295
doclet.name, // name
273296
undefined, // questionToken
274297
type, // type
275298
undefined // initializer
276-
);
299+
));
277300
}
278301

279302
export function createNamespaceMember(doclet: IMemberDoclet): ts.VariableStatement
@@ -284,14 +307,14 @@ export function createNamespaceMember(doclet: IMemberDoclet): ts.VariableStateme
284307
if (doclet.name.startsWith('exports.'))
285308
doclet.name = doclet.name.replace('exports.', '');
286309

287-
return ts.createVariableStatement(
310+
return handleComment(doclet, ts.createVariableStatement(
288311
mods,
289312
[ts.createVariableDeclaration(
290313
doclet.name, // name
291314
type, // type
292315
undefined // initializer
293316
)]
294-
);
317+
));
295318
}
296319

297320
export function createModule(doclet: INamespaceDoclet, nested: boolean, children?: ts.Node[]): ts.ModuleDeclaration
@@ -315,13 +338,13 @@ export function createModule(doclet: INamespaceDoclet, nested: boolean, children
315338

316339
const name = ts.createIdentifier(doclet.name);
317340

318-
return ts.createModuleDeclaration(
341+
return handleComment(doclet, ts.createModuleDeclaration(
319342
undefined, // decorators
320343
mods, // modifiers
321344
name, // name
322345
body, // body
323346
flags // flags
324-
);
347+
));
325348
}
326349

327350
export function createNamespace(doclet: INamespaceDoclet, nested: boolean, children?: ts.Node[]): ts.ModuleDeclaration
@@ -345,13 +368,13 @@ export function createNamespace(doclet: INamespaceDoclet, nested: boolean, child
345368

346369
const name = ts.createIdentifier(doclet.name);
347370

348-
return ts.createModuleDeclaration(
371+
return handleComment(doclet, ts.createModuleDeclaration(
349372
undefined, // decorators
350373
mods, // modifiers
351374
name, // name
352375
body, // body
353376
flags // flags
354-
);
377+
));
355378
}
356379

357380
export function createTypedef(doclet: ITypedefDoclet, children?: ts.Node[]): ts.TypeAliasDeclaration
@@ -363,11 +386,11 @@ export function createTypedef(doclet: ITypedefDoclet, children?: ts.Node[]): ts.
363386
if (doclet.name.startsWith('exports.'))
364387
doclet.name = doclet.name.replace('exports.', '');
365388

366-
return ts.createTypeAliasDeclaration(
389+
return handleComment(doclet, ts.createTypeAliasDeclaration(
367390
undefined, // decorators
368391
mods, // modifiers
369392
doclet.name, // name
370393
typeParams, // typeParameters
371394
type // type
372-
);
395+
));
373396
}

0 commit comments

Comments
 (0)