Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/services/outline/browser/outline.ts
5281 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { IListVirtualDelegate } from '../../../../base/browser/ui/list/list.js';
7
import { IDataSource, ITreeRenderer } from '../../../../base/browser/ui/tree/tree.js';
8
import { CancellationToken } from '../../../../base/common/cancellation.js';
9
import { Event } from '../../../../base/common/event.js';
10
import { FuzzyScore } from '../../../../base/common/filters.js';
11
import { IDisposable } from '../../../../base/common/lifecycle.js';
12
import { URI } from '../../../../base/common/uri.js';
13
import { IEditorOptions } from '../../../../platform/editor/common/editor.js';
14
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
15
import { IWorkbenchDataTreeOptions } from '../../../../platform/list/browser/listService.js';
16
import { IEditorPane } from '../../../common/editor.js';
17
18
export const IOutlineService = createDecorator<IOutlineService>('IOutlineService');
19
20
export const enum OutlineTarget {
21
OutlinePane = 1,
22
Breadcrumbs = 2,
23
QuickPick = 4
24
}
25
26
export interface IOutlineService {
27
_serviceBrand: undefined;
28
readonly onDidChange: Event<void>;
29
canCreateOutline(editor: IEditorPane): boolean;
30
createOutline(editor: IEditorPane, target: OutlineTarget, token: CancellationToken): Promise<IOutline<any> | undefined>;
31
registerOutlineCreator(creator: IOutlineCreator<any, any>): IDisposable;
32
}
33
34
export interface IOutlineCreator<P extends IEditorPane, E> {
35
matches(candidate: IEditorPane): candidate is P;
36
createOutline(editor: P, target: OutlineTarget, token: CancellationToken): Promise<IOutline<E> | undefined>;
37
}
38
39
export interface IBreadcrumbsOutlineElement<E> {
40
readonly element: E;
41
readonly label: string;
42
}
43
44
export interface IBreadcrumbsDataSource<E> {
45
getBreadcrumbElements(): readonly IBreadcrumbsOutlineElement<E>[];
46
}
47
48
export interface IOutlineComparator<E> {
49
compareByPosition(a: E, b: E): number;
50
compareByType(a: E, b: E): number;
51
compareByName(a: E, b: E): number;
52
}
53
54
export interface IQuickPickOutlineElement<E> {
55
readonly element: E;
56
readonly label: string;
57
readonly iconClasses?: string[];
58
readonly ariaLabel?: string;
59
readonly description?: string;
60
}
61
62
export interface IQuickPickDataSource<E> {
63
getQuickPickElements(): IQuickPickOutlineElement<E>[];
64
}
65
66
export interface IOutlineListConfig<E> {
67
readonly breadcrumbsDataSource: IBreadcrumbsDataSource<E>;
68
readonly treeDataSource: IDataSource<IOutline<E>, E>;
69
readonly delegate: IListVirtualDelegate<E>;
70
readonly renderers: ITreeRenderer<E, FuzzyScore, any>[];
71
readonly comparator: IOutlineComparator<E>;
72
readonly options: IWorkbenchDataTreeOptions<E, FuzzyScore>;
73
readonly quickPickDataSource: IQuickPickDataSource<E>;
74
}
75
76
export interface OutlineChangeEvent {
77
affectOnlyActiveElement?: true;
78
}
79
80
export interface IOutline<E> {
81
82
readonly uri: URI | undefined;
83
84
readonly config: IOutlineListConfig<E>;
85
readonly outlineKind: string;
86
87
readonly isEmpty: boolean;
88
readonly activeElement: E | undefined;
89
readonly onDidChange: Event<OutlineChangeEvent>;
90
91
reveal(entry: E, options: IEditorOptions, sideBySide: boolean, select: boolean): Promise<void> | void;
92
preview(entry: E): IDisposable;
93
captureViewState(): IDisposable;
94
dispose(): void;
95
}
96
97
98
export const enum OutlineConfigKeys {
99
'icons' = 'outline.icons',
100
'collapseItems' = 'outline.collapseItems',
101
'problemsEnabled' = 'outline.problems.enabled',
102
'problemsColors' = 'outline.problems.colors',
103
'problemsBadges' = 'outline.problems.badges'
104
}
105
106
export const enum OutlineConfigCollapseItemsValues {
107
Collapsed = 'alwaysCollapse',
108
Expanded = 'alwaysExpand'
109
}
110
111