@@ -2761,9 +2761,16 @@ export function isFirstDeclarationOfSymbolParameter(symbol: Symbol): boolean {
27612761 return ! ! findAncestor ( declaration , n => isParameter ( n ) ? true : isBindingElement ( n ) || isObjectBindingPattern ( n ) || isArrayBindingPattern ( n ) ? false : "quit" ) ;
27622762}
27632763
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
27672774 let displayParts : SymbolDisplayPart [ ] ;
27682775 let lineStart : boolean ;
27692776 let indent : number ;
@@ -3036,7 +3043,8 @@ export function lineBreakPart(): SymbolDisplayPart {
30363043}
30373044
30383045/** @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 ) ;
30403048 try {
30413049 writeDisplayParts ( displayPartWriter ) ;
30423050 return displayPartWriter . displayParts ( ) ;
@@ -3058,7 +3066,7 @@ export function typeToDisplayParts(
30583066) : SymbolDisplayPart [ ] {
30593067 return mapToDisplayParts ( writer => {
30603068 typechecker . writeType ( type , enclosingDeclaration , flags | TypeFormatFlags . MultilineObjectLiterals | TypeFormatFlags . UseAliasDefinedOutsideCurrentScope , writer , maximumLength , verbosityLevel , out ) ;
3061- } ) ;
3069+ } , maximumLength ) ;
30623070}
30633071
30643072/** @internal */
@@ -3081,7 +3089,7 @@ export function signatureToDisplayParts(
30813089 flags |= TypeFormatFlags . UseAliasDefinedOutsideCurrentScope | TypeFormatFlags . MultilineObjectLiterals | TypeFormatFlags . WriteTypeArgumentsOfSignature | TypeFormatFlags . OmitParameterModifiers ;
30823090 return mapToDisplayParts ( writer => {
30833091 typechecker . writeSignature ( signature , enclosingDeclaration , flags , /*kind*/ undefined , writer , maximumLength , verbosityLevel , out ) ;
3084- } ) ;
3092+ } , maximumLength ) ;
30853093}
30863094
30873095/** @internal */
0 commit comments