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
3296 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
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 IBreadcrumbsDataSource<E> {
40
getBreadcrumbElements(): readonly E[];
41
}
42
43
export interface IOutlineComparator<E> {
44
compareByPosition(a: E, b: E): number;
45
compareByType(a: E, b: E): number;
46
compareByName(a: E, b: E): number;
47
}
48
49
export interface IQuickPickOutlineElement<E> {
50
readonly element: E;
51
readonly label: string;
52
readonly iconClasses?: string[];
53
readonly ariaLabel?: string;
54
readonly description?: string;
55
}
56
57
export interface IQuickPickDataSource<E> {
58
getQuickPickElements(): IQuickPickOutlineElement<E>[];
59
}
60
61
export interface IOutlineListConfig<E> {
62
readonly breadcrumbsDataSource: IBreadcrumbsDataSource<E>;
63
readonly treeDataSource: IDataSource<IOutline<E>, E>;
64
readonly delegate: IListVirtualDelegate<E>;
65
readonly renderers: ITreeRenderer<E, FuzzyScore, any>[];
66
readonly comparator: IOutlineComparator<E>;
67
readonly options: IWorkbenchDataTreeOptions<E, FuzzyScore>;
68
readonly quickPickDataSource: IQuickPickDataSource<E>;
69
}
70
71
export interface OutlineChangeEvent {
72
affectOnlyActiveElement?: true;
73
}
74
75
export interface IOutline<E> {
76
77
readonly uri: URI | undefined;
78
79
readonly config: IOutlineListConfig<E>;
80
readonly outlineKind: string;
81
82
readonly isEmpty: boolean;
83
readonly activeElement: E | undefined;
84
readonly onDidChange: Event<OutlineChangeEvent>;
85
86
reveal(entry: E, options: IEditorOptions, sideBySide: boolean, select: boolean): Promise<void> | void;
87
preview(entry: E): IDisposable;
88
captureViewState(): IDisposable;
89
dispose(): void;
90
}
91
92
93
export const enum OutlineConfigKeys {
94
'icons' = 'outline.icons',
95
'collapseItems' = 'outline.collapseItems',
96
'problemsEnabled' = 'outline.problems.enabled',
97
'problemsColors' = 'outline.problems.colors',
98
'problemsBadges' = 'outline.problems.badges'
99
}
100
101
export const enum OutlineConfigCollapseItemsValues {
102
Collapsed = 'alwaysCollapse',
103
Expanded = 'alwaysExpand'
104
}
105
106