diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index e1f544ab8659a..a087e162080e0 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -466,6 +466,12 @@ "tags": [ "experimental" ] + }, + "js/ts.hover.maximumLength": { + "type": "number", + "default": 500, + "description": "%configuration.hover.maximumLength%", + "scope": "resource" } } }, diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json index e5cdf74ba4ffc..5de96a8e6db32 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json @@ -226,6 +226,7 @@ "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want VS Code to detect a Node installation.", "configuration.updateImportsOnPaste": "Automatically update imports when pasting code. Requires TypeScript 5.6+.", "configuration.expandableHover": "Enable expanding/contracting the hover to reveal more/less information from the TS server. Requires TypeScript 5.9+.", + "configuration.hover.maximumLength": "The maximum number of characters in a hover. If the hover is longer than this, it will be truncated. Requires TypeScript 5.9+.", "walkthroughs.nodejsWelcome.title": "Get started with JavaScript and Node.js", "walkthroughs.nodejsWelcome.description": "Make the most of Visual Studio Code's first-class JavaScript experience.", "walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows.title": "Install Node.js", diff --git a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts index 39c95402bce7b..63613fcf34add 100644 --- a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts +++ b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts @@ -208,6 +208,8 @@ export default class FileConfigurationManager extends Disposable { includeCompletionsForModuleExports: config.get('suggest.autoImports'), ...getInlayHintsPreferences(config), ...this.getOrganizeImportsPreferences(preferencesConfig), + // @ts-expect-error until TS 5.9 + maximumHoverLength: this.getMaximumHoverLength(document), }; return preferences; @@ -257,6 +259,16 @@ export default class FileConfigurationManager extends Disposable { } : {}), }; } + + + private getMaximumHoverLength(document: vscode.TextDocument): number { + const defaultMaxLength = 500; + const maximumHoverLength = vscode.workspace.getConfiguration('js/ts', document).get('hover.maximumLength', defaultMaxLength); + if (!Number.isSafeInteger(maximumHoverLength) || maximumHoverLength <= 0) { + return defaultMaxLength; + } + return maximumHoverLength; + } } function withDefaultAsUndefined(value: T, def: O): Exclude | undefined {