From 45e859bfdc720da4668a2e9742039860efccfa84 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 18 Apr 2018 17:48:13 +0200 Subject: [PATCH] monaco folding api (for #47808) --- src/vs/editor/common/modes.ts | 18 +----- .../contrib/folding/syntaxRangeProvider.ts | 4 +- .../standalone/browser/standaloneLanguages.ts | 13 +++-- src/vs/monaco.d.ts | 58 ++++++++++++++++++- src/vs/workbench/api/node/extHost.protocol.ts | 2 +- .../api/node/extHostLanguageFeatures.ts | 4 +- .../api/node/extHostTypeConverters.ts | 2 +- 7 files changed, 72 insertions(+), 29 deletions(-) diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 76d62264ebc..e9caa888ae2 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -830,30 +830,19 @@ export interface DocumentColorProvider { */ provideColorPresentations(model: model.ITextModel, colorInfo: IColorInformation, token: CancellationToken): IColorPresentation[] | Thenable; } - -/** - * @internal - */ export interface FoldingContext { } - /** * A provider of colors for editor models. */ -/** - * @internal - */ export interface FoldingRangeProvider { /** * Provides the color ranges for a specific model. */ - provideFoldingRanges(model: model.ITextModel, context: FoldingContext, token: CancellationToken): IFoldingRange[] | Thenable; + provideFoldingRanges(model: model.ITextModel, context: FoldingContext, token: CancellationToken): FoldingRange[] | Thenable; } -/** - * @internal - */ -export interface IFoldingRange { +export interface FoldingRange { /** * The zero-based start line of the range to fold. The folded area starts after the line's last character. @@ -873,9 +862,6 @@ export interface IFoldingRange { */ kind?: FoldingRangeKind; } -/** - * @internal - */ export class FoldingRangeKind { /** * Kind for folding range representing a comment. The value of the kind is 'comment'. diff --git a/src/vs/editor/contrib/folding/syntaxRangeProvider.ts b/src/vs/editor/contrib/folding/syntaxRangeProvider.ts index 7131c02d583..eec4d8406c9 100644 --- a/src/vs/editor/contrib/folding/syntaxRangeProvider.ts +++ b/src/vs/editor/contrib/folding/syntaxRangeProvider.ts @@ -5,7 +5,7 @@ 'use strict'; -import { FoldingRangeProvider, IFoldingRange, FoldingContext } from 'vs/editor/common/modes'; +import { FoldingRangeProvider, FoldingRange, FoldingContext } from 'vs/editor/common/modes'; import { onUnexpectedExternalError } from 'vs/base/common/errors'; import { toThenable } from 'vs/base/common/async'; import { ITextModel } from 'vs/editor/common/model'; @@ -16,7 +16,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; const MAX_FOLDING_REGIONS_FOR_INDENT_LIMIT = 5000; -export interface IFoldingRangeData extends IFoldingRange { +export interface IFoldingRangeData extends FoldingRange { rank: number; } diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index c0eec9275ac..eaa070aeda8 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -391,12 +391,11 @@ export function registerColorProvider(languageId: string, provider: modes.Docume } /** - * Register a folding provider + * Register a folding range provider */ -/*export function registerFoldingProvider(languageId: string, provider: modes.FoldingProvider): IDisposable { - return modes.FoldingProviderRegistry.register(languageId, provider); -}*/ - +export function registerFoldingRangeProvider(languageId: string, provider: modes.FoldingRangeProvider): IDisposable { + return modes.FoldingRangeProviderRegistry.register(languageId, provider); +} /** * Contains additional diagnostic information about the context in which @@ -787,12 +786,14 @@ export function createMonacoLanguagesAPI(): typeof monaco.languages { registerOnTypeFormattingEditProvider: registerOnTypeFormattingEditProvider, registerLinkProvider: registerLinkProvider, registerColorProvider: registerColorProvider, + registerFoldingRangeProvider: registerFoldingRangeProvider, // enums DocumentHighlightKind: modes.DocumentHighlightKind, CompletionItemKind: CompletionItemKind, SymbolKind: modes.SymbolKind, IndentAction: IndentAction, - SuggestTriggerKind: modes.SuggestTriggerKind + SuggestTriggerKind: modes.SuggestTriggerKind, + FoldingRangeKind: modes.FoldingRangeKind }; } diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 28b6ac3ffaf..268571ebc7d 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4105,8 +4105,10 @@ declare namespace monaco.languages { export function registerColorProvider(languageId: string, provider: DocumentColorProvider): IDisposable; /** - * Register a folding provider + * Register a folding range provider */ + export function registerFoldingRangeProvider(languageId: string, provider: FoldingRangeProvider): IDisposable; + /** * Contains additional diagnostic information about the context in which * a [code action](#CodeActionProvider.provideCodeActions) is run. @@ -5000,6 +5002,60 @@ declare namespace monaco.languages { provideColorPresentations(model: editor.ITextModel, colorInfo: IColorInformation, token: CancellationToken): IColorPresentation[] | Thenable; } + export interface FoldingContext { + } + + /** + * A provider of colors for editor models. + */ + export interface FoldingRangeProvider { + /** + * Provides the color ranges for a specific model. + */ + provideFoldingRanges(model: editor.ITextModel, context: FoldingContext, token: CancellationToken): FoldingRange[] | Thenable; + } + + export interface FoldingRange { + /** + * The zero-based start line of the range to fold. The folded area starts after the line's last character. + */ + start: number; + /** + * The zero-based end line of the range to fold. The folded area ends with the line's last character. + */ + end: number; + /** + * Describes the [Kind](#FoldingRangeKind) of the folding range such as [Comment](#FoldingRangeKind.Comment) or + * [Region](#FoldingRangeKind.Region). The kind is used to categorize folding ranges and used by commands + * like 'Fold all comments'. See + * [FoldingRangeKind](#FoldingRangeKind) for an enumeration of standardized kinds. + */ + kind?: FoldingRangeKind; + } + + export class FoldingRangeKind { + value: string; + /** + * Kind for folding range representing a comment. The value of the kind is 'comment'. + */ + static readonly Comment: FoldingRangeKind; + /** + * Kind for folding range representing a import. The value of the kind is 'imports'. + */ + static readonly Imports: FoldingRangeKind; + /** + * Kind for folding range representing regions (for example marked by `#region`, `#endregion`). + * The value of the kind is 'region'. + */ + static readonly Region: FoldingRangeKind; + /** + * Creates a new [FoldingRangeKind](#FoldingRangeKind). + * + * @param value of the kind. + */ + constructor(value: string); + } + export interface ResourceFileEdit { oldUri: Uri; newUri: Uri; diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index c21323c8c04..38d81ee9141 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -723,7 +723,7 @@ export interface ExtHostLanguageFeaturesShape { $resolveDocumentLink(handle: number, link: modes.ILink): TPromise; $provideDocumentColors(handle: number, resource: UriComponents): TPromise; $provideColorPresentations(handle: number, resource: UriComponents, colorInfo: IRawColorInfo): TPromise; - $provideFoldingRanges(handle: number, resource: UriComponents, context: modes.FoldingContext): TPromise; + $provideFoldingRanges(handle: number, resource: UriComponents, context: modes.FoldingContext): TPromise; } export interface ExtHostQuickOpenShape { diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 3d5e2fe57ad..2d14359a8b1 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -820,7 +820,7 @@ class FoldingProviderAdapter { private _provider: vscode.FoldingRangeProvider ) { } - provideFoldingRanges(resource: URI, context: modes.FoldingContext): TPromise { + provideFoldingRanges(resource: URI, context: modes.FoldingContext): TPromise { const doc = this._documents.getDocumentData(resource).document; return asWinJsPromise(token => this._provider.provideFoldingRanges(doc, context, token)).then(ranges => { if (!Array.isArray(ranges)) { @@ -1184,7 +1184,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { return this._createDisposable(handle); } - $provideFoldingRanges(handle: number, resource: UriComponents, context: vscode.FoldingContext): TPromise { + $provideFoldingRanges(handle: number, resource: UriComponents, context: vscode.FoldingContext): TPromise { return this._withAdapter(handle, FoldingProviderAdapter, adapter => adapter.provideFoldingRanges(URI.revive(resource), context)); } diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts index b77f77279db..5c98f71fd82 100644 --- a/src/vs/workbench/api/node/extHostTypeConverters.ts +++ b/src/vs/workbench/api/node/extHostTypeConverters.ts @@ -624,7 +624,7 @@ export namespace ProgressLocation { } export namespace FoldingRange { - export function from(r: vscode.FoldingRange): modes.IFoldingRange { + export function from(r: vscode.FoldingRange): modes.FoldingRange { return { start: r.start + 1, end: r.end + 1, kind: r.kind }; } } -- GitLab