mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
refactor(compiler-cli): Extract call signatures from interfaces. (#56973)
This commit adds support for extracting call signals from interfaces. fixes #56969 PR Close #56973
This commit is contained in:
parent
5c08ae68ad
commit
634d55a4f6
2 changed files with 32 additions and 3 deletions
|
|
@ -272,7 +272,8 @@ class ClassExtractor {
|
|||
return (
|
||||
!member.name ||
|
||||
!this.isDocumentableMember(member) ||
|
||||
!!member.modifiers?.some((mod) => mod.kind === ts.SyntaxKind.PrivateKeyword) ||
|
||||
(!ts.isCallSignatureDeclaration(member) &&
|
||||
member.modifiers?.some((mod) => mod.kind === ts.SyntaxKind.PrivateKeyword)) ||
|
||||
member.name.getText() === 'prototype' ||
|
||||
isAngularPrivateName(member.name.getText()) ||
|
||||
isInternal(member)
|
||||
|
|
@ -280,8 +281,16 @@ class ClassExtractor {
|
|||
}
|
||||
|
||||
/** Gets whether a class member is a method, property, or accessor. */
|
||||
private isDocumentableMember(member: ts.Node): member is MethodLike | PropertyLike {
|
||||
return this.isMethod(member) || this.isProperty(member) || ts.isAccessor(member);
|
||||
private isDocumentableMember(
|
||||
member: ts.Node,
|
||||
): member is MethodLike | PropertyLike | ts.CallSignatureDeclaration {
|
||||
return (
|
||||
this.isMethod(member) ||
|
||||
this.isProperty(member) ||
|
||||
ts.isAccessor(member) ||
|
||||
// Signatures are documentable if they are part of an interface.
|
||||
ts.isCallSignatureDeclaration(member)
|
||||
);
|
||||
}
|
||||
|
||||
/** Gets whether a member is a property. */
|
||||
|
|
|
|||
|
|
@ -76,6 +76,26 @@ runInEachFileSystem(() => {
|
|||
expect(propertyEntry.type).toBe('number');
|
||||
});
|
||||
|
||||
it('should extract call signatures', () => {
|
||||
env.write(
|
||||
'index.ts',
|
||||
`
|
||||
export interface UserProfile {
|
||||
(name: string): string;
|
||||
}
|
||||
`,
|
||||
);
|
||||
|
||||
const docs: DocEntry[] = env.driveDocsExtraction('index.ts');
|
||||
const interfaceEntry = docs[0] as InterfaceEntry;
|
||||
expect(interfaceEntry.members.length).toBe(1);
|
||||
|
||||
const methodEntry = interfaceEntry.members[0] as MethodEntry;
|
||||
expect(methodEntry.memberType).toBe(MemberType.Method);
|
||||
expect(methodEntry.name).toBe('');
|
||||
expect(methodEntry.returnType).toBe('string');
|
||||
});
|
||||
|
||||
it('should extract a method with a rest parameter', () => {
|
||||
env.write(
|
||||
'index.ts',
|
||||
|
|
|
|||
Loading…
Reference in a new issue