@@ -2501,8 +2501,9 @@ export function createChecker(program: Program): Checker {
2501
2501
2502
2502
if ( parameterModelSym ?. members ) {
2503
2503
const members = getOrCreateAugmentedSymbolTable ( parameterModelSym . members ) ;
2504
+ const paramDocs = extractParamDocs ( node ) ;
2504
2505
for ( const [ name , memberSym ] of members ) {
2505
- const doc = extractParamDoc ( node , name ) ;
2506
+ const doc = paramDocs [ name ] ;
2506
2507
if ( doc ) {
2507
2508
docFromCommentForSym . set ( memberSym , doc ) ;
2508
2509
}
@@ -3844,6 +3845,18 @@ export function createChecker(program: Program): Checker {
3844
3845
derivedModels : [ ] ,
3845
3846
} ) ;
3846
3847
linkType ( links , type , mapper ) ;
3848
+
3849
+ if ( node . symbol . members ) {
3850
+ const members = getOrCreateAugmentedSymbolTable ( node . symbol . members ) ;
3851
+ const propDocs = extractPropDocs ( node ) ;
3852
+ for ( const [ name , memberSym ] of members ) {
3853
+ const doc = propDocs [ name ] ;
3854
+ if ( doc ) {
3855
+ docFromCommentForSym . set ( memberSym , doc ) ;
3856
+ }
3857
+ }
3858
+ }
3859
+
3847
3860
const isBase = checkModelIs ( node , node . is , mapper ) ;
3848
3861
3849
3862
if ( isBase ) {
@@ -3859,7 +3872,8 @@ export function createChecker(program: Program): Checker {
3859
3872
3860
3873
if ( isBase ) {
3861
3874
for ( const prop of isBase . properties . values ( ) ) {
3862
- const newProp = cloneType ( prop , {
3875
+ const memberSym = getMemberSymbol ( node . symbol , prop . name ) ! ;
3876
+ const newProp = cloneTypeForSymbol ( memberSym , prop , {
3863
3877
sourceProperty : prop ,
3864
3878
model : type ,
3865
3879
} ) ;
@@ -5125,7 +5139,8 @@ export function createChecker(program: Program): Checker {
5125
5139
prop : ModelPropertyNode ,
5126
5140
mapper : TypeMapper | undefined
5127
5141
) : ModelProperty {
5128
- const symId = getSymbolId ( getSymbolForMember ( prop ) ! ) ;
5142
+ const sym = getSymbolForMember ( prop ) ! ;
5143
+ const symId = getSymbolId ( sym ) ;
5129
5144
const links = getSymbolLinksForMember ( prop ) ;
5130
5145
5131
5146
if ( links && links . declaredType && mapper === undefined ) {
@@ -5172,14 +5187,9 @@ export function createChecker(program: Program): Checker {
5172
5187
linkMapper ( type , mapper ) ;
5173
5188
5174
5189
if ( ! parentTemplate || shouldCreateTypeForTemplate ( parentTemplate , mapper ) ) {
5175
- if (
5176
- prop . parent ?. parent ?. kind === SyntaxKind . OperationSignatureDeclaration &&
5177
- prop . parent . parent . parent ?. kind === SyntaxKind . OperationStatement
5178
- ) {
5179
- const doc = extractParamDoc ( prop . parent . parent . parent , type . name ) ;
5180
- if ( doc ) {
5181
- type . decorators . unshift ( createDocFromCommentDecorator ( "self" , doc ) ) ;
5182
- }
5190
+ const docComment = docFromCommentForSym . get ( sym ) ;
5191
+ if ( docComment ) {
5192
+ type . decorators . unshift ( createDocFromCommentDecorator ( "self" , docComment ) ) ;
5183
5193
}
5184
5194
finishType ( type ) ;
5185
5195
}
@@ -8442,18 +8452,34 @@ function extractReturnsDocs(type: Type): {
8442
8452
return result ;
8443
8453
}
8444
8454
8445
- function extractParamDoc ( node : OperationStatementNode , paramName : string ) : string | undefined {
8455
+ function extractParamDocs ( node : OperationStatementNode ) : Record < string , string > {
8446
8456
if ( node . docs === undefined ) {
8447
- return undefined ;
8457
+ return { } ;
8448
8458
}
8459
+ const paramDocs : Record < string , string > = { } ;
8449
8460
for ( const doc of node . docs ) {
8450
8461
for ( const tag of doc . tags ) {
8451
- if ( tag . kind === SyntaxKind . DocParamTag && tag . paramName . sv === paramName ) {
8452
- return getDocContent ( tag . content ) ;
8462
+ if ( tag . kind === SyntaxKind . DocParamTag ) {
8463
+ paramDocs [ tag . paramName . sv ] = getDocContent ( tag . content ) ;
8453
8464
}
8454
8465
}
8455
8466
}
8456
- return undefined ;
8467
+ return paramDocs ;
8468
+ }
8469
+
8470
+ function extractPropDocs ( node : ModelStatementNode ) : Record < string , string > {
8471
+ if ( node . docs === undefined ) {
8472
+ return { } ;
8473
+ }
8474
+ const propDocs : Record < string , string > = { } ;
8475
+ for ( const doc of node . docs ) {
8476
+ for ( const tag of doc . tags ) {
8477
+ if ( tag . kind === SyntaxKind . DocPropTag ) {
8478
+ propDocs [ tag . propName . sv ] = getDocContent ( tag . content ) ;
8479
+ }
8480
+ }
8481
+ }
8482
+ return propDocs ;
8457
8483
}
8458
8484
8459
8485
function getDocContent ( content : readonly DocContent [ ] ) {
0 commit comments