Path: blob/main/src/vs/workbench/services/languageStatus/common/languageStatusService.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 { CancellationToken } from '../../../../base/common/cancellation.js';6import { Event } from '../../../../base/common/event.js';7import { IDisposable } from '../../../../base/common/lifecycle.js';8import Severity from '../../../../base/common/severity.js';9import { compare } from '../../../../base/common/strings.js';10import { ITextModel } from '../../../../editor/common/model.js';11import { Command } from '../../../../editor/common/languages.js';12import { LanguageFeatureRegistry } from '../../../../editor/common/languageFeatureRegistry.js';13import { LanguageSelector } from '../../../../editor/common/languageSelector.js';14import { IAccessibilityInformation } from '../../../../platform/accessibility/common/accessibility.js';15import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';16import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';1718export interface ILanguageStatus {19readonly id: string;20readonly name: string;21readonly selector: LanguageSelector;22readonly severity: Severity;23readonly label: string | { value: string; shortValue: string };24readonly detail: string;25readonly busy: boolean;26readonly source: string;27readonly command: Command | undefined;28readonly accessibilityInfo: IAccessibilityInformation | undefined;29}3031export interface ILanguageStatusProvider {32provideLanguageStatus(langId: string, token: CancellationToken): Promise<ILanguageStatus | undefined>;33}3435export const ILanguageStatusService = createDecorator<ILanguageStatusService>('ILanguageStatusService');3637export interface ILanguageStatusService {3839_serviceBrand: undefined;4041onDidChange: Event<void>;4243addStatus(status: ILanguageStatus): IDisposable;4445getLanguageStatus(model: ITextModel): ILanguageStatus[];46}474849class LanguageStatusServiceImpl implements ILanguageStatusService {5051declare _serviceBrand: undefined;5253private readonly _provider = new LanguageFeatureRegistry<ILanguageStatus>();5455readonly onDidChange: Event<any> = this._provider.onDidChange;5657addStatus(status: ILanguageStatus): IDisposable {58return this._provider.register(status.selector, status);59}6061getLanguageStatus(model: ITextModel): ILanguageStatus[] {62return this._provider.ordered(model).sort((a, b) => {63let res = b.severity - a.severity;64if (res === 0) {65res = compare(a.source, b.source);66}67if (res === 0) {68res = compare(a.id, b.id);69}70return res;71});72}73}7475registerSingleton(ILanguageStatusService, LanguageStatusServiceImpl, InstantiationType.Delayed);767778