Skip to content

Commit 0d75fce

Browse files
feat: handle functions in abstract class
1 parent 095fc8c commit 0d75fce

File tree

2 files changed

+47
-13
lines changed

2 files changed

+47
-13
lines changed

fixtures/typescript/abstract-class.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Definition of abstract class
3+
*/
4+
abstract class AbstractClass {
5+
/**
6+
* Some property
7+
*/
8+
someProperty: number;
9+
10+
/**
11+
* Abstract property
12+
*/
13+
abstract someAbstractProperty: string;
14+
15+
/**
16+
* Some function
17+
*/
18+
public someFunction(): void;
19+
20+
/**
21+
* Abstract function
22+
*/
23+
abstract someAbstractFunction(param?: string): string | void;
24+
25+
#test: string
26+
}

typescript/type-converter.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ const getName = (node, src) => {
5959
* @returns {string} modified jsDoc comment with appended @param tags
6060
*
6161
*/
62-
const convertParams = (jsDoc = '', node, src, parentName = null) => {
63-
node.type.parameters.forEach(parameter => {
62+
const convertParams = (jsDoc = '', node, src) => {
63+
const parameters = node.type && node.type.parameters || node.parameters
64+
if(!parameters) { return }
65+
parameters.forEach(parameter => {
6466
let name = getName(parameter, src)
6567
let comment = parameter.jsDoc && parameter.jsDoc[0] && parameter.jsDoc[0].comment || ''
6668
if (parameter.questionToken) {
@@ -88,12 +90,12 @@ let convertMembers = (jsDoc = '', type, src, parentName = null) => {
8890
typesToCheck.push(...type.types)
8991
}
9092
typesToCheck.forEach(type => {
91-
// Handling array defined like this: {alement1: 'something'}[]
93+
// Handling array defined like this: {element1: 'something'}[]
9294
if(ts.isArrayTypeNode(type) && type.elementType) {
9395
jsDoc = convertMembers(jsDoc, type.elementType, src, parentName ? parentName + '[]' : '[]')
9496
}
9597

96-
// Handling Array<{element1: 'somethin'}>
98+
// Handling Array<{element1: 'something'}>
9799
if (type.typeName && type.typeName.escapedText === 'Array') {
98100
if(type.typeArguments && type.typeArguments.length) {
99101
type.typeArguments.forEach(subType => {
@@ -178,9 +180,9 @@ module.exports = function typeConverter(src, filename = 'test.ts') {
178180
if (!member.type && ts.isFunctionLike(member)) {
179181
let type = getTypeName(member, src)
180182
memberComment = appendComment(memberComment, `@type {${type}}`)
181-
memberComment = appendComment(memberComment, `@method`)
183+
memberComment = appendComment(memberComment, '@method')
182184
} else {
183-
memberComment = convertMembers(memberComment, member.type, src, parentName = null)
185+
memberComment = convertMembers(memberComment, member.type, src)
184186
let type = getTypeName(member.type, src)
185187
memberComment = appendComment(memberComment, `@type {${type}}`)
186188
}
@@ -193,18 +195,24 @@ module.exports = function typeConverter(src, filename = 'test.ts') {
193195
const className = getName(statement, src)
194196
statement.members.forEach(member => {
195197
if (!member.jsDoc) { return }
196-
if (!ts.isPropertyDeclaration(member)) { return }
197198
let memberComment = src.substring(member.jsDoc[0].pos, member.jsDoc[0].end)
198199
const modifiers = (member.modifiers || []).map(m => m.getText({text: src}))
199-
modifiers.forEach(m => {
200-
if (['private', 'public', 'protected'].includes(m)) {
201-
memberComment = appendComment(memberComment, `@${m}`)
200+
modifiers.forEach(modifier => {
201+
const allowedModifiers = ['abstract', 'private', 'public', 'protected']
202+
if (allowedModifiers.includes(modifier)) {
203+
memberComment = appendComment(memberComment, `@${modifier}`)
202204
}
203205
})
204-
if (member.type) {
205-
memberComment = appendComment(memberComment, `@type {${getTypeName(member.type, src)}}`)
206+
if (member.type && ts.isPropertyDeclaration(member)) {
207+
const type = getTypeName(member.type, src)
208+
memberComment = appendComment(memberComment, `@type {${type}}`)
209+
}
210+
if (member.type && ts.isFunctionLike(member)) {
211+
memberComment = appendComment(memberComment, '@method')
212+
memberComment = convertParams(memberComment, member, src)
213+
memberComment = convertMembers(memberComment, member.type, src)
214+
memberComment = appendComment(memberComment, `@return {${getTypeName(member.type, src)}}`)
206215
}
207-
getTypeName(member, src)
208216
if (modifiers.find((m => m === 'static'))) {
209217
memberComment += '\n' + `${className}.${getName(member, src)}`
210218
} else {

0 commit comments

Comments
 (0)