From 3f8fc43e23257f3fcfbd2f9963586f36cd918b97 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Tue, 17 Feb 2026 16:56:50 -0800 Subject: [PATCH] Use standard setting name and fix check --- .../typescript-language-features/package.json | 4 ++-- .../src/languageFeatures/formatting.ts | 20 +++---------------- .../util/dependentRegistration.ts | 14 ++++++++++++- .../src/utils/configuration.ts | 13 +++++++----- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index b291704dcd2..ea0c302e2fd 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -1451,11 +1451,11 @@ "title": "%configuration.format%", "order": 23, "properties": { - "js/ts.format.enable": { + "js/ts.format.enabled": { "type": "boolean", "default": true, "description": "%format.enable%", - "scope": "window", + "scope": "language-overridable", "tags": [ "JavaScript", "TypeScript" diff --git a/extensions/typescript-language-features/src/languageFeatures/formatting.ts b/extensions/typescript-language-features/src/languageFeatures/formatting.ts index 225e0fa2e70..4b23268cd4c 100644 --- a/extensions/typescript-language-features/src/languageFeatures/formatting.ts +++ b/extensions/typescript-language-features/src/languageFeatures/formatting.ts @@ -9,14 +9,12 @@ import { LanguageDescription } from '../configuration/languageDescription'; import type * as Proto from '../tsServer/protocol/protocol'; import * as typeConverters from '../typeConverters'; import { ITypeScriptServiceClient } from '../typescriptService'; -import { readUnifiedConfig } from '../utils/configuration'; import FileConfigurationManager from './fileConfigurationManager'; -import { conditionalRegistration, requireHasModifiedUnifiedConfig } from './util/dependentRegistration'; +import { conditionalRegistration, requireGlobalUnifiedConfig } from './util/dependentRegistration'; class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEditProvider, vscode.OnTypeFormattingEditProvider { public constructor( private readonly client: ITypeScriptServiceClient, - private readonly language: LanguageDescription, private readonly fileConfigurationManager: FileConfigurationManager ) { } @@ -26,10 +24,6 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit options: vscode.FormattingOptions, token: vscode.CancellationToken ): Promise { - if (!this.isEnabled(document)) { - return undefined; - } - const file = this.client.toOpenTsFilePath(document); if (!file) { return undefined; @@ -53,10 +47,6 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit options: vscode.FormattingOptions, token: vscode.CancellationToken ): Promise { - if (!this.isEnabled(document)) { - return undefined; - } - const file = this.client.toOpenTsFilePath(document); if (!file) { return undefined; @@ -93,10 +83,6 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit } return result; } - - private isEnabled(document: vscode.TextDocument): boolean { - return readUnifiedConfig('format.enable', true, { scope: document, fallbackSection: this.language.id }); - } } export function register( @@ -106,9 +92,9 @@ export function register( fileConfigurationManager: FileConfigurationManager ) { return conditionalRegistration([ - requireHasModifiedUnifiedConfig('format.enable', language.id), + requireGlobalUnifiedConfig('format.enabled', { fallbackSection: language.id, fallbackSubSectionNameOverride: 'format.enable' }), ], () => { - const formattingProvider = new TypeScriptFormattingProvider(client, language, fileConfigurationManager); + const formattingProvider = new TypeScriptFormattingProvider(client, fileConfigurationManager); return vscode.Disposable.from( vscode.languages.registerOnTypeFormattingEditProvider(selector.syntax, formattingProvider, ';', '}', '\n'), vscode.languages.registerDocumentRangeFormattingEditProvider(selector.syntax, formattingProvider), diff --git a/extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts b/extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts index 916bfd8f3ae..e390d9a29fa 100644 --- a/extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts +++ b/extensions/typescript-language-features/src/languageFeatures/util/dependentRegistration.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import { API } from '../../tsServer/api'; import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService'; -import { hasModifiedUnifiedConfig } from '../../utils/configuration'; +import { hasModifiedUnifiedConfig, readUnifiedConfig, ReadUnifiedConfigOptions } from '../../utils/configuration'; import { Disposable } from '../../utils/dispose'; export class Condition extends Disposable { @@ -118,6 +118,18 @@ export function requireHasModifiedUnifiedConfig( ); } +export function requireGlobalUnifiedConfig( + configValue: string, + options: ReadUnifiedConfigOptions +) { + return new Condition( + () => { + return !!readUnifiedConfig(configValue, undefined, options); + }, + vscode.workspace.onDidChangeConfiguration + ); +} + export function requireSomeCapability( client: ITypeScriptServiceClient, ...capabilities: readonly ClientCapability[] diff --git a/extensions/typescript-language-features/src/utils/configuration.ts b/extensions/typescript-language-features/src/utils/configuration.ts index b10a70fd27a..c1d85755be7 100644 --- a/extensions/typescript-language-features/src/utils/configuration.ts +++ b/extensions/typescript-language-features/src/utils/configuration.ts @@ -9,6 +9,12 @@ type ConfigurationScope = vscode.ConfigurationScope | null | undefined; export const unifiedConfigSection = 'js/ts'; +export type ReadUnifiedConfigOptions = { + readonly scope?: ConfigurationScope; + readonly fallbackSection: string; + readonly fallbackSubSectionNameOverride?: string; +}; + /** * Gets a configuration value, checking the unified `js/ts` setting first, * then falling back to the language-specific setting. @@ -16,10 +22,7 @@ export const unifiedConfigSection = 'js/ts'; export function readUnifiedConfig( subSectionName: string, defaultValue: T, - options: { - readonly scope?: ConfigurationScope; - readonly fallbackSection: string; - } + options: ReadUnifiedConfigOptions ): T { // Check unified setting first const unifiedConfig = vscode.workspace.getConfiguration(unifiedConfigSection, options.scope); @@ -30,7 +33,7 @@ export function readUnifiedConfig( // Fall back to language-specific setting const languageConfig = vscode.workspace.getConfiguration(options.fallbackSection, options.scope); - return languageConfig.get(subSectionName, defaultValue); + return languageConfig.get(options.fallbackSubSectionNameOverride ?? subSectionName, defaultValue); } /**