Skip to content

Commit f5fd9ae

Browse files
committed
Remove hidden reflections from class hierarchy
1 parent 18620a2 commit f5fd9ae

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ title: Changelog
1313

1414
- TypeDoc's default theme now uses the same chevron for all collapsible elements, #2924
1515
The `chevronSmall` helper is now deprecated and will be removed with v0.29.0.
16+
- Classes/interfaces marked with `@hidden` will no longer appear in the
17+
"Hierarchy" section of the docs.
1618

1719
### Thanks!
1820

src/lib/converter/plugins/ImplementsPlugin.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
ReflectionKind,
1010
SignatureReflection,
1111
} from "../../models/index.js";
12-
import { ReferenceType, ReflectionType, type Type } from "../../models/types.js";
12+
import { ReferenceType, ReflectionType, type SomeType, type Type } from "../../models/types.js";
1313
import { filterMap, type TranslatedString, zip } from "#utils";
1414
import { ConverterComponent } from "../components.js";
1515
import type { Context } from "../context.js";
@@ -234,6 +234,18 @@ export class ImplementsPlugin extends ConverterComponent {
234234
});
235235
}
236236

237+
// Remove hidden classes/interfaces which we inherit from
238+
if (reflection.kindOf(ReflectionKind.ClassOrInterface)) {
239+
const notHiddenType = (t: SomeType) =>
240+
!(t instanceof ReferenceType) ||
241+
!t.symbolId ||
242+
!project.symbolIdHasBeenRemoved(t.symbolId);
243+
reflection.implementedTypes = reflection.implementedTypes?.filter(notHiddenType);
244+
if (!reflection.implementedTypes?.length) delete reflection.implementedTypes;
245+
reflection.extendedTypes = reflection.extendedTypes?.filter(notHiddenType);
246+
if (!reflection.extendedTypes?.length) delete reflection.extendedTypes;
247+
}
248+
237249
if (
238250
reflection.kindOf(ReflectionKind.ClassOrInterface) &&
239251
reflection.extendedTypes

src/test/behavior.c2.test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,10 +988,25 @@ describe("Behavior Tests", () => {
988988
project.removeReflection(query(project, "nested"));
989989
equal(
990990
Object.values(project.reflections).map((r) => r.name),
991-
["typedoc"],
991+
["typedoc", "Base", "NotHidden", "NotHiddenImpl", "constructor", "NotHiddenImpl"],
992992
);
993993
});
994994

995+
it("Removes heritage clause references to hidden classes.", () => {
996+
const project = convert("removeReflection");
997+
const Base = query(project, "Base");
998+
equal(Base.extendedBy, undefined);
999+
equal(Base.implementedBy, undefined);
1000+
1001+
const NotHidden = query(project, "NotHidden");
1002+
equal(NotHidden.extendedTypes, undefined);
1003+
equal(NotHidden.implementedTypes, undefined);
1004+
1005+
const NotHiddenImpl = query(project, "NotHiddenImpl");
1006+
equal(NotHiddenImpl.extendedTypes, undefined);
1007+
equal(NotHiddenImpl.implementedTypes, undefined);
1008+
});
1009+
9951010
it("Handles @see tags", () => {
9961011
const project = convert("seeTags");
9971012
const foo = query(project, "foo");

src/test/converter2/behavior/removeReflection.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,10 @@ export function foo(first: string, second: string, third: string) {
55
}
66

77
export function nested(a: 1 | { a; 1 }) {}
8+
9+
export interface Base {}
10+
/** @hidden */
11+
export interface Hidden extends Base {}
12+
export interface NotHidden extends Hidden {}
13+
14+
export class NotHiddenImpl implements Hidden {}

0 commit comments

Comments
 (0)