@@ -2761,9 +2761,16 @@ export function isFirstDeclarationOfSymbolParameter(symbol: Symbol): boolean {
2761
2761
return ! ! findAncestor ( declaration , n => isParameter ( n ) ? true : isBindingElement ( n ) || isObjectBindingPattern ( n ) || isArrayBindingPattern ( n ) ? false : "quit" ) ;
2762
2762
}
2763
2763
2764
- const displayPartWriter = getDisplayPartWriter ( ) ;
2765
- function getDisplayPartWriter ( ) : DisplayPartsSymbolWriter {
2766
- const absoluteMaximumLength = defaultMaximumTruncationLength * 10 ; // A hard cutoff to avoid overloading the messaging channel in worst-case scenarios
2764
+ const displayPartWriterCache = new Map < number | undefined , DisplayPartsSymbolWriter > ( ) ;
2765
+ function getDisplayPartWriter ( maximumLength : number | undefined ) : DisplayPartsSymbolWriter {
2766
+ if ( ! displayPartWriterCache . has ( maximumLength ) ) {
2767
+ displayPartWriterCache . set ( maximumLength , getDisplayPartWriterWorker ( maximumLength ) ) ;
2768
+ }
2769
+ return displayPartWriterCache . get ( maximumLength ) ! ;
2770
+ }
2771
+
2772
+ function getDisplayPartWriterWorker ( maximumLength : number | undefined ) : DisplayPartsSymbolWriter {
2773
+ const absoluteMaximumLength = ( maximumLength || defaultMaximumTruncationLength ) * 10 ; // A hard cutoff to avoid overloading the messaging channel in worst-case scenarios
2767
2774
let displayParts : SymbolDisplayPart [ ] ;
2768
2775
let lineStart : boolean ;
2769
2776
let indent : number ;
@@ -3036,7 +3043,8 @@ export function lineBreakPart(): SymbolDisplayPart {
3036
3043
}
3037
3044
3038
3045
/** @internal */
3039
- export function mapToDisplayParts ( writeDisplayParts : ( writer : DisplayPartsSymbolWriter ) => void ) : SymbolDisplayPart [ ] {
3046
+ export function mapToDisplayParts ( writeDisplayParts : ( writer : DisplayPartsSymbolWriter ) => void , maximumLength ?: number ) : SymbolDisplayPart [ ] {
3047
+ const displayPartWriter = getDisplayPartWriter ( maximumLength ) ;
3040
3048
try {
3041
3049
writeDisplayParts ( displayPartWriter ) ;
3042
3050
return displayPartWriter . displayParts ( ) ;
@@ -3058,7 +3066,7 @@ export function typeToDisplayParts(
3058
3066
) : SymbolDisplayPart [ ] {
3059
3067
return mapToDisplayParts ( writer => {
3060
3068
typechecker . writeType ( type , enclosingDeclaration , flags | TypeFormatFlags . MultilineObjectLiterals | TypeFormatFlags . UseAliasDefinedOutsideCurrentScope , writer , maximumLength , verbosityLevel , out ) ;
3061
- } ) ;
3069
+ } , maximumLength ) ;
3062
3070
}
3063
3071
3064
3072
/** @internal */
@@ -3081,7 +3089,7 @@ export function signatureToDisplayParts(
3081
3089
flags |= TypeFormatFlags . UseAliasDefinedOutsideCurrentScope | TypeFormatFlags . MultilineObjectLiterals | TypeFormatFlags . WriteTypeArgumentsOfSignature | TypeFormatFlags . OmitParameterModifiers ;
3082
3090
return mapToDisplayParts ( writer => {
3083
3091
typechecker . writeSignature ( signature , enclosingDeclaration , flags , /*kind*/ undefined , writer , maximumLength , verbosityLevel , out ) ;
3084
- } ) ;
3092
+ } , maximumLength ) ;
3085
3093
}
3086
3094
3087
3095
/** @internal */
0 commit comments