Adopt unified js/ts setting for format settings

For #292934
This commit is contained in:
Matt Bierner
2026-02-17 13:05:55 -08:00
parent 2a4eb42d07
commit 2a2f6407e4
4 changed files with 294 additions and 26 deletions

View File

@@ -1451,208 +1451,431 @@
"title": "%configuration.format%",
"order": 23,
"properties": {
"js/ts.format.enable": {
"type": "boolean",
"default": true,
"description": "%format.enable%",
"scope": "window",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.enable": {
"type": "boolean",
"default": true,
"description": "%javascript.format.enable%",
"markdownDeprecationMessage": "%configuration.format.enable.unifiedDeprecationMessage%",
"scope": "window"
},
"typescript.format.enable": {
"type": "boolean",
"default": true,
"description": "%typescript.format.enable%",
"markdownDeprecationMessage": "%configuration.format.enable.unifiedDeprecationMessage%",
"scope": "window"
},
"js/ts.format.insertSpaceAfterCommaDelimiter": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterCommaDelimiter%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterCommaDelimiter": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterCommaDelimiter%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterCommaDelimiter.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterCommaDelimiter": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterCommaDelimiter%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterCommaDelimiter.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterConstructor": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterConstructor%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterConstructor": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterConstructor%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterConstructor.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterConstructor": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterConstructor%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterConstructor.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterSemicolonInForStatements": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterSemicolonInForStatements%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterSemicolonInForStatements": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterSemicolonInForStatements%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterSemicolonInForStatements.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterSemicolonInForStatements": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterSemicolonInForStatements%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterSemicolonInForStatements.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceBeforeAndAfterBinaryOperators": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceBeforeAndAfterBinaryOperators%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceBeforeAndAfterBinaryOperators": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceBeforeAndAfterBinaryOperators%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceBeforeAndAfterBinaryOperators.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceBeforeAndAfterBinaryOperators": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceBeforeAndAfterBinaryOperators%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceBeforeAndAfterBinaryOperators.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterKeywordsInControlFlowStatements": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterKeywordsInControlFlowStatements%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterKeywordsInControlFlowStatements%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterKeywordsInControlFlowStatements.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterKeywordsInControlFlowStatements%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterKeywordsInControlFlowStatements.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterFunctionKeywordForAnonymousFunctions%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterFunctionKeywordForAnonymousFunctions%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterFunctionKeywordForAnonymousFunctions%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceBeforeFunctionParenthesis": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceBeforeFunctionParenthesis%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceBeforeFunctionParenthesis": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceBeforeFunctionParenthesis%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceBeforeFunctionParenthesis.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceBeforeFunctionParenthesis": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceBeforeFunctionParenthesis%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceBeforeFunctionParenthesis.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": {
"type": "boolean",
"default": true,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.insertSpaceAfterTypeAssertion": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterTypeAssertion%",
"scope": "resource",
"tags": [
"TypeScript"
]
},
"typescript.format.insertSpaceAfterTypeAssertion": {
"type": "boolean",
"default": false,
"description": "%format.insertSpaceAfterTypeAssertion%",
"markdownDeprecationMessage": "%configuration.format.insertSpaceAfterTypeAssertion.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.placeOpenBraceOnNewLineForFunctions": {
"type": "boolean",
"default": false,
"description": "%format.placeOpenBraceOnNewLineForFunctions%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.placeOpenBraceOnNewLineForFunctions": {
"type": "boolean",
"default": false,
"description": "%format.placeOpenBraceOnNewLineForFunctions%",
"markdownDeprecationMessage": "%configuration.format.placeOpenBraceOnNewLineForFunctions.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.placeOpenBraceOnNewLineForFunctions": {
"type": "boolean",
"default": false,
"description": "%format.placeOpenBraceOnNewLineForFunctions%",
"markdownDeprecationMessage": "%configuration.format.placeOpenBraceOnNewLineForFunctions.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.placeOpenBraceOnNewLineForControlBlocks": {
"type": "boolean",
"default": false,
"description": "%format.placeOpenBraceOnNewLineForControlBlocks%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.placeOpenBraceOnNewLineForControlBlocks": {
"type": "boolean",
"default": false,
"description": "%format.placeOpenBraceOnNewLineForControlBlocks%",
"markdownDeprecationMessage": "%configuration.format.placeOpenBraceOnNewLineForControlBlocks.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.placeOpenBraceOnNewLineForControlBlocks": {
"type": "boolean",
"default": false,
"description": "%format.placeOpenBraceOnNewLineForControlBlocks%",
"markdownDeprecationMessage": "%configuration.format.placeOpenBraceOnNewLineForControlBlocks.unifiedDeprecationMessage%",
"scope": "resource"
},
"js/ts.format.semicolons": {
"type": "string",
"default": "ignore",
"description": "%format.semicolons%",
"scope": "resource",
"enum": [
"ignore",
"insert",
"remove"
],
"enumDescriptions": [
"%format.semicolons.ignore%",
"%format.semicolons.insert%",
"%format.semicolons.remove%"
],
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.semicolons": {
"type": "string",
"default": "ignore",
"description": "%format.semicolons%",
"markdownDeprecationMessage": "%configuration.format.semicolons.unifiedDeprecationMessage%",
"scope": "resource",
"enum": [
"ignore",
@@ -1669,6 +1892,7 @@
"type": "string",
"default": "ignore",
"description": "%format.semicolons%",
"markdownDeprecationMessage": "%configuration.format.semicolons.unifiedDeprecationMessage%",
"scope": "resource",
"enum": [
"ignore",
@@ -1681,16 +1905,28 @@
"%format.semicolons.remove%"
]
},
"js/ts.format.indentSwitchCase": {
"type": "boolean",
"default": true,
"description": "%format.indentSwitchCase%",
"scope": "resource",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.format.indentSwitchCase": {
"type": "boolean",
"default": true,
"description": "%format.indentSwitchCase%",
"markdownDeprecationMessage": "%configuration.format.indentSwitchCase.unifiedDeprecationMessage%",
"scope": "resource"
},
"typescript.format.indentSwitchCase": {
"type": "boolean",
"default": true,
"description": "%format.indentSwitchCase%",
"markdownDeprecationMessage": "%configuration.format.indentSwitchCase.unifiedDeprecationMessage%",
"scope": "resource"
}
}

View File

@@ -49,6 +49,26 @@
"format.semicolons.insert": "Insert semicolons at statement ends.",
"format.semicolons.remove": "Remove unnecessary semicolons.",
"format.indentSwitchCase": "Indent case clauses in switch statements. Requires using TypeScript 5.1+ in the workspace.",
"format.enable": "Enable/disable the default JavaScript and TypeScript formatter.",
"configuration.format.enable.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.enable#` instead.",
"configuration.format.insertSpaceAfterCommaDelimiter.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterCommaDelimiter#` instead.",
"configuration.format.insertSpaceAfterConstructor.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterConstructor#` instead.",
"configuration.format.insertSpaceAfterSemicolonInForStatements.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterSemicolonInForStatements#` instead.",
"configuration.format.insertSpaceBeforeAndAfterBinaryOperators.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceBeforeAndAfterBinaryOperators#` instead.",
"configuration.format.insertSpaceAfterKeywordsInControlFlowStatements.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterKeywordsInControlFlowStatements#` instead.",
"configuration.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions#` instead.",
"configuration.format.insertSpaceBeforeFunctionParenthesis.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceBeforeFunctionParenthesis#` instead.",
"configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis#` instead.",
"configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets#` instead.",
"configuration.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces#` instead.",
"configuration.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces#` instead.",
"configuration.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces#` instead.",
"configuration.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces#` instead.",
"configuration.format.insertSpaceAfterTypeAssertion.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.insertSpaceAfterTypeAssertion#` instead.",
"configuration.format.placeOpenBraceOnNewLineForFunctions.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.placeOpenBraceOnNewLineForFunctions#` instead.",
"configuration.format.placeOpenBraceOnNewLineForControlBlocks.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.placeOpenBraceOnNewLineForControlBlocks#` instead.",
"configuration.format.semicolons.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.semicolons#` instead.",
"configuration.format.indentSwitchCase.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.indentSwitchCase#` instead.",
"javascript.validate.enable": "Enable/disable JavaScript validation.",
"javascript.goToProjectConfig.title": "Go to Project Configuration (jsconfig / tsconfig)",
"typescript.goToProjectConfig.title": "Go to Project Configuration (tsconfig)",

View File

@@ -142,9 +142,7 @@ export default class FileConfigurationManager extends Disposable {
document: vscode.TextDocument,
options: FormattingOptions
): Proto.FormatCodeSettings {
const config = vscode.workspace.getConfiguration(
isTypeScriptDocument(document) ? 'typescript.format' : 'javascript.format',
document.uri);
const fallbackSection = isTypeScriptDocument(document) ? 'typescript' : 'javascript';
return {
tabSize: options.tabSize,
@@ -152,24 +150,24 @@ export default class FileConfigurationManager extends Disposable {
convertTabsToSpaces: options.insertSpaces,
// We can use \n here since the editor normalizes later on to its line endings.
newLineCharacter: '\n',
insertSpaceAfterCommaDelimiter: config.get<boolean>('insertSpaceAfterCommaDelimiter'),
insertSpaceAfterConstructor: config.get<boolean>('insertSpaceAfterConstructor'),
insertSpaceAfterSemicolonInForStatements: config.get<boolean>('insertSpaceAfterSemicolonInForStatements'),
insertSpaceBeforeAndAfterBinaryOperators: config.get<boolean>('insertSpaceBeforeAndAfterBinaryOperators'),
insertSpaceAfterKeywordsInControlFlowStatements: config.get<boolean>('insertSpaceAfterKeywordsInControlFlowStatements'),
insertSpaceAfterFunctionKeywordForAnonymousFunctions: config.get<boolean>('insertSpaceAfterFunctionKeywordForAnonymousFunctions'),
insertSpaceBeforeFunctionParenthesis: config.get<boolean>('insertSpaceBeforeFunctionParenthesis'),
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: config.get<boolean>('insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis'),
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: config.get<boolean>('insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets'),
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: config.get<boolean>('insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces'),
insertSpaceAfterOpeningAndBeforeClosingEmptyBraces: config.get<boolean>('insertSpaceAfterOpeningAndBeforeClosingEmptyBraces'),
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: config.get<boolean>('insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces'),
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: config.get<boolean>('insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces'),
insertSpaceAfterTypeAssertion: config.get<boolean>('insertSpaceAfterTypeAssertion'),
placeOpenBraceOnNewLineForFunctions: config.get<boolean>('placeOpenBraceOnNewLineForFunctions'),
placeOpenBraceOnNewLineForControlBlocks: config.get<boolean>('placeOpenBraceOnNewLineForControlBlocks'),
semicolons: config.get<Proto.SemicolonPreference>('semicolons'),
indentSwitchCase: config.get<boolean>('indentSwitchCase'),
insertSpaceAfterCommaDelimiter: readUnifiedConfig<boolean>('format.insertSpaceAfterCommaDelimiter', true, { scope: document.uri, fallbackSection }),
insertSpaceAfterConstructor: readUnifiedConfig<boolean>('format.insertSpaceAfterConstructor', false, { scope: document.uri, fallbackSection }),
insertSpaceAfterSemicolonInForStatements: readUnifiedConfig<boolean>('format.insertSpaceAfterSemicolonInForStatements', true, { scope: document.uri, fallbackSection }),
insertSpaceBeforeAndAfterBinaryOperators: readUnifiedConfig<boolean>('format.insertSpaceBeforeAndAfterBinaryOperators', true, { scope: document.uri, fallbackSection }),
insertSpaceAfterKeywordsInControlFlowStatements: readUnifiedConfig<boolean>('format.insertSpaceAfterKeywordsInControlFlowStatements', true, { scope: document.uri, fallbackSection }),
insertSpaceAfterFunctionKeywordForAnonymousFunctions: readUnifiedConfig<boolean>('format.insertSpaceAfterFunctionKeywordForAnonymousFunctions', true, { scope: document.uri, fallbackSection }),
insertSpaceBeforeFunctionParenthesis: readUnifiedConfig<boolean>('format.insertSpaceBeforeFunctionParenthesis', false, { scope: document.uri, fallbackSection }),
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: readUnifiedConfig<boolean>('format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis', false, { scope: document.uri, fallbackSection }),
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: readUnifiedConfig<boolean>('format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets', false, { scope: document.uri, fallbackSection }),
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: readUnifiedConfig<boolean>('format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces', true, { scope: document.uri, fallbackSection }),
insertSpaceAfterOpeningAndBeforeClosingEmptyBraces: readUnifiedConfig<boolean>('format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces', true, { scope: document.uri, fallbackSection }),
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: readUnifiedConfig<boolean>('format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces', false, { scope: document.uri, fallbackSection }),
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: readUnifiedConfig<boolean>('format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces', false, { scope: document.uri, fallbackSection }),
insertSpaceAfterTypeAssertion: readUnifiedConfig<boolean>('format.insertSpaceAfterTypeAssertion', false, { scope: document.uri, fallbackSection }),
placeOpenBraceOnNewLineForFunctions: readUnifiedConfig<boolean>('format.placeOpenBraceOnNewLineForFunctions', false, { scope: document.uri, fallbackSection }),
placeOpenBraceOnNewLineForControlBlocks: readUnifiedConfig<boolean>('format.placeOpenBraceOnNewLineForControlBlocks', false, { scope: document.uri, fallbackSection }),
semicolons: readUnifiedConfig<Proto.SemicolonPreference>('format.semicolons', 'ignore' as Proto.SemicolonPreference, { scope: document.uri, fallbackSection }),
indentSwitchCase: readUnifiedConfig<boolean>('format.indentSwitchCase', true, { scope: document.uri, fallbackSection }),
};
}

View File

@@ -9,12 +9,14 @@ 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, requireGlobalConfiguration } from './util/dependentRegistration';
import { conditionalRegistration, requireHasModifiedUnifiedConfig } from './util/dependentRegistration';
class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEditProvider, vscode.OnTypeFormattingEditProvider {
public constructor(
private readonly client: ITypeScriptServiceClient,
private readonly language: LanguageDescription,
private readonly fileConfigurationManager: FileConfigurationManager
) { }
@@ -24,6 +26,10 @@ 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;
@@ -46,10 +52,14 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit
ch: string,
options: vscode.FormattingOptions,
token: vscode.CancellationToken
): Promise<vscode.TextEdit[]> {
): Promise<vscode.TextEdit[] | undefined> {
if (!this.isEnabled(document)) {
return undefined;
}
const file = this.client.toOpenTsFilePath(document);
if (!file) {
return [];
return undefined;
}
await this.fileConfigurationManager.ensureConfigurationOptions(document, options, token);
@@ -83,6 +93,10 @@ 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(
@@ -92,9 +106,9 @@ export function register(
fileConfigurationManager: FileConfigurationManager
) {
return conditionalRegistration([
requireGlobalConfiguration(language.id, 'format.enable'),
requireHasModifiedUnifiedConfig('format.enable', language.id),
], () => {
const formattingProvider = new TypeScriptFormattingProvider(client, fileConfigurationManager);
const formattingProvider = new TypeScriptFormattingProvider(client, language, fileConfigurationManager);
return vscode.Disposable.from(
vscode.languages.registerOnTypeFormattingEditProvider(selector.syntax, formattingProvider, ';', '}', '\n'),
vscode.languages.registerDocumentRangeFormattingEditProvider(selector.syntax, formattingProvider),