mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-17 07:13:45 +01:00
Use standard setting name and fix check
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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[]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user