Path: blob/main/src/vs/workbench/services/outline/browser/outline.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IListVirtualDelegate } from '../../../../base/browser/ui/list/list.js';6import { IDataSource, ITreeRenderer } from '../../../../base/browser/ui/tree/tree.js';7import { CancellationToken } from '../../../../base/common/cancellation.js';8import { Event } from '../../../../base/common/event.js';9import { FuzzyScore } from '../../../../base/common/filters.js';10import { IDisposable } from '../../../../base/common/lifecycle.js';11import { URI } from '../../../../base/common/uri.js';12import { IEditorOptions } from '../../../../platform/editor/common/editor.js';13import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';14import { IWorkbenchDataTreeOptions } from '../../../../platform/list/browser/listService.js';15import { IEditorPane } from '../../../common/editor.js';1617export const IOutlineService = createDecorator<IOutlineService>('IOutlineService');1819export const enum OutlineTarget {20OutlinePane = 1,21Breadcrumbs = 2,22QuickPick = 423}2425export interface IOutlineService {26_serviceBrand: undefined;27onDidChange: Event<void>;28canCreateOutline(editor: IEditorPane): boolean;29createOutline(editor: IEditorPane, target: OutlineTarget, token: CancellationToken): Promise<IOutline<any> | undefined>;30registerOutlineCreator(creator: IOutlineCreator<any, any>): IDisposable;31}3233export interface IOutlineCreator<P extends IEditorPane, E> {34matches(candidate: IEditorPane): candidate is P;35createOutline(editor: P, target: OutlineTarget, token: CancellationToken): Promise<IOutline<E> | undefined>;36}3738export interface IBreadcrumbsDataSource<E> {39getBreadcrumbElements(): readonly E[];40}4142export interface IOutlineComparator<E> {43compareByPosition(a: E, b: E): number;44compareByType(a: E, b: E): number;45compareByName(a: E, b: E): number;46}4748export interface IQuickPickOutlineElement<E> {49readonly element: E;50readonly label: string;51readonly iconClasses?: string[];52readonly ariaLabel?: string;53readonly description?: string;54}5556export interface IQuickPickDataSource<E> {57getQuickPickElements(): IQuickPickOutlineElement<E>[];58}5960export interface IOutlineListConfig<E> {61readonly breadcrumbsDataSource: IBreadcrumbsDataSource<E>;62readonly treeDataSource: IDataSource<IOutline<E>, E>;63readonly delegate: IListVirtualDelegate<E>;64readonly renderers: ITreeRenderer<E, FuzzyScore, any>[];65readonly comparator: IOutlineComparator<E>;66readonly options: IWorkbenchDataTreeOptions<E, FuzzyScore>;67readonly quickPickDataSource: IQuickPickDataSource<E>;68}6970export interface OutlineChangeEvent {71affectOnlyActiveElement?: true;72}7374export interface IOutline<E> {7576readonly uri: URI | undefined;7778readonly config: IOutlineListConfig<E>;79readonly outlineKind: string;8081readonly isEmpty: boolean;82readonly activeElement: E | undefined;83readonly onDidChange: Event<OutlineChangeEvent>;8485reveal(entry: E, options: IEditorOptions, sideBySide: boolean, select: boolean): Promise<void> | void;86preview(entry: E): IDisposable;87captureViewState(): IDisposable;88dispose(): void;89}909192export const enum OutlineConfigKeys {93'icons' = 'outline.icons',94'collapseItems' = 'outline.collapseItems',95'problemsEnabled' = 'outline.problems.enabled',96'problemsColors' = 'outline.problems.colors',97'problemsBadges' = 'outline.problems.badges'98}99100export const enum OutlineConfigCollapseItemsValues {101Collapsed = 'alwaysCollapse',102Expanded = 'alwaysExpand'103}104105106