Skip to content

Commit

Permalink
Merge pull request #11869 from Microsoft/vladima/11852
Browse files Browse the repository at this point in the history
support both old and new set of settings in the formatting API
  • Loading branch information
vladima committed Oct 26, 2016
2 parents 80bca64 + 6041fce commit 4c67000
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 12 deletions.
30 changes: 25 additions & 5 deletions src/services/formatting/formatting.ts
Expand Up @@ -67,7 +67,11 @@ namespace ts.formatting {
delta: number;
}

export function formatOnEnter(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
export function formatOnEnter(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings | FormatCodeOptions): TextChange[] {
return formatOnEnterWorker(position, sourceFile, rulesProvider, toEditorSettings(options));
}

export function formatOnEnterWorker(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
const line = sourceFile.getLineAndCharacterOfPosition(position).line;
if (line === 0) {
return [];
Expand Down Expand Up @@ -96,23 +100,39 @@ namespace ts.formatting {
return formatSpan(span, sourceFile, options, rulesProvider, FormattingRequestKind.FormatOnEnter);
}

export function formatOnSemicolon(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
export function formatOnSemicolon(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings | FormatCodeOptions): TextChange[] {
return formatOnSemicolonWorker(position, sourceFile, rulesProvider, toEditorSettings(options));
}

export function formatOnSemicolonWorker(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
return formatOutermostParent(position, SyntaxKind.SemicolonToken, sourceFile, options, rulesProvider, FormattingRequestKind.FormatOnSemicolon);
}

export function formatOnClosingCurly(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
export function formatOnClosingCurly(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings | FormatCodeOptions): TextChange[] {
return formatOnClosingCurlyWorker(position, sourceFile, rulesProvider, toEditorSettings(options));
}

export function formatOnClosingCurlyWorker(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
return formatOutermostParent(position, SyntaxKind.CloseBraceToken, sourceFile, options, rulesProvider, FormattingRequestKind.FormatOnClosingCurlyBrace);
}

export function formatDocument(sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
export function formatDocument(sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings | FormatCodeOptions): TextChange[] {
return formatDocumentWorker(sourceFile, rulesProvider, toEditorSettings(options));
}

export function formatDocumentWorker(sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
const span = {
pos: 0,
end: sourceFile.text.length
};
return formatSpan(span, sourceFile, options, rulesProvider, FormattingRequestKind.FormatDocument);
}

export function formatSelection(start: number, end: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
export function formatSelection(start: number, end: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings | FormatCodeOptions): TextChange[] {
return formatSelectionWorker(start, end, sourceFile, rulesProvider, toEditorSettings(options));
}

export function formatSelectionWorker(start: number, end: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeSettings): TextChange[] {
// format from the beginning of the line
const span = {
pos: getLineStartPositionForPosition(start, sourceFile),
Expand Down
6 changes: 5 additions & 1 deletion src/services/formatting/rulesProvider.ts
Expand Up @@ -24,7 +24,11 @@ namespace ts.formatting {
return this.rulesMap;
}

public ensureUpToDate(options: ts.FormatCodeSettings) {
public ensureUpToDate(options: ts.FormatCodeSettings | ts.FormatCodeOptions) {
this.ensureUpToDateWorker(toEditorSettings(options));
}

public ensureUpToDateWorker(options: ts.FormatCodeSettings) {
if (!this.options || !ts.compareDataObjects(this.options, options)) {
const activeRules = this.createActiveRules(options);
const rulesMap = RulesMap.create(activeRules);
Expand Down
12 changes: 6 additions & 6 deletions src/services/services.ts
Expand Up @@ -3164,7 +3164,7 @@ namespace ts {
ruleProvider = new formatting.RulesProvider();
}

ruleProvider.ensureUpToDate(options);
ruleProvider.ensureUpToDateWorker(options);
return ruleProvider;
}

Expand Down Expand Up @@ -8509,27 +8509,27 @@ namespace ts {
function getFormattingEditsForRange(fileName: string, start: number, end: number, optionsOrSettings: FormatCodeOptions | FormatCodeSettings): TextChange[] {
const settings = toEditorSettings(optionsOrSettings);
const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
return formatting.formatSelection(start, end, sourceFile, getRuleProvider(settings), settings);
return formatting.formatSelectionWorker(start, end, sourceFile, getRuleProvider(settings), settings);
}

function getFormattingEditsForDocument(fileName: string, optionsOrSettings: FormatCodeOptions | FormatCodeSettings): TextChange[] {
const settings = toEditorSettings(optionsOrSettings);
const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
return formatting.formatDocument(sourceFile, getRuleProvider(settings), settings);
return formatting.formatDocumentWorker(sourceFile, getRuleProvider(settings), settings);
}

function getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, optionsOrSettings: FormatCodeOptions | FormatCodeSettings): TextChange[] {
const settings = toEditorSettings(optionsOrSettings);
const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);

if (key === "}") {
return formatting.formatOnClosingCurly(position, sourceFile, getRuleProvider(settings), settings);
return formatting.formatOnClosingCurlyWorker(position, sourceFile, getRuleProvider(settings), settings);
}
else if (key === ";") {
return formatting.formatOnSemicolon(position, sourceFile, getRuleProvider(settings), settings);
return formatting.formatOnSemicolonWorker(position, sourceFile, getRuleProvider(settings), settings);
}
else if (key === "\n") {
return formatting.formatOnEnter(position, sourceFile, getRuleProvider(settings), settings);
return formatting.formatOnEnterWorker(position, sourceFile, getRuleProvider(settings), settings);
}

return [];
Expand Down

0 comments on commit 4c67000

Please sign in to comment.