Skip to content

Commit 5ad7e95

Browse files
author
Andy
authored
Remove unnecessary wrapper classes in ts.formatting.Rule (#19744)
* Remove unnecessary wrapper classes in ts.formatting.Rule * RulesProvider -> immutable FormatContext * Remove Rules class, just use a list of rules * Remove Shared namespace, replace Shared.TokenRange with TokenRange * Simplify TokenRange * Separate Rule and RuleSpec * Move FormattingRequestKind to formattingContext.ts * Simplify references * Fix lint * Revert removal of trailing newlines
1 parent 20e36db commit 5ad7e95

24 files changed

+801
-1404
lines changed

src/harness/tsconfig.json

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,11 @@
6060
"../services/jsTyping.ts",
6161
"../services/formatting/formatting.ts",
6262
"../services/formatting/formattingContext.ts",
63-
"../services/formatting/formattingRequestKind.ts",
6463
"../services/formatting/formattingScanner.ts",
65-
"../services/formatting/references.ts",
6664
"../services/formatting/rule.ts",
67-
"../services/formatting/ruleAction.ts",
68-
"../services/formatting/ruleDescriptor.ts",
69-
"../services/formatting/ruleFlag.ts",
70-
"../services/formatting/ruleOperation.ts",
71-
"../services/formatting/ruleOperationContext.ts",
7265
"../services/formatting/rules.ts",
7366
"../services/formatting/rulesMap.ts",
74-
"../services/formatting/rulesProvider.ts",
7567
"../services/formatting/smartIndenter.ts",
76-
"../services/formatting/tokenRange.ts",
7768
"../services/codeFixProvider.ts",
7869
"../services/codefixes/fixes.ts",
7970
"../services/codefixes/helpers.ts",

src/harness/unittests/extractTestHelpers.ts

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -67,33 +67,27 @@ namespace ts {
6767
}
6868

6969
export const newLineCharacter = "\n";
70-
export const getRuleProvider = memoize(getRuleProviderInternal);
71-
function getRuleProviderInternal() {
72-
const options = {
73-
indentSize: 4,
74-
tabSize: 4,
75-
newLineCharacter,
76-
convertTabsToSpaces: true,
77-
indentStyle: ts.IndentStyle.Smart,
78-
insertSpaceAfterConstructor: false,
79-
insertSpaceAfterCommaDelimiter: true,
80-
insertSpaceAfterSemicolonInForStatements: true,
81-
insertSpaceBeforeAndAfterBinaryOperators: true,
82-
insertSpaceAfterKeywordsInControlFlowStatements: true,
83-
insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,
84-
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
85-
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
86-
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,
87-
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
88-
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
89-
insertSpaceBeforeFunctionParenthesis: false,
90-
placeOpenBraceOnNewLineForFunctions: false,
91-
placeOpenBraceOnNewLineForControlBlocks: false,
92-
};
93-
const rulesProvider = new formatting.RulesProvider();
94-
rulesProvider.ensureUpToDate(options);
95-
return rulesProvider;
96-
}
70+
export const testFormatOptions: ts.FormatCodeSettings = {
71+
indentSize: 4,
72+
tabSize: 4,
73+
newLineCharacter,
74+
convertTabsToSpaces: true,
75+
indentStyle: ts.IndentStyle.Smart,
76+
insertSpaceAfterConstructor: false,
77+
insertSpaceAfterCommaDelimiter: true,
78+
insertSpaceAfterSemicolonInForStatements: true,
79+
insertSpaceBeforeAndAfterBinaryOperators: true,
80+
insertSpaceAfterKeywordsInControlFlowStatements: true,
81+
insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,
82+
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
83+
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
84+
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,
85+
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
86+
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
87+
insertSpaceBeforeFunctionParenthesis: false,
88+
placeOpenBraceOnNewLineForFunctions: false,
89+
placeOpenBraceOnNewLineForControlBlocks: false,
90+
};
9791

9892
const notImplementedHost: LanguageServiceHost = {
9993
getCompilationSettings: notImplemented,
@@ -133,7 +127,7 @@ namespace ts {
133127
startPosition: selectionRange.start,
134128
endPosition: selectionRange.end,
135129
host: notImplementedHost,
136-
rulesProvider: getRuleProvider()
130+
formatContext: formatting.getFormatContext(testFormatOptions),
137131
};
138132
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromBounds(selectionRange.start, selectionRange.end));
139133
assert.equal(rangeToExtract.errors, undefined, rangeToExtract.errors && "Range error: " + rangeToExtract.errors[0].messageText);
@@ -197,7 +191,7 @@ namespace ts {
197191
startPosition: selectionRange.start,
198192
endPosition: selectionRange.end,
199193
host: notImplementedHost,
200-
rulesProvider: getRuleProvider()
194+
formatContext: formatting.getFormatContext(testFormatOptions),
201195
};
202196
const rangeToExtract = refactor.extractSymbol.getRangeToExtract(sourceFile, createTextSpanFromBounds(selectionRange.start, selectionRange.end));
203197
assert.isUndefined(rangeToExtract.errors, rangeToExtract.errors && "Range error: " + rangeToExtract.errors[0].messageText);

src/harness/unittests/textChanges.ts

Lines changed: 2 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -23,60 +23,8 @@ namespace ts {
2323
const printerOptions = { newLine: NewLineKind.LineFeed };
2424
const newLineCharacter = getNewLineCharacter(printerOptions);
2525

26-
const getRuleProviderDefault = memoize(() => {
27-
const options = {
28-
indentSize: 4,
29-
tabSize: 4,
30-
newLineCharacter,
31-
convertTabsToSpaces: true,
32-
indentStyle: ts.IndentStyle.Smart,
33-
insertSpaceAfterConstructor: false,
34-
insertSpaceAfterCommaDelimiter: true,
35-
insertSpaceAfterSemicolonInForStatements: true,
36-
insertSpaceBeforeAndAfterBinaryOperators: true,
37-
insertSpaceAfterKeywordsInControlFlowStatements: true,
38-
insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,
39-
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
40-
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
41-
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,
42-
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
43-
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
44-
insertSpaceBeforeFunctionParenthesis: false,
45-
placeOpenBraceOnNewLineForFunctions: false,
46-
placeOpenBraceOnNewLineForControlBlocks: false,
47-
};
48-
const rulesProvider = new formatting.RulesProvider();
49-
rulesProvider.ensureUpToDate(options);
50-
return rulesProvider;
51-
});
52-
const getRuleProviderNewlineBrace = memoize(() => {
53-
const options = {
54-
indentSize: 4,
55-
tabSize: 4,
56-
newLineCharacter,
57-
convertTabsToSpaces: true,
58-
indentStyle: ts.IndentStyle.Smart,
59-
insertSpaceAfterConstructor: false,
60-
insertSpaceAfterCommaDelimiter: true,
61-
insertSpaceAfterSemicolonInForStatements: true,
62-
insertSpaceBeforeAndAfterBinaryOperators: true,
63-
insertSpaceAfterKeywordsInControlFlowStatements: true,
64-
insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,
65-
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
66-
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
67-
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,
68-
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
69-
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
70-
insertSpaceBeforeFunctionParenthesis: false,
71-
placeOpenBraceOnNewLineForFunctions: true,
72-
placeOpenBraceOnNewLineForControlBlocks: false,
73-
};
74-
const rulesProvider = new formatting.RulesProvider();
75-
rulesProvider.ensureUpToDate(options);
76-
return rulesProvider;
77-
});
78-
function getRuleProvider(placeOpenBraceOnNewLineForFunctions: boolean) {
79-
return placeOpenBraceOnNewLineForFunctions ? getRuleProviderNewlineBrace() : getRuleProviderDefault();
26+
function getRuleProvider(placeOpenBraceOnNewLineForFunctions: boolean): formatting.FormatContext {
27+
return formatting.getFormatContext(placeOpenBraceOnNewLineForFunctions ? { ...testFormatOptions, placeOpenBraceOnNewLineForFunctions: true } : testFormatOptions);
8028
}
8129

8230
// validate that positions that were recovered from the printed text actually match positions that will be created if the same text is parsed.

src/services/codefixes/importFixes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ namespace ts.codefix {
166166
return {
167167
host: context.host,
168168
newLineCharacter: context.newLineCharacter,
169-
rulesProvider: context.rulesProvider,
169+
formatContext: context.formatContext,
170170
sourceFile: context.sourceFile,
171171
checker,
172172
compilerOptions: context.program.getCompilerOptions(),

src/services/completions.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ namespace ts.Completions {
415415
entryId: CompletionEntryIdentifier,
416416
allSourceFiles: ReadonlyArray<SourceFile>,
417417
host: LanguageServiceHost,
418-
rulesProvider: formatting.RulesProvider,
418+
formatContext: formatting.FormatContext,
419419
): CompletionEntryDetails {
420420
const { name, source } = entryId;
421421
// Compute all the completion symbols again.
@@ -436,7 +436,7 @@ namespace ts.Completions {
436436
}
437437
case "symbol": {
438438
const { symbol, location, symbolToOriginInfoMap } = symbolCompletion;
439-
const codeActions = getCompletionEntryCodeActions(symbolToOriginInfoMap, symbol, typeChecker, host, compilerOptions, sourceFile, rulesProvider);
439+
const codeActions = getCompletionEntryCodeActions(symbolToOriginInfoMap, symbol, typeChecker, host, compilerOptions, sourceFile, formatContext);
440440
const kindModifiers = SymbolDisplay.getSymbolModifiers(symbol);
441441
const { displayParts, documentation, symbolKind, tags } = SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, location, location, SemanticMeaning.All);
442442
return { name, kindModifiers, kind: symbolKind, displayParts, documentation, tags, codeActions, source: source === undefined ? undefined : [textPart(source)] };
@@ -467,7 +467,7 @@ namespace ts.Completions {
467467
host: LanguageServiceHost,
468468
compilerOptions: CompilerOptions,
469469
sourceFile: SourceFile,
470-
rulesProvider: formatting.RulesProvider,
470+
formatContext: formatting.FormatContext,
471471
): CodeAction[] | undefined {
472472
const symbolOriginInfo = symbolToOriginInfoMap[getSymbolId(symbol)];
473473
if (!symbolOriginInfo) {
@@ -481,7 +481,7 @@ namespace ts.Completions {
481481
newLineCharacter: host.getNewLine(),
482482
compilerOptions,
483483
sourceFile,
484-
rulesProvider,
484+
formatContext,
485485
symbolName: symbol.name,
486486
getCanonicalFileName: createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : false),
487487
symbolToken: undefined,

0 commit comments

Comments
 (0)