提交 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,
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);
}
......
......@@ -1034,6 +1034,13 @@ suite('ExtHostLanguageFeatures', function () {
});
test('Format Doc, order', function () {
disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{
provideDocumentFormattingEdits(): any {
return undefined;
}
}));
disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{
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, <vscode.DocumentRangeFormattingEditProvider>{
provideDocumentRangeFormattingEdits(): any {
return [new types.TextEdit(new types.Range(2, 3, 4, 5), 'range2')];
}
}));
disposables.push(extHost.registerDocumentFormattingEditProvider(defaultSelector, <vscode.DocumentFormattingEditProvider>{
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);
});
});
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册