Path: blob/main/src/vs/workbench/services/outline/browser/outline.ts
5281 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;27readonly onDidChange: 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 IBreadcrumbsOutlineElement<E> {39readonly element: E;40readonly label: string;41}4243export interface IBreadcrumbsDataSource<E> {44getBreadcrumbElements(): readonly IBreadcrumbsOutlineElement<E>[];45}4647export interface IOutlineComparator<E> {48compareByPosition(a: E, b: E): number;49compareByType(a: E, b: E): number;50compareByName(a: E, b: E): number;51}5253export interface IQuickPickOutlineElement<E> {54readonly element: E;55readonly label: string;56readonly iconClasses?: string[];57readonly ariaLabel?: string;58readonly description?: string;59}6061export interface IQuickPickDataSource<E> {62getQuickPickElements(): IQuickPickOutlineElement<E>[];63}6465export interface IOutlineListConfig<E> {66readonly breadcrumbsDataSource: IBreadcrumbsDataSource<E>;67readonly treeDataSource: IDataSource<IOutline<E>, E>;68readonly delegate: IListVirtualDelegate<E>;69readonly renderers: ITreeRenderer<E, FuzzyScore, any>[];70readonly comparator: IOutlineComparator<E>;71readonly options: IWorkbenchDataTreeOptions<E, FuzzyScore>;72readonly quickPickDataSource: IQuickPickDataSource<E>;73}7475export interface OutlineChangeEvent {76affectOnlyActiveElement?: true;77}7879export interface IOutline<E> {8081readonly uri: URI | undefined;8283readonly config: IOutlineListConfig<E>;84readonly outlineKind: string;8586readonly isEmpty: boolean;87readonly activeElement: E | undefined;88readonly onDidChange: Event<OutlineChangeEvent>;8990reveal(entry: E, options: IEditorOptions, sideBySide: boolean, select: boolean): Promise<void> | void;91preview(entry: E): IDisposable;92captureViewState(): IDisposable;93dispose(): void;94}959697export const enum OutlineConfigKeys {98'icons' = 'outline.icons',99'collapseItems' = 'outline.collapseItems',100'problemsEnabled' = 'outline.problems.enabled',101'problemsColors' = 'outline.problems.colors',102'problemsBadges' = 'outline.problems.badges'103}104105export const enum OutlineConfigCollapseItemsValues {106Collapsed = 'alwaysCollapse',107Expanded = 'alwaysExpand'108}109110111