Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/editTelemetry/browser/editTelemetryContribution.ts
5252 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 { Disposable } from '../../../../base/common/lifecycle.js';
7
import { autorun, derived } from '../../../../base/common/observable.js';
8
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
9
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
10
import { observableConfigValue } from '../../../../platform/observable/common/platformObservableUtils.js';
11
import { ITelemetryService, TelemetryLevel, telemetryLevelEnabled } from '../../../../platform/telemetry/common/telemetry.js';
12
import { AnnotatedDocuments } from './helpers/annotatedDocuments.js';
13
import { EditTrackingFeature } from './telemetry/editSourceTrackingFeature.js';
14
import { VSCodeWorkspace } from './helpers/vscodeObservableWorkspace.js';
15
import { AiStatsFeature } from './editStats/aiStatsFeature.js';
16
import { AI_STATS_SETTING_ID, EDIT_TELEMETRY_SETTING_ID } from './settingIds.js';
17
import { IChatEntitlementService } from '../../../services/chat/common/chatEntitlementService.js';
18
19
export class EditTelemetryContribution extends Disposable {
20
constructor(
21
@IInstantiationService instantiationService: IInstantiationService,
22
@IConfigurationService configurationService: IConfigurationService,
23
@ITelemetryService telemetryService: ITelemetryService,
24
@IChatEntitlementService chatEntitlementService: IChatEntitlementService
25
) {
26
super();
27
28
const workspace = derived(reader => reader.store.add(instantiationService.createInstance(VSCodeWorkspace)));
29
const annotatedDocuments = derived(reader => reader.store.add(instantiationService.createInstance(AnnotatedDocuments, workspace.read(reader))));
30
31
const editSourceTrackingEnabled = observableConfigValue(EDIT_TELEMETRY_SETTING_ID, true, configurationService);
32
this._register(autorun(r => {
33
const enabled = editSourceTrackingEnabled.read(r);
34
if (!enabled || !telemetryLevelEnabled(telemetryService, TelemetryLevel.USAGE)) {
35
return;
36
}
37
r.store.add(instantiationService.createInstance(EditTrackingFeature, workspace.read(r), annotatedDocuments.read(r)));
38
}));
39
40
const aiStatsEnabled = observableConfigValue(AI_STATS_SETTING_ID, true, configurationService);
41
this._register(autorun(r => {
42
const enabled = aiStatsEnabled.read(r);
43
const aiDisabled = chatEntitlementService.sentimentObs.read(r).hidden;
44
if (!enabled || aiDisabled) {
45
return;
46
}
47
48
r.store.add(instantiationService.createInstance(AiStatsFeature, annotatedDocuments.read(r)));
49
}));
50
}
51
}
52
53