Path: blob/main/extensions/copilot/src/extension/completions/vscode-node/completionsUnificationContribution.ts
13399 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 { languages } from 'vscode';6import { ITelemetryService } from '../../../platform/telemetry/common/telemetry';7import { Event } from '../../../util/vs/base/common/event';8import { Disposable } from '../../../util/vs/base/common/lifecycle';9import { autorun, DebugOwner, observableFromEvent } from '../../../util/vs/base/common/observableInternal';1011export class CompletionsUnificationContribution extends Disposable {1213constructor(14@ITelemetryService telemetryService: ITelemetryService,15) {16super();1718const unificationState = unificationStateObservable(this);1920this._register(autorun(reader => {21const state = unificationState.read(reader);22telemetryService.setAdditionalExpAssignments(state?.expAssignments ?? []);23}));24}25}2627export function unificationStateObservable(owner: DebugOwner) {28return observableFromEvent(29owner,30l => (languages as languagesMaybeWithUnification).onDidChangeCompletionsUnificationState?.(l) ?? Disposable.None,31() => (languages as languagesMaybeWithUnification).inlineCompletionsUnificationState32);33}3435interface languagesMaybeWithUnification {36readonly inlineCompletionsUnificationState?: InlineCompletionsUnificationState;37readonly onDidChangeCompletionsUnificationState?: Event<void>;38}3940interface InlineCompletionsUnificationState {41codeUnification: boolean;42modelUnification: boolean;43extensionUnification: boolean;44expAssignments: string[];45}464748