提交 4e2035d4 编写于 作者: J Johannes Rieken

make sure sequence terminates as soon as formatting results are in,

related to  https://github.com/Microsoft/vscode-languageserver-node/issues/305, fyi @dbauemer
上级 0dee29f0
...@@ -38,14 +38,14 @@ export function getDocumentRangeFormattingEdits(model: ITextModel, range: Range, ...@@ -38,14 +38,14 @@ export function getDocumentRangeFormattingEdits(model: ITextModel, range: Range,
let result: TextEdit[]; let result: TextEdit[];
return sequence(providers.map(provider => { return sequence(providers.map(provider => {
if (isFalsyOrEmpty(result)) { return () => {
return () => { if (!isFalsyOrEmpty(result)) {
return asWinJsPromise(token => provider.provideDocumentRangeFormattingEdits(model, range, options, token)).then(value => { return undefined;
result = value; }
}, onUnexpectedExternalError); return asWinJsPromise(token => provider.provideDocumentRangeFormattingEdits(model, range, options, token)).then(value => {
}; result = value;
} }, onUnexpectedExternalError);
return undefined; };
})).then(() => result); })).then(() => result);
} }
...@@ -59,14 +59,14 @@ export function getDocumentFormattingEdits(model: ITextModel, options: Formattin ...@@ -59,14 +59,14 @@ export function getDocumentFormattingEdits(model: ITextModel, options: Formattin
let result: TextEdit[]; let result: TextEdit[];
return sequence(providers.map(provider => { return sequence(providers.map(provider => {
if (isFalsyOrEmpty(result)) { return () => {
return () => { if (!isFalsyOrEmpty(result)) {
return asWinJsPromise(token => provider.provideDocumentFormattingEdits(model, options, token)).then(value => { return undefined;
result = value; }
}, onUnexpectedExternalError); return asWinJsPromise(token => provider.provideDocumentFormattingEdits(model, options, token)).then(value => {
}; result = value;
} }, onUnexpectedExternalError);
return undefined; };
})).then(() => result); })).then(() => result);
} }
......
...@@ -1034,6 +1034,13 @@ suite('ExtHostLanguageFeatures', function () { ...@@ -1034,6 +1034,13 @@ suite('ExtHostLanguageFeatures', function () {
}); });
test('Format Doc, order', function () { test('Format Doc, order', function () {
disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{
provideDocumentFormattingEdits(): any {
return undefined;
}
}));
disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{ disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{
provideDocumentFormattingEdits(): any { provideDocumentFormattingEdits(): any {
return [new types.TextEdit(new types.Range(0, 0, 0, 0), 'testing')]; return [new types.TextEdit(new types.Range(0, 0, 0, 0), 'testing')];
...@@ -1079,6 +1086,11 @@ suite('ExtHostLanguageFeatures', function () { ...@@ -1079,6 +1086,11 @@ suite('ExtHostLanguageFeatures', function () {
return [new types.TextEdit(new types.Range(0, 0, 0, 0), 'range')]; return [new types.TextEdit(new types.Range(0, 0, 0, 0), 'range')];
} }
})); }));
disposables.push(extHost.registerDocumentRangeFormattingEditProvider(defaultSelector, <vscode.DocumentRangeFormattingEditProvider>{
provideDocumentRangeFormattingEdits(): any {
return [new types.TextEdit(new types.Range(2, 3, 4, 5), 'range2')];
}
}));
disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{ disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{
provideDocumentFormattingEdits(): any { provideDocumentFormattingEdits(): any {
return [new types.TextEdit(new types.Range(0, 0, 1, 1), 'doc')]; return [new types.TextEdit(new types.Range(0, 0, 1, 1), 'doc')];
...@@ -1088,7 +1100,11 @@ suite('ExtHostLanguageFeatures', function () { ...@@ -1088,7 +1100,11 @@ suite('ExtHostLanguageFeatures', function () {
return getDocumentRangeFormattingEdits(model, new EditorRange(1, 1, 1, 1), { insertSpaces: true, tabSize: 4 }).then(value => { return getDocumentRangeFormattingEdits(model, new EditorRange(1, 1, 1, 1), { insertSpaces: true, tabSize: 4 }).then(value => {
assert.equal(value.length, 1); assert.equal(value.length, 1);
let [first] = value; 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);
}); });
}); });
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册