Skip to content

Commit

Permalink
filter out private class members
Browse files Browse the repository at this point in the history
  • Loading branch information
souporserious committed Oct 15, 2024
1 parent 310f11c commit 7642f56
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 20 deletions.
5 changes: 5 additions & 0 deletions .changeset/thin-poets-battle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'renoun': minor
---

Filters out private class members that start with `#` or `_` when using `<Export>.getType()`.
81 changes: 61 additions & 20 deletions packages/renoun/src/utils/resolve-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,9 @@ const exportedReferences = new WeakSet<Type>()
const rootReferences = new WeakSet<Type>()

const enclosingNodeMetadata = new WeakMap<Node, SymbolMetadata>()
const defaultFilter = (metadata: SymbolMetadata) => !metadata.isInNodeModules
const defaultFilter = (metadata: SymbolMetadata) => {
return !metadata.isPrivate && !metadata.isInNodeModules
}
const TYPE_FORMAT_FLAGS =
tsMorph.TypeFormatFlags.NoTruncation |
tsMorph.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope |
Expand Down Expand Up @@ -1350,6 +1352,9 @@ function getSymbolMetadata(
/** Whether or not the node is generated by the compiler. */
isVirtual: boolean

/** Whether or not the symbol is private. */
isPrivate: boolean

/** The file path for the symbol declaration. */
filePath?: string
} {
Expand All @@ -1360,7 +1365,7 @@ function getSymbolMetadata(
isInNodeModules: false,
isGlobal: false,
isVirtual: true,
filePath: undefined,
isPrivate: false,
}
}

Expand All @@ -1373,7 +1378,7 @@ function getSymbolMetadata(
isInNodeModules: false,
isGlobal: false,
isVirtual: false,
filePath: undefined,
isPrivate: false,
}
}

Expand Down Expand Up @@ -1438,6 +1443,7 @@ function getSymbolMetadata(
isExported,
isExternal,
isInNodeModules,
isPrivate: name ? name.startsWith('#') || name.startsWith('_') : false,
isGlobal: isInNodeModules && !isExported,
isVirtual: false,
filePath: declarationSourceFile.getFilePath(),
Expand Down Expand Up @@ -1550,7 +1556,7 @@ function getScope(
/** Processes a class declaration into a metadata object. */
function resolveClass(
classDeclaration: ClassDeclaration,
filter?: SymbolFilter,
filter: SymbolFilter,
dependencies?: Set<string>
): ClassType {
const classMetadata: ClassType = {
Expand Down Expand Up @@ -1584,27 +1590,38 @@ function resolveClass(
if (!classMetadata.accessors) {
classMetadata.accessors = []
}
classMetadata.accessors.push(
resolveClassAccessor(member, filter, dependencies)
const resolvedAccessor = resolveClassAccessor(
member,
filter,
dependencies
)
if (resolvedAccessor) {
classMetadata.accessors.push(resolvedAccessor)
}
}
} else if (tsMorph.Node.isMethodDeclaration(member)) {
if (!member.hasModifier(tsMorph.SyntaxKind.PrivateKeyword)) {
if (!classMetadata.methods) {
classMetadata.methods = []
}
classMetadata.methods.push(
resolveClassMethod(member, filter, dependencies)
)
const resolvedMethod = resolveClassMethod(member, filter, dependencies)
if (resolvedMethod) {
classMetadata.methods.push(resolvedMethod)
}
}
} else if (tsMorph.Node.isPropertyDeclaration(member)) {
if (!member.hasModifier(tsMorph.SyntaxKind.PrivateKeyword)) {
if (!classMetadata.properties) {
classMetadata.properties = []
}
classMetadata.properties.push(
resolveClassProperty(member, filter, dependencies)
const resolvedProperty = resolveClassProperty(
member,
filter,
dependencies
)
if (resolvedProperty) {
classMetadata.properties.push(resolvedProperty)
}
}
}
})
Expand All @@ -1615,9 +1632,16 @@ function resolveClass(
/** Processes a class accessor (getter or setter) declaration into a metadata object. */
function resolveClassAccessor(
accessor: GetAccessorDeclaration | SetAccessorDeclaration,
filter?: SymbolFilter,
filter: SymbolFilter,
dependencies?: Set<string>
): ClassAccessorType {
): ClassAccessorType | undefined {
const symbolMetadata = getSymbolMetadata(accessor.getSymbol(), accessor)
const filterResult = filter(symbolMetadata)

if (filterResult === false) {
return
}

const sharedMetadata: SharedClassMemberType = {
name: accessor.getName(),
scope: getScope(accessor),
Expand Down Expand Up @@ -1662,17 +1686,28 @@ function resolveClassAccessor(
/** Processes a method declaration into a metadata object. */
function resolveClassMethod(
method: MethodDeclaration,
filter?: SymbolFilter,
filter: SymbolFilter,
dependencies?: Set<string>
): ClassMethodType {
): ClassMethodType | undefined {
const callSignatures = method.getType().getCallSignatures()
const symbolMetadata = getSymbolMetadata(method.getSymbol(), method)
const filterResult = filter(symbolMetadata)

if (filterResult === false) {
return
}

return {
kind: 'ClassMethod',
name: method.getName(),
scope: getScope(method),
visibility: getVisibility(method),
signatures: resolveCallSignatures(callSignatures, method, filter),
signatures: resolveCallSignatures(
callSignatures,
method,
filter,
dependencies
),
text: method.getType().getText(method, TYPE_FORMAT_FLAGS),
decorators: resolveDecorators(method.getDecorators(), filter, dependencies),
...getJsDocMetadata(method),
Expand All @@ -1682,12 +1717,18 @@ function resolveClassMethod(
/** Processes a class property declaration into a metadata object. */
function resolveClassProperty(
property: PropertyDeclaration,
filter?: SymbolFilter,
filter: SymbolFilter,
dependencies?: Set<string>
): ClassPropertyType {
const propertyType = property.getType()
): ClassPropertyType | undefined {
const symbolMetadata = getSymbolMetadata(property.getSymbol(), property)
const filterResult = filter(symbolMetadata)

if (filterResult === false) {
return
}

const resolvedType = resolveType(
propertyType,
property.getType(),
property,
filter,
false,
Expand Down

0 comments on commit 7642f56

Please sign in to comment.