incorperate folding api feedback

This commit is contained in:
Martin Aeschlimann
2018-04-18 15:26:43 +02:00
parent 89163a5f59
commit a1bb202eb6
18 changed files with 232 additions and 180 deletions

View File

@@ -9,7 +9,7 @@ import * as Proto from '../protocol';
import * as typeConverters from '../utils/typeConverters';
import { ITypeScriptServiceClient } from '../typescriptService';
export default class TypeScriptFoldingProvider implements vscode.FoldingProvider {
export default class TypeScriptFoldingProvider implements vscode.FoldingRangeProvider {
public constructor(
private readonly client: ITypeScriptServiceClient
) { }
@@ -18,7 +18,7 @@ export default class TypeScriptFoldingProvider implements vscode.FoldingProvider
document: vscode.TextDocument,
_context: vscode.FoldingContext,
token: vscode.CancellationToken
): Promise<vscode.FoldingRangeList | undefined> {
): Promise<vscode.FoldingRange[] | undefined> {
if (!this.client.apiVersion.has280Features()) {
return;
}
@@ -34,13 +34,13 @@ export default class TypeScriptFoldingProvider implements vscode.FoldingProvider
return;
}
return new vscode.FoldingRangeList(response.body.map(span => {
return response.body.map(span => {
const range = typeConverters.Range.fromTextSpan(span.textSpan);
// workaround for #47240
if (range.end.character > 0 && document.getText(new vscode.Range(range.end.translate(0, -1), range.end)) === '}') {
return new vscode.FoldingRange(range.start.line, Math.max(range.end.line - 1, range.start.line));
}
return new vscode.FoldingRange(range.start.line, range.end.line);
}));
});
}
}

View File

@@ -159,7 +159,7 @@ export default class LanguageProvider {
let enable = workspace.getConfiguration().get(foldingSetting, false);
if (enable && this.client.apiVersion.has280Features()) {
if (!this.foldingProviderRegistration) {
this.foldingProviderRegistration = languages.registerFoldingProvider(this.documentSelector, new (await import('./features/foldingProvider')).default(this.client));
this.foldingProviderRegistration = languages.registerFoldingRangeProvider(this.documentSelector, new (await import('./features/foldingProvider')).default(this.client));
}
} else {
if (this.foldingProviderRegistration) {