@@ -237,7 +237,10 @@ function extractTags(listNode: Node): string[] {
237237 . filter ( ( v ) : v is string => v !== null )
238238}
239239
240- export function routerExtractor ( node : Node ) : RouterInfo | null {
240+ export function routerExtractor (
241+ node : Node ,
242+ aliasMap ?: Map < string , "FastAPI" | "APIRouter" > ,
243+ ) : RouterInfo | null {
241244 if ( node . type !== "assignment" ) {
242245 return null
243246 }
@@ -254,6 +257,8 @@ export function routerExtractor(node: Node): RouterInfo | null {
254257 type = "APIRouter"
255258 } else if ( funcName === "FastAPI" || funcName === "fastapi.FastAPI" ) {
256259 type = "FastAPI"
260+ } else if ( funcName && aliasMap ?. has ( funcName ) ) {
261+ type = aliasMap . get ( funcName ) !
257262 } else {
258263 return null
259264 }
@@ -476,3 +481,36 @@ export function mountExtractor(node: Node): MountInfo | null {
476481 app : appNode ?. text ?? "" ,
477482 }
478483}
484+
485+ export function aliasExtractor (
486+ node : Node ,
487+ ) : Map < string , "FastAPI" | "APIRouter" > {
488+ const importAliases = findNodesByType ( node , "aliased_import" )
489+
490+ const aliasMap = new Map < string , "FastAPI" | "APIRouter" > ( )
491+
492+ for ( const node of importAliases ) {
493+ const originalNode = node . childForFieldName ( "name" )
494+ const aliasNode = node . childForFieldName ( "alias" )
495+
496+ if (
497+ originalNode ?. text === "FastAPI" ||
498+ originalNode ?. text === "fastapi.FastAPI"
499+ ) {
500+ const alias = aliasNode ?. text
501+ if ( alias ) {
502+ aliasMap . set ( alias , "FastAPI" )
503+ }
504+ } else if (
505+ originalNode ?. text === "APIRouter" ||
506+ originalNode ?. text === "fastapi.APIRouter"
507+ ) {
508+ const alias = aliasNode ?. text
509+ if ( alias ) {
510+ aliasMap . set ( alias , "APIRouter" )
511+ }
512+ }
513+ }
514+
515+ return aliasMap
516+ }
0 commit comments