Skip to content

Commit ad506a7

Browse files
chore(doc-gen): render "call" and "new" members of interfaces correctly
Partially Closes angular#2849
1 parent ef3cc8e commit ad506a7

4 files changed

Lines changed: 38 additions & 3 deletions

File tree

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export interface MyInterface {
2-
optionalProperty? : string,
2+
optionalProperty? : string
33
(param: string) : string
4+
new (param: number) : MyInterface
45
}

‎docs/dgeni-package/processors/readTypeScriptModules.js‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
8383
} else if (!hidePrivateMembers || memberSymbol.name.charAt(0) !== '_') {
8484
docs.push(memberDoc);
8585
exportDoc.members.push(memberDoc);
86+
} else if (memberSymbol.name === '__call' && memberSymbol.flags & ts.SymbolFlags.Signature) {
87+
docs.push(memberDoc);
88+
exportDoc.callMember = memberDoc;
89+
} else if (memberSymbol.name === '__new' && memberSymbol.flags & ts.SymbolFlags.Signature) {
90+
docs.push(memberDoc);
91+
exportDoc.newMember = memberDoc;
8692
}
8793
}
8894

@@ -196,7 +202,7 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
196202
location: getLocation(memberSymbol)
197203
};
198204

199-
if (memberSymbol.flags & ts.SymbolFlags.Method) {
205+
if (memberSymbol.flags & (ts.SymbolFlags.Method | ts.SymbolFlags.Signature)) {
200206
// NOTE: we use the property name `parameters` here so we don't conflict
201207
// with the `params` property that will be updated by dgeni reading the
202208
// `@param` tags from the docs
@@ -208,7 +214,7 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo
208214
memberDoc.name = 'constructor';
209215
}
210216

211-
if(memberSymbol.flags & ts.SymbolFlags.Value) {
217+
if(memberSymbol.flags & (ts.SymbolFlags.Value | ts.SymbolFlags.Signature) ) {
212218
memberDoc.returnType = getReturnType(typeChecker, memberSymbol);
213219
}
214220

‎docs/dgeni-package/processors/readTypeScriptModules.spec.js‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ describe('readTypeScriptModules', function() {
5858
expect(member.name).toEqual('optionalProperty');
5959
expect(member.optional).toEqual(true);
6060
});
61+
62+
63+
it('should handle "call" type interfaces', function() {
64+
processor.sourceFiles = [ 'interfaces.ts'];
65+
var docs = [];
66+
processor.$process(docs);
67+
68+
var moduleDoc = docs[0];
69+
var exportedInterface = moduleDoc.exports[0];
70+
expect(exportedInterface.callMember).toBeDefined();
71+
expect(exportedInterface.callMember.parameters).toBeDefined();
72+
expect(exportedInterface.callMember.returnType).toBeDefined();
73+
expect(exportedInterface.newMember).toBeDefined();
74+
expect(exportedInterface.newMember.parameters).toBeDefined();
75+
expect(exportedInterface.newMember.returnType).toBeDefined();
76+
});
6177
});
6278

6379

‎docs/dgeni-package/templates/type-definition.template.html‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,18 @@
2626
{%- endif %}
2727
{$ export.docType $} {$ export.name $}{$ export.typeParams $}{$ export.heritage $}
2828
{%- if export.docType == 'class' or export.docType == 'interface' %} {
29+
{%- if export.newMember -%}
30+
{$ commentBlock(export.newMember, 5) $}
31+
new ({% for param in export.newMember.parameters %}{$ param $}{% if not loop.last %}, {% endif %}{% endfor %})
32+
{%- if export.newMember.returnType %}: {$ export.newMember.returnType $}{%- else -%}: any{% endif -%}
33+
;
34+
{% endif %}
35+
{%- if export.callMember -%}
36+
{$ commentBlock(export.callMember, 5) $}
37+
({% for param in export.callMember.parameters %}{$ param $}{% if not loop.last %}, {% endif %}{% endfor %})
38+
{%- if export.callMember.returnType %}: {$ export.callMember.returnType $}{%- else -%}: any{% endif -%}
39+
;
40+
{% endif %}
2941
{%- for member in export.members -%}
3042
{$ commentBlock(member, 5) $}
3143
{$ member.name $}

0 commit comments

Comments
 (0)