Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/services/languageStatus/common/languageStatusService.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 { CancellationToken } from '../../../../base/common/cancellation.js';
7
import { Event } from '../../../../base/common/event.js';
8
import { IDisposable } from '../../../../base/common/lifecycle.js';
9
import Severity from '../../../../base/common/severity.js';
10
import { compare } from '../../../../base/common/strings.js';
11
import { ITextModel } from '../../../../editor/common/model.js';
12
import { Command } from '../../../../editor/common/languages.js';
13
import { LanguageFeatureRegistry } from '../../../../editor/common/languageFeatureRegistry.js';
14
import { LanguageSelector } from '../../../../editor/common/languageSelector.js';
15
import { IAccessibilityInformation } from '../../../../platform/accessibility/common/accessibility.js';
16
import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';
17
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
18
19
export interface ILanguageStatus {
20
readonly id: string;
21
readonly name: string;
22
readonly selector: LanguageSelector;
23
readonly severity: Severity;
24
readonly label: string | { value: string; shortValue: string };
25
readonly detail: string;
26
readonly busy: boolean;
27
readonly source: string;
28
readonly command: Command | undefined;
29
readonly accessibilityInfo: IAccessibilityInformation | undefined;
30
}
31
32
export interface ILanguageStatusProvider {
33
provideLanguageStatus(langId: string, token: CancellationToken): Promise<ILanguageStatus | undefined>;
34
}
35
36
export const ILanguageStatusService = createDecorator<ILanguageStatusService>('ILanguageStatusService');
37
38
export interface ILanguageStatusService {
39
40
_serviceBrand: undefined;
41
42
onDidChange: Event<void>;
43
44
addStatus(status: ILanguageStatus): IDisposable;
45
46
getLanguageStatus(model: ITextModel): ILanguageStatus[];
47
}
48
49
50
class LanguageStatusServiceImpl implements ILanguageStatusService {
51
52
declare _serviceBrand: undefined;
53
54
private readonly _provider = new LanguageFeatureRegistry<ILanguageStatus>();
55
56
readonly onDidChange: Event<any> = this._provider.onDidChange;
57
58
addStatus(status: ILanguageStatus): IDisposable {
59
return this._provider.register(status.selector, status);
60
}
61
62
getLanguageStatus(model: ITextModel): ILanguageStatus[] {
63
return this._provider.ordered(model).sort((a, b) => {
64
let res = b.severity - a.severity;
65
if (res === 0) {
66
res = compare(a.source, b.source);
67
}
68
if (res === 0) {
69
res = compare(a.id, b.id);
70
}
71
return res;
72
});
73
}
74
}
75
76
registerSingleton(ILanguageStatusService, LanguageStatusServiceImpl, InstantiationType.Delayed);
77
78