Use standard setting name and fix check

This commit is contained in:
Matt Bierner
2026-02-17 16:56:50 -08:00
parent 2a2f6407e4
commit 3f8fc43e23
4 changed files with 26 additions and 25 deletions

View File

@@ -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"

View File

@@ -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<vscode.TextEdit[] | undefined> {
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<vscode.TextEdit[] | undefined> {
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<boolean>('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),

View File

@@ -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[]

View File

@@ -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<T>(
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<T>(
// Fall back to language-specific setting
const languageConfig = vscode.workspace.getConfiguration(options.fallbackSection, options.scope);
return languageConfig.get<T>(subSectionName, defaultValue);
return languageConfig.get<T>(options.fallbackSubSectionNameOverride ?? subSectionName, defaultValue);
}
/**