mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-28 07:16:53 +05:00
feat(ipuaro): add decorator extraction to initial context
Extract decorators from classes and methods for NestJS/Angular support.
Decorators are now shown in initial context:
- @Controller('users') class UserController
- @Get(':id') async getUser(id: string): Promise<User>
Changes:
- Add decorators field to FunctionInfo, MethodInfo, ClassInfo
- Update ASTParser to extract decorators from tree-sitter nodes
- Update formatFileSummary to display decorators prefix
- Add 18 unit tests for decorator extraction and formatting
This commit is contained in:
@@ -187,10 +187,22 @@ function formatFileOverview(
|
||||
return lines.join("\n")
|
||||
}
|
||||
|
||||
/**
|
||||
* Format decorators as a prefix string.
|
||||
* Example: "@Get(':id') @Auth() "
|
||||
*/
|
||||
function formatDecoratorsPrefix(decorators: string[] | undefined): string {
|
||||
if (!decorators || decorators.length === 0) {
|
||||
return ""
|
||||
}
|
||||
return `${decorators.join(" ")} `
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a function signature.
|
||||
*/
|
||||
function formatFunctionSignature(fn: FileAST["functions"][0]): string {
|
||||
const decoratorsPrefix = formatDecoratorsPrefix(fn.decorators)
|
||||
const asyncPrefix = fn.isAsync ? "async " : ""
|
||||
const params = fn.params
|
||||
.map((p) => {
|
||||
@@ -200,7 +212,7 @@ function formatFunctionSignature(fn: FileAST["functions"][0]): string {
|
||||
})
|
||||
.join(", ")
|
||||
const returnType = fn.returnType ? `: ${fn.returnType}` : ""
|
||||
return `${asyncPrefix}${fn.name}(${params})${returnType}`
|
||||
return `${decoratorsPrefix}${asyncPrefix}${fn.name}(${params})${returnType}`
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -310,9 +322,10 @@ function formatFileSummary(
|
||||
|
||||
if (ast.classes.length > 0) {
|
||||
for (const cls of ast.classes) {
|
||||
const decoratorsPrefix = formatDecoratorsPrefix(cls.decorators)
|
||||
const ext = cls.extends ? ` extends ${cls.extends}` : ""
|
||||
const impl = cls.implements.length > 0 ? ` implements ${cls.implements.join(", ")}` : ""
|
||||
lines.push(`- class ${cls.name}${ext}${impl}`)
|
||||
lines.push(`- ${decoratorsPrefix}class ${cls.name}${ext}${impl}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user