diff --git a/src/vs/editor/contrib/format/format.ts b/src/vs/editor/contrib/format/format.ts index 3d448d4ae06dbee071168371424ccc7b17700388..bc6ed0f89d95962d9a4cf29315f4f5b4ed2f9b9e 100644 --- a/src/vs/editor/contrib/format/format.ts +++ b/src/vs/editor/contrib/format/format.ts @@ -38,14 +38,14 @@ export function getDocumentRangeFormattingEdits(model: ITextModel, range: Range, let result: TextEdit[]; return sequence(providers.map(provider => { - if (isFalsyOrEmpty(result)) { - return () => { - return asWinJsPromise(token => provider.provideDocumentRangeFormattingEdits(model, range, options, token)).then(value => { - result = value; - }, onUnexpectedExternalError); - }; - } - return undefined; + return () => { + if (!isFalsyOrEmpty(result)) { + return undefined; + } + return asWinJsPromise(token => provider.provideDocumentRangeFormattingEdits(model, range, options, token)).then(value => { + result = value; + }, onUnexpectedExternalError); + }; })).then(() => result); } @@ -59,14 +59,14 @@ export function getDocumentFormattingEdits(model: ITextModel, options: Formattin let result: TextEdit[]; return sequence(providers.map(provider => { - if (isFalsyOrEmpty(result)) { - return () => { - return asWinJsPromise(token => provider.provideDocumentFormattingEdits(model, options, token)).then(value => { - result = value; - }, onUnexpectedExternalError); - }; - } - return undefined; + return () => { + if (!isFalsyOrEmpty(result)) { + return undefined; + } + return asWinJsPromise(token => provider.provideDocumentFormattingEdits(model, options, token)).then(value => { + result = value; + }, onUnexpectedExternalError); + }; })).then(() => result); } diff --git a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts index daeba76fd089a34b002508c94c9d4614aa207eb2..d348ee87d64ba7c2742750238e120aa305cb8096 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts @@ -1034,6 +1034,13 @@ suite('ExtHostLanguageFeatures', function () { }); test('Format Doc, order', function () { + + disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, { + provideDocumentFormattingEdits(): any { + return undefined; + } + })); + disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, { provideDocumentFormattingEdits(): any { return [new types.TextEdit(new types.Range(0, 0, 0, 0), 'testing')]; @@ -1079,6 +1086,11 @@ suite('ExtHostLanguageFeatures', function () { return [new types.TextEdit(new types.Range(0, 0, 0, 0), 'range')]; } })); + disposables.push(extHost.registerDocumentRangeFormattingEditProvider(defaultSelector, { + provideDocumentRangeFormattingEdits(): any { + return [new types.TextEdit(new types.Range(2, 3, 4, 5), 'range2')]; + } + })); disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, { provideDocumentFormattingEdits(): any { return [new types.TextEdit(new types.Range(0, 0, 1, 1), 'doc')]; @@ -1088,7 +1100,11 @@ suite('ExtHostLanguageFeatures', function () { return getDocumentRangeFormattingEdits(model, new EditorRange(1, 1, 1, 1), { insertSpaces: true, tabSize: 4 }).then(value => { assert.equal(value.length, 1); let [first] = value; - assert.equal(first.text, 'range'); + assert.equal(first.text, 'range2'); + assert.equal(first.range.startLineNumber, 3); + assert.equal(first.range.startColumn, 4); + assert.equal(first.range.endLineNumber, 5); + assert.equal(first.range.endColumn, 6); }); }); });