@codingame/monaco-vscode-telemetry-service-override 37.2.0 → 37.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common.d.ts +3 -0
- package/common.js +18 -0
- package/index.d.ts +2 -3
- package/index.js +2 -18
- package/package.json +10 -2
- package/session.d.ts +2 -0
- package/session.js +2 -0
- package/vscode/src/vs/base/common/editArcTracker.js +6 -6
- package/vscode/src/vs/platform/telemetry/common/telemetryLogAppender.js +1 -1
- package/vscode/src/vs/platform/telemetry/common/telemetryService.js +21 -21
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/aiContributionFeature.js +1 -1
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/editStats/aiStatsChart.js +1 -1
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/editStats/aiStatsFeature.js +3 -3
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/editStats/aiStatsStatusBar.js +12 -12
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.js +6 -6
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/helpers/annotatedDocuments.js +6 -6
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/helpers/documentWithAnnotatedEdits.js +5 -5
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/helpers/vscodeObservableWorkspace.js +2 -2
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/agentHostEditMarkerService.js +5 -3
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetryReporter.js +1 -1
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.js +27 -13
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/editSourceTrackingFeature.js +6 -6
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/editSourceTrackingImpl.js +1 -1
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/editTracker.js +5 -5
- package/vscode/src/vs/workbench/contrib/editTelemetry/common/arcTracker.js +2 -2
- package/vscode/src/vs/workbench/contrib/telemetry/browser/telemetry.contribution.js +1 -1
package/common.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type IEditorOverrideServices } from "@codingame/monaco-vscode-api/vscode/vs/editor/standalone/browser/standaloneServices";
|
|
2
|
+
export type { ITelemetryData, TelemetryLevel } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry";
|
|
3
|
+
export default function getServiceOverride(): IEditorOverrideServices;
|
package/common.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
import '@codingame/monaco-vscode-api/vscode/vs/editor/standalone/browser/standaloneServices';
|
|
3
|
+
import { SyncDescriptor } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/descriptors';
|
|
4
|
+
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
5
|
+
import { TelemetryService } from './vscode/src/vs/workbench/services/telemetry/browser/telemetryService.js';
|
|
6
|
+
import { IDataChannelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dataChannel/common/dataChannel.service';
|
|
7
|
+
import { DataChannelService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/dataChannel/browser/dataChannelService';
|
|
8
|
+
import './vscode/src/vs/workbench/contrib/telemetry/browser/telemetry.contribution.js';
|
|
9
|
+
import './vscode/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.js';
|
|
10
|
+
|
|
11
|
+
function getServiceOverride() {
|
|
12
|
+
return {
|
|
13
|
+
[ITelemetryService.toString()]: new SyncDescriptor(TelemetryService, [], true),
|
|
14
|
+
[IDataChannelService.toString()]: new SyncDescriptor(DataChannelService, [], true)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { getServiceOverride as default };
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export default function getServiceOverride(): IEditorOverrideServices;
|
|
1
|
+
export { default } from "./common.js";
|
|
2
|
+
export * from "./common.js";
|
package/index.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
|
-
import { SyncDescriptor } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/descriptors';
|
|
4
|
-
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
5
|
-
import { TelemetryService } from './vscode/src/vs/workbench/services/telemetry/browser/telemetryService.js';
|
|
6
|
-
import { IDataChannelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dataChannel/common/dataChannel.service';
|
|
7
|
-
import { DataChannelService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/dataChannel/browser/dataChannelService';
|
|
8
|
-
import './vscode/src/vs/workbench/contrib/telemetry/browser/telemetry.contribution.js';
|
|
9
|
-
import './vscode/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.js';
|
|
10
|
-
import './vscode/src/vs/workbench/contrib/bracketPairColorizer2Telemetry/browser/bracketPairColorizer2Telemetry.contribution.js';
|
|
2
|
+
export { default } from './common.js';
|
|
11
3
|
import './vscode/src/vs/workbench/services/policies/browser/policyTelemetry.contribution.js';
|
|
12
|
-
|
|
13
|
-
function getServiceOverride() {
|
|
14
|
-
return {
|
|
15
|
-
[ITelemetryService.toString()]: new SyncDescriptor(TelemetryService, [], true),
|
|
16
|
-
[IDataChannelService.toString()]: new SyncDescriptor(DataChannelService, [], true)
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export { getServiceOverride as default };
|
|
4
|
+
import './vscode/src/vs/workbench/contrib/bracketPairColorizer2Telemetry/browser/bracketPairColorizer2Telemetry.contribution.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-telemetry-service-override",
|
|
3
|
-
"version": "37.
|
|
3
|
+
"version": "37.3.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - telemetry service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "37.
|
|
18
|
+
"@codingame/monaco-vscode-api": "37.3.1",
|
|
19
19
|
"@microsoft/1ds-core-js": "3.2.18",
|
|
20
20
|
"@microsoft/1ds-post-js": "3.2.18"
|
|
21
21
|
},
|
|
@@ -33,6 +33,14 @@
|
|
|
33
33
|
"types": "./vscode/src/*.d.ts",
|
|
34
34
|
"default": "./vscode/src/*.js"
|
|
35
35
|
},
|
|
36
|
+
"./session": {
|
|
37
|
+
"types": "./session.d.ts",
|
|
38
|
+
"default": "./session.js"
|
|
39
|
+
},
|
|
40
|
+
"./common": {
|
|
41
|
+
"types": "./common.d.ts",
|
|
42
|
+
"default": "./common.js"
|
|
43
|
+
},
|
|
36
44
|
"./*": {
|
|
37
45
|
"types": "./*.d.ts",
|
|
38
46
|
"default": "./*.js"
|
package/session.d.ts
ADDED
package/session.js
ADDED
|
@@ -16,10 +16,10 @@ class EditArcTracker {
|
|
|
16
16
|
return result;
|
|
17
17
|
}
|
|
18
18
|
handleEdits(edit) {
|
|
19
|
-
const untrackedEdit = normalizeReplacements(
|
|
19
|
+
const untrackedEdit = normalizeReplacements(edit.replacements.map(replacement => ({
|
|
20
20
|
...replacement,
|
|
21
21
|
isTracked: false
|
|
22
|
-
})))
|
|
22
|
+
})));
|
|
23
23
|
this._updatedTrackedEdit = compose(this._updatedTrackedEdit, untrackedEdit);
|
|
24
24
|
}
|
|
25
25
|
getAcceptedRestrainedCharactersCount() {
|
|
@@ -45,7 +45,7 @@ class EditArcTracker {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
function removeCommonText(replacements, originalText, isTracked) {
|
|
48
|
-
return
|
|
48
|
+
return replacements.map(replacement => {
|
|
49
49
|
const oldText = originalText.substring(replacement.start, replacement.endExclusive);
|
|
50
50
|
const prefixLength = commonPrefixLength(oldText, replacement.text);
|
|
51
51
|
const suffixLength = Math.min(
|
|
@@ -59,7 +59,7 @@ function removeCommonText(replacements, originalText, isTracked) {
|
|
|
59
59
|
text: replacement.text.substring(prefixLength, replacement.text.length - suffixLength),
|
|
60
60
|
isTracked
|
|
61
61
|
};
|
|
62
|
-
})
|
|
62
|
+
});
|
|
63
63
|
}
|
|
64
64
|
function normalizeReplacements(replacements) {
|
|
65
65
|
const result = [];
|
|
@@ -189,13 +189,13 @@ function getLineCountInfo(replacements, initialText) {
|
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
191
|
const lineOffsets = ( new LineOffsets(initialText));
|
|
192
|
-
const textReplacements =
|
|
192
|
+
const textReplacements = replacements.map(replacement => ({
|
|
193
193
|
start: lineOffsets.getPosition(replacement.start),
|
|
194
194
|
end: lineOffsets.getPosition(replacement.endExclusive),
|
|
195
195
|
startOffset: replacement.start,
|
|
196
196
|
endOffset: replacement.endExclusive,
|
|
197
197
|
text: replacement.text
|
|
198
|
-
}))
|
|
198
|
+
}));
|
|
199
199
|
let deletedLineCounts = 0;
|
|
200
200
|
let insertedLineCounts = 0;
|
|
201
201
|
let current = [];
|
|
@@ -20,7 +20,7 @@ let TelemetryLogAppender = class TelemetryLogAppender extends Disposable {
|
|
|
20
20
|
const justLoggingAndNotSending = isLoggingOnly(productService, environmentService);
|
|
21
21
|
const logSuffix = justLoggingAndNotSending ? " (Not Sent)" : "";
|
|
22
22
|
this.logger = this._register(loggerService.createLogger(id, {
|
|
23
|
-
name: ( localize(
|
|
23
|
+
name: ( localize(2487, "Telemetry{0}", logSuffix)),
|
|
24
24
|
group: TelemetryLogGroup,
|
|
25
25
|
hidden: true
|
|
26
26
|
}));
|
|
@@ -180,28 +180,28 @@ let TelemetryService = class TelemetryService {
|
|
|
180
180
|
TelemetryService = TelemetryService_1 = ( __decorate([( __param(1, IConfigurationService)), ( __param(2, IProductService))], TelemetryService));
|
|
181
181
|
function getTelemetryLevelSettingDescription() {
|
|
182
182
|
const telemetryText = ( localize(
|
|
183
|
-
|
|
183
|
+
2488,
|
|
184
184
|
"Controls {0} telemetry, first-party extension telemetry, and participating third-party extension telemetry. Some third party extensions might not respect this setting. Consult the specific extension's documentation to be sure. Telemetry helps us better understand how {0} is performing, where improvements need to be made, and how features are being used.",
|
|
185
185
|
product.nameLong
|
|
186
186
|
));
|
|
187
187
|
const externalLinksStatement = !product.privacyStatementUrl ? ( localize(
|
|
188
|
-
|
|
188
|
+
2489,
|
|
189
189
|
"Read more about the [data we collect]({0}).",
|
|
190
190
|
"https://aka.ms/vscode-telemetry"
|
|
191
191
|
)) : ( localize(
|
|
192
|
-
|
|
192
|
+
2490,
|
|
193
193
|
"Read more about the [data we collect]({0}) and our [privacy statement]({1}).",
|
|
194
194
|
"https://aka.ms/vscode-telemetry",
|
|
195
195
|
product.privacyStatementUrl
|
|
196
196
|
));
|
|
197
197
|
const restartString = !isWeb ? ( localize(
|
|
198
|
-
|
|
198
|
+
2491,
|
|
199
199
|
"A full restart of the application is necessary for crash reporting changes to take effect."
|
|
200
200
|
)) : "";
|
|
201
|
-
const crashReportsHeader = ( localize(
|
|
202
|
-
const errorsHeader = ( localize(
|
|
203
|
-
const usageHeader = ( localize(
|
|
204
|
-
const telemetryTableDescription = ( localize(
|
|
201
|
+
const crashReportsHeader = ( localize(2492, "Crash Reports"));
|
|
202
|
+
const errorsHeader = ( localize(2493, "Error Telemetry"));
|
|
203
|
+
const usageHeader = ( localize(2494, "Usage Data"));
|
|
204
|
+
const telemetryTableDescription = ( localize(2495, "The following table outlines the data sent with each setting:"));
|
|
205
205
|
const telemetryTable = `
|
|
206
206
|
| | ${crashReportsHeader} | ${errorsHeader} | ${usageHeader} |
|
|
207
207
|
|:------|:-------------:|:---------------:|:----------:|
|
|
@@ -211,7 +211,7 @@ function getTelemetryLevelSettingDescription() {
|
|
|
211
211
|
| off | - | - | - |
|
|
212
212
|
`;
|
|
213
213
|
const deprecatedSettingNote = ( localize(
|
|
214
|
-
|
|
214
|
+
2496,
|
|
215
215
|
"****Note:*** If this setting is 'off', no telemetry will be sent regardless of other telemetry settings. If this setting is set to anything except 'off' and telemetry is disabled with deprecated settings, no telemetry will be sent.*"
|
|
216
216
|
));
|
|
217
217
|
const telemetryDescription = `
|
|
@@ -233,7 +233,7 @@ configurationRegistry.registerConfiguration({
|
|
|
233
233
|
"id": TELEMETRY_SECTION_ID,
|
|
234
234
|
"order": 1,
|
|
235
235
|
"type": "object",
|
|
236
|
-
"title": ( localize(
|
|
236
|
+
"title": ( localize(2497, "Telemetry")),
|
|
237
237
|
"properties": {
|
|
238
238
|
[TELEMETRY_SETTING_ID]: {
|
|
239
239
|
"type": "string",
|
|
@@ -243,7 +243,7 @@ configurationRegistry.registerConfiguration({
|
|
|
243
243
|
TelemetryConfiguration.CRASH,
|
|
244
244
|
TelemetryConfiguration.OFF
|
|
245
245
|
],
|
|
246
|
-
"enumDescriptions": [( localize(
|
|
246
|
+
"enumDescriptions": [( localize(2498, "Sends usage data, errors, and crash reports.")), ( localize(2499, "Sends general error telemetry and crash reports.")), ( localize(2500, "Sends OS level crash reports.")), ( localize(2501, "Disables all product telemetry."))],
|
|
247
247
|
"markdownDescription": getTelemetryLevelSettingDescription(),
|
|
248
248
|
"default": TelemetryConfiguration.ON,
|
|
249
249
|
"restricted": true,
|
|
@@ -256,20 +256,20 @@ configurationRegistry.registerConfiguration({
|
|
|
256
256
|
localization: {
|
|
257
257
|
description: {
|
|
258
258
|
key: "telemetry.telemetryLevel.policyDescription",
|
|
259
|
-
value: ( localize(
|
|
259
|
+
value: ( localize(2502, "Controls the level of telemetry."))
|
|
260
260
|
},
|
|
261
261
|
enumDescriptions: [{
|
|
262
262
|
key: "telemetry.telemetryLevel.default",
|
|
263
|
-
value: ( localize(
|
|
263
|
+
value: ( localize(2498, "Sends usage data, errors, and crash reports."))
|
|
264
264
|
}, {
|
|
265
265
|
key: "telemetry.telemetryLevel.error",
|
|
266
|
-
value: ( localize(
|
|
266
|
+
value: ( localize(2499, "Sends general error telemetry and crash reports."))
|
|
267
267
|
}, {
|
|
268
268
|
key: "telemetry.telemetryLevel.crash",
|
|
269
|
-
value: ( localize(
|
|
269
|
+
value: ( localize(2500, "Sends OS level crash reports."))
|
|
270
270
|
}, {
|
|
271
271
|
key: "telemetry.telemetryLevel.off",
|
|
272
|
-
value: ( localize(
|
|
272
|
+
value: ( localize(2501, "Disables all product telemetry."))
|
|
273
273
|
}]
|
|
274
274
|
}
|
|
275
275
|
}
|
|
@@ -278,7 +278,7 @@ configurationRegistry.registerConfiguration({
|
|
|
278
278
|
type: "boolean",
|
|
279
279
|
default: true,
|
|
280
280
|
description: ( localize(
|
|
281
|
-
|
|
281
|
+
2503,
|
|
282
282
|
"Enable feedback mechanisms such as the issue reporter, surveys, and other feedback options."
|
|
283
283
|
)),
|
|
284
284
|
policy: {
|
|
@@ -289,7 +289,7 @@ configurationRegistry.registerConfiguration({
|
|
|
289
289
|
description: {
|
|
290
290
|
key: "telemetry.feedback.enabled",
|
|
291
291
|
value: ( localize(
|
|
292
|
-
|
|
292
|
+
2503,
|
|
293
293
|
"Enable feedback mechanisms such as the issue reporter, surveys, and other feedback options."
|
|
294
294
|
))
|
|
295
295
|
}
|
|
@@ -299,11 +299,11 @@ configurationRegistry.registerConfiguration({
|
|
|
299
299
|
[TELEMETRY_OLD_SETTING_ID]: {
|
|
300
300
|
"type": "boolean",
|
|
301
301
|
"markdownDescription": !product.privacyStatementUrl ? ( localize(
|
|
302
|
-
|
|
302
|
+
2504,
|
|
303
303
|
"Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made.",
|
|
304
304
|
product.nameLong
|
|
305
305
|
)) : ( localize(
|
|
306
|
-
|
|
306
|
+
2505,
|
|
307
307
|
"Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made. [Read more]({1}) about what we collect and our privacy statement.",
|
|
308
308
|
product.nameLong,
|
|
309
309
|
product.privacyStatementUrl
|
|
@@ -311,7 +311,7 @@ configurationRegistry.registerConfiguration({
|
|
|
311
311
|
"default": true,
|
|
312
312
|
"restricted": true,
|
|
313
313
|
"markdownDeprecationMessage": ( localize(
|
|
314
|
-
|
|
314
|
+
2506,
|
|
315
315
|
"If this setting is false, no telemetry will be sent regardless of the new setting's value. Deprecated in favor of the {0} setting.",
|
|
316
316
|
`\`#${TELEMETRY_SETTING_ID}#\``
|
|
317
317
|
)),
|
|
@@ -77,7 +77,7 @@ class AiContributionFeature extends Disposable {
|
|
|
77
77
|
return false;
|
|
78
78
|
}
|
|
79
79
|
_clearAiContributions(resources) {
|
|
80
|
-
const uris = resources ?
|
|
80
|
+
const uris = resources ? resources.map(r => URI.revive(r)) : [...( this._trackers.keys())];
|
|
81
81
|
for (const uri of uris) {
|
|
82
82
|
const entry = this._trackers.get(uri);
|
|
83
83
|
if (entry) {
|
|
@@ -82,7 +82,7 @@ function createAiStatsChart(options) {
|
|
|
82
82
|
text.setAttribute("text-anchor", "middle");
|
|
83
83
|
text.setAttribute("fill", asCssVariable(chartsForeground));
|
|
84
84
|
text.setAttribute("font-size", "11px");
|
|
85
|
-
text.textContent = ( localize(
|
|
85
|
+
text.textContent = ( localize(14275, "No data yet"));
|
|
86
86
|
g.appendChild(text);
|
|
87
87
|
return container;
|
|
88
88
|
}
|
|
@@ -23,7 +23,7 @@ let AiStatsFeature = class AiStatsFeature extends Disposable {
|
|
|
23
23
|
this._storageService = _storageService;
|
|
24
24
|
this._instantiationService = _instantiationService;
|
|
25
25
|
this._dataVersion = observableValue(this, 0);
|
|
26
|
-
this.aiRate =
|
|
26
|
+
this.aiRate = this._dataVersion.map(() => {
|
|
27
27
|
const val = this._data.getValue();
|
|
28
28
|
if (!val) {
|
|
29
29
|
return 0;
|
|
@@ -36,7 +36,7 @@ let AiStatsFeature = class AiStatsFeature extends Disposable {
|
|
|
36
36
|
return session.aiCharacters / sum;
|
|
37
37
|
});
|
|
38
38
|
return r;
|
|
39
|
-
})
|
|
39
|
+
});
|
|
40
40
|
this.sessionCount = derived(this, r => {
|
|
41
41
|
this._dataVersion.read(r);
|
|
42
42
|
const val = this._data.getValue();
|
|
@@ -80,7 +80,7 @@ let AiStatsFeature = class AiStatsFeature extends Disposable {
|
|
|
80
80
|
const lastRequestIds = [];
|
|
81
81
|
const obs = mapObservableArrayCached(this, annotatedDocuments.documents, (doc, store) => {
|
|
82
82
|
store.add(runOnChange(doc.documentWithAnnotations.value, (_val, _prev, edit) => {
|
|
83
|
-
const e = AnnotatedStringEdit.compose(
|
|
83
|
+
const e = AnnotatedStringEdit.compose(edit.map(e => e.edit));
|
|
84
84
|
const curSession = ( new Lazy(() => this._getDataAndSession()));
|
|
85
85
|
for (const r of e.replacements) {
|
|
86
86
|
if (isAiEdit(r.data.editSource)) {
|
|
@@ -21,7 +21,7 @@ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/obse
|
|
|
21
21
|
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
22
22
|
import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
|
|
23
23
|
|
|
24
|
-
registerCss(media);
|
|
24
|
+
registerCss(media, 1);
|
|
25
25
|
let AiStatsStatusBar = class AiStatsStatusBar extends Disposable {
|
|
26
26
|
static {
|
|
27
27
|
this.hot = createHotClass(this);
|
|
@@ -36,8 +36,8 @@ let AiStatsStatusBar = class AiStatsStatusBar extends Disposable {
|
|
|
36
36
|
const statusBarItem = this._createStatusBar().keepUpdated(reader.store);
|
|
37
37
|
const store = this._register(( new DisposableStore()));
|
|
38
38
|
reader.store.add(this._statusbarService.addEntry({
|
|
39
|
-
name: ( localize(
|
|
40
|
-
ariaLabel: ( localize(
|
|
39
|
+
name: ( localize(14276, "Inline Suggestions")),
|
|
40
|
+
ariaLabel: ( localize(14277, "Inline suggestions status bar")),
|
|
41
41
|
text: "",
|
|
42
42
|
tooltip: {
|
|
43
43
|
element: async _token => {
|
|
@@ -93,7 +93,7 @@ let AiStatsStatusBar = class AiStatsStatusBar extends Disposable {
|
|
|
93
93
|
}
|
|
94
94
|
}, [n.div({
|
|
95
95
|
style: {
|
|
96
|
-
width:
|
|
96
|
+
width: this._aiStatsFeature.aiRate.map(v => `${v * 100}%`),
|
|
97
97
|
backgroundColor: "currentColor"
|
|
98
98
|
}
|
|
99
99
|
})])])]);
|
|
@@ -102,7 +102,7 @@ let AiStatsStatusBar = class AiStatsStatusBar extends Disposable {
|
|
|
102
102
|
AiStatsStatusBar = ( __decorate([( __param(1, IStatusbarService)), ( __param(2, ICommandService)), ( __param(3, ITelemetryService))], AiStatsStatusBar));
|
|
103
103
|
function createAiStatsHover(options) {
|
|
104
104
|
const chartViewMode = observableValue("chartViewMode", "days");
|
|
105
|
-
const aiRatePercent =
|
|
105
|
+
const aiRatePercent = options.data.aiRate.map(r => `${Math.round(r * 100)}%`);
|
|
106
106
|
const createToggleButton = (mode, tooltip, icon) => {
|
|
107
107
|
return derived(reader => {
|
|
108
108
|
const currentMode = chartViewMode.read(reader);
|
|
@@ -140,7 +140,7 @@ function createAiStatsHover(options) {
|
|
|
140
140
|
style: {
|
|
141
141
|
flex: 1
|
|
142
142
|
}
|
|
143
|
-
}, [( localize(
|
|
143
|
+
}, [( localize(14278, "AI Usage Statistics"))]), n.div({
|
|
144
144
|
style: {
|
|
145
145
|
marginLeft: "auto"
|
|
146
146
|
}
|
|
@@ -151,7 +151,7 @@ function createAiStatsHover(options) {
|
|
|
151
151
|
enabled: true,
|
|
152
152
|
run: options.onOpenSettings,
|
|
153
153
|
class: ThemeIcon.asClassName(Codicon.gear),
|
|
154
|
-
tooltip: ( localize(
|
|
154
|
+
tooltip: ( localize(14279, "Configure"))
|
|
155
155
|
},
|
|
156
156
|
options: {
|
|
157
157
|
icon: true,
|
|
@@ -167,13 +167,13 @@ function createAiStatsHover(options) {
|
|
|
167
167
|
flex: 1,
|
|
168
168
|
paddingRight: "4px"
|
|
169
169
|
}
|
|
170
|
-
}, [( localize(
|
|
170
|
+
}, [( localize(14280, "AI vs Typing Average: {0}", aiRatePercent.get()))])]), n.div({
|
|
171
171
|
style: {
|
|
172
172
|
flex: 1,
|
|
173
173
|
paddingRight: "4px"
|
|
174
174
|
}
|
|
175
175
|
}, [( localize(
|
|
176
|
-
|
|
176
|
+
14281,
|
|
177
177
|
"Accepted inline suggestions today: {0}",
|
|
178
178
|
options.data.acceptedInlineSuggestionsToday.get()
|
|
179
179
|
))]),
|
|
@@ -195,14 +195,14 @@ function createAiStatsHover(options) {
|
|
|
195
195
|
style: {
|
|
196
196
|
flex: 1
|
|
197
197
|
}
|
|
198
|
-
}, [
|
|
198
|
+
}, [chartViewMode.map(mode => mode === "days" ? ( localize(14282, "AI Rate by Day")) : ( localize(14283, "AI Rate by Session")))]), n.div({
|
|
199
199
|
class: "chart-view-toggle",
|
|
200
200
|
style: {
|
|
201
201
|
marginLeft: "auto",
|
|
202
202
|
display: "flex",
|
|
203
203
|
gap: "2px"
|
|
204
204
|
}
|
|
205
|
-
}, [createToggleButton("days", ( localize(
|
|
205
|
+
}, [createToggleButton("days", ( localize(14284, "Days")), Codicon.calendar), createToggleButton("sessions", ( localize(14285, "Sessions")), Codicon.listFlat)])]),
|
|
206
206
|
derived(reader => {
|
|
207
207
|
const sessions = options.data.sessions.read(reader);
|
|
208
208
|
const viewMode = chartViewMode.read(reader);
|
|
@@ -243,7 +243,7 @@ class CommandWithArgs {
|
|
|
243
243
|
}
|
|
244
244
|
function openSettingsCommand(options = {}) {
|
|
245
245
|
return ( new CommandWithArgs("workbench.action.openSettings", [{
|
|
246
|
-
query: options.ids ?
|
|
246
|
+
query: options.ids ? options.ids.map(id => `@id:${id}`).join(" ") : undefined
|
|
247
247
|
}]));
|
|
248
248
|
}
|
|
249
249
|
|
|
@@ -22,12 +22,12 @@ const configurationRegistry = ( Registry.as(Extensions.Configuration));
|
|
|
22
22
|
configurationRegistry.registerConfiguration({
|
|
23
23
|
id: "task",
|
|
24
24
|
order: 100,
|
|
25
|
-
title: ( localize(
|
|
25
|
+
title: ( localize(14286, "Edit Telemetry")),
|
|
26
26
|
type: "object",
|
|
27
27
|
properties: {
|
|
28
28
|
[EDIT_TELEMETRY_SETTING_ID]: {
|
|
29
29
|
markdownDescription: ( localize(
|
|
30
|
-
|
|
30
|
+
14287,
|
|
31
31
|
"Controls whether to enable telemetry for edit statistics (only sends statistics if general telemetry is enabled)."
|
|
32
32
|
)),
|
|
33
33
|
type: "boolean",
|
|
@@ -42,7 +42,7 @@ configurationRegistry.registerConfiguration({
|
|
|
42
42
|
},
|
|
43
43
|
[AI_STATS_SETTING_ID]: {
|
|
44
44
|
markdownDescription: ( localize(
|
|
45
|
-
|
|
45
|
+
14288,
|
|
46
46
|
"Controls whether to enable AI statistics in the editor. The gauge shows the average AI rate across 5-minute sessions, where each session's rate is calculated as AI-inserted characters divided by total inserted characters."
|
|
47
47
|
)),
|
|
48
48
|
type: "boolean",
|
|
@@ -54,7 +54,7 @@ configurationRegistry.registerConfiguration({
|
|
|
54
54
|
},
|
|
55
55
|
[EDIT_TELEMETRY_DETAILS_SETTING_ID]: {
|
|
56
56
|
markdownDescription: ( localize(
|
|
57
|
-
|
|
57
|
+
14289,
|
|
58
58
|
"Controls whether to enable telemetry for detailed edit statistics (only sends statistics if general telemetry is enabled)."
|
|
59
59
|
)),
|
|
60
60
|
type: "boolean",
|
|
@@ -65,13 +65,13 @@ configurationRegistry.registerConfiguration({
|
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
67
|
[EDIT_TELEMETRY_SHOW_STATUS_BAR]: {
|
|
68
|
-
markdownDescription: ( localize(
|
|
68
|
+
markdownDescription: ( localize(14290, "Controls whether to show the status bar for edit telemetry.")),
|
|
69
69
|
type: "boolean",
|
|
70
70
|
default: false,
|
|
71
71
|
tags: ["experimental"]
|
|
72
72
|
},
|
|
73
73
|
[EDIT_TELEMETRY_SHOW_DECORATIONS]: {
|
|
74
|
-
markdownDescription: ( localize(
|
|
74
|
+
markdownDescription: ( localize(14291, "Controls whether to show decorations for edit telemetry.")),
|
|
75
75
|
type: "boolean",
|
|
76
76
|
default: false,
|
|
77
77
|
tags: ["experimental"]
|
|
@@ -21,11 +21,11 @@ let AnnotatedDocuments = class AnnotatedDocuments extends Disposable {
|
|
|
21
21
|
this._states = mapObservableArrayCached(this, this._workspace.documents, (doc, store) => {
|
|
22
22
|
const docIsVisible = derived(reader => uriVisibilityProvider.isVisible(doc.uri, reader));
|
|
23
23
|
const wasEverVisible = derivedObservableWithCache(this, (reader, lastVal) => lastVal || docIsVisible.read(reader));
|
|
24
|
-
return
|
|
24
|
+
return wasEverVisible.map(v => v ? store.add(
|
|
25
25
|
this._instantiationService.createInstance(AnnotatedDocument, doc, docIsVisible)
|
|
26
|
-
) : undefined)
|
|
26
|
+
) : undefined);
|
|
27
27
|
});
|
|
28
|
-
this.documents =
|
|
28
|
+
this.documents = this._states.map((vals, reader) => vals.map(v => v.read(reader)).filter(isDefined));
|
|
29
29
|
this.documents.recomputeInitiallyAndOnChange(this._store);
|
|
30
30
|
}
|
|
31
31
|
};
|
|
@@ -40,9 +40,9 @@ let UriVisibilityProvider = class UriVisibilityProvider {
|
|
|
40
40
|
onDidRemoveGroupSignal.read(reader);
|
|
41
41
|
return this._editorGroupsService.groups;
|
|
42
42
|
});
|
|
43
|
-
this.visibleUris =
|
|
43
|
+
this.visibleUris = mapObservableArrayCached(this, groups, g => {
|
|
44
44
|
const editors = observableFromEvent(this, g.onDidModelChange, () => g.editors);
|
|
45
|
-
return
|
|
45
|
+
return editors.map(e => e.map(editor => EditorResourceAccessor.getCanonicalUri(editor)));
|
|
46
46
|
}).map((editors, reader) => {
|
|
47
47
|
const map = ( new Map());
|
|
48
48
|
for (const urisObs of editors) {
|
|
@@ -53,7 +53,7 @@ let UriVisibilityProvider = class UriVisibilityProvider {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
return map;
|
|
56
|
-
})
|
|
56
|
+
});
|
|
57
57
|
}
|
|
58
58
|
isVisible(uri, reader) {
|
|
59
59
|
return ( this.visibleUris.read(reader).has(( uri.toString())));
|
package/vscode/src/vs/workbench/contrib/editTelemetry/browser/helpers/documentWithAnnotatedEdits.js
CHANGED
|
@@ -17,10 +17,10 @@ class DocumentWithSourceAnnotatedEdits extends Disposable {
|
|
|
17
17
|
this._originalDoc = _originalDoc;
|
|
18
18
|
const v = this.value = observableValue(this, _originalDoc.value.get());
|
|
19
19
|
this._register(runOnChange(this._originalDoc.value, (val, _prevVal, edits) => {
|
|
20
|
-
const eComposed = AnnotatedStringEdit.compose(
|
|
20
|
+
const eComposed = AnnotatedStringEdit.compose(edits.map(e => {
|
|
21
21
|
const editSourceData = ( new EditSourceData(e.reason));
|
|
22
22
|
return e.mapData(() => editSourceData);
|
|
23
|
-
}))
|
|
23
|
+
}));
|
|
24
24
|
v.set(val, undefined, {
|
|
25
25
|
edit: eComposed
|
|
26
26
|
});
|
|
@@ -228,7 +228,7 @@ let CombineStreamedChanges = class CombineStreamedChanges extends Disposable {
|
|
|
228
228
|
do {
|
|
229
229
|
reader.readBufferedOrThrow();
|
|
230
230
|
last = peeked;
|
|
231
|
-
chatEdit = chatEdit.compose(AnnotatedStringEdit.compose(
|
|
231
|
+
chatEdit = chatEdit.compose(AnnotatedStringEdit.compose(peeked.change.map(c => c.edit)));
|
|
232
232
|
const peekedOrUndefined = await reader.peekTimeout(1000);
|
|
233
233
|
if (!peekedOrUndefined) {
|
|
234
234
|
break;
|
|
@@ -245,7 +245,7 @@ let CombineStreamedChanges = class CombineStreamedChanges extends Disposable {
|
|
|
245
245
|
}
|
|
246
246
|
} else {
|
|
247
247
|
reader.readBufferedOrThrow();
|
|
248
|
-
const e = AnnotatedStringEdit.compose(
|
|
248
|
+
const e = AnnotatedStringEdit.compose(peeked.change.map(c => c.edit));
|
|
249
249
|
this._value.set(peeked.value, undefined, {
|
|
250
250
|
edit: e
|
|
251
251
|
});
|
|
@@ -285,7 +285,7 @@ class MinimizeEditsProcessor extends Disposable {
|
|
|
285
285
|
const v = this.value = observableValue(this, _originalDoc.value.get());
|
|
286
286
|
let prevValue = this._originalDoc.value.get().value;
|
|
287
287
|
this._register(runOnChange(this._originalDoc.value, (val, _prevVal, edits) => {
|
|
288
|
-
const eComposed = AnnotatedStringEdit.compose(
|
|
288
|
+
const eComposed = AnnotatedStringEdit.compose(edits.map(e => e.edit));
|
|
289
289
|
const e = eComposed.removeCommonSuffixAndPrefix(prevValue);
|
|
290
290
|
prevValue = val.value;
|
|
291
291
|
v.set(val, undefined, {
|
package/vscode/src/vs/workbench/contrib/editTelemetry/browser/helpers/vscodeObservableWorkspace.js
CHANGED
|
@@ -30,12 +30,12 @@ let VSCodeWorkspace = class VSCodeWorkspace extends ObservableWorkspace {
|
|
|
30
30
|
const models = this._textModelService.getModels();
|
|
31
31
|
return models;
|
|
32
32
|
});
|
|
33
|
-
const documents =
|
|
33
|
+
const documents = mapObservableArrayCached(this, models, (m, store) => {
|
|
34
34
|
if (m.isTooLargeForSyncing()) {
|
|
35
35
|
return undefined;
|
|
36
36
|
}
|
|
37
37
|
return store.add(( new VSCodeDocument(m)));
|
|
38
|
-
}).recomputeInitiallyAndOnChange(this._store).map(d => d.filter(isDefined))
|
|
38
|
+
}).recomputeInitiallyAndOnChange(this._store).map(d => d.filter(isDefined));
|
|
39
39
|
this._documents = documents;
|
|
40
40
|
}
|
|
41
41
|
dispose() {
|
|
@@ -401,7 +401,9 @@ let AgentHostEditMarkerService = class AgentHostEditMarkerService extends Dispos
|
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
403
|
_queuePendingCoverageGapAcknowledgements(resourceKey, acknowledgements) {
|
|
404
|
-
const pending = ( new Map(
|
|
404
|
+
const pending = ( new Map(
|
|
405
|
+
(this._pendingCoverageGapAcknowledgements.get(resourceKey)?.acknowledgements ?? []).map(acknowledgement => [acknowledgement.id, acknowledgement])
|
|
406
|
+
));
|
|
405
407
|
for (const acknowledgement of acknowledgements) {
|
|
406
408
|
pending.set(acknowledgement.id, acknowledgement);
|
|
407
409
|
}
|
|
@@ -497,7 +499,7 @@ let AgentHostEditMarkerService = class AgentHostEditMarkerService extends Dispos
|
|
|
497
499
|
if (afterDigest !== observation.afterDigest) {
|
|
498
500
|
continue;
|
|
499
501
|
}
|
|
500
|
-
const sources =
|
|
502
|
+
const sources = consumed.map(index => markers[index].source);
|
|
501
503
|
const firstSource = sources[0];
|
|
502
504
|
const source = firstSource && sources.every(
|
|
503
505
|
candidate => candidate !== undefined && candidate.modelId === firstSource.modelId && candidate.harness === firstSource.harness
|
|
@@ -639,7 +641,7 @@ function isValidCoverageGapAcknowledgements(acknowledgements, lastSequence) {
|
|
|
639
641
|
if (acknowledgements === undefined) {
|
|
640
642
|
return true;
|
|
641
643
|
}
|
|
642
|
-
if (!Array.isArray(acknowledgements) || acknowledgements.length === 0 || ( new Set(
|
|
644
|
+
if (!Array.isArray(acknowledgements) || acknowledgements.length === 0 || ( new Set(acknowledgements.map(acknowledgement => acknowledgement.id))).size !== acknowledgements.length) {
|
|
643
645
|
return false;
|
|
644
646
|
}
|
|
645
647
|
return acknowledgements.every(
|
package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetryReporter.js
CHANGED
|
@@ -30,7 +30,7 @@ let ArcTelemetryReporter = class ArcTelemetryReporter extends Disposable {
|
|
|
30
30
|
this._telemetryService = _telemetryService;
|
|
31
31
|
this._arcTracker = ( new ArcTracker(this._documentValueBeforeTrackedEdit, this._trackedEdit));
|
|
32
32
|
this._store.add(runOnChange(this._document.value, (_val, _prevVal, changes) => {
|
|
33
|
-
const edit = BaseStringEdit.composeOrUndefined(
|
|
33
|
+
const edit = BaseStringEdit.composeOrUndefined(changes.map(c => c.edit));
|
|
34
34
|
if (edit) {
|
|
35
35
|
this._arcTracker.handleEdits(edit);
|
|
36
36
|
}
|
package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.js
CHANGED
|
@@ -19,7 +19,7 @@ let EditTelemetryReportInlineEditArcSender = class EditTelemetryReportInlineEdit
|
|
|
19
19
|
super();
|
|
20
20
|
this._instantiationService = _instantiationService;
|
|
21
21
|
this._register(runOnChange(docWithAnnotatedEdits.value, (_val, _prev, changes) => {
|
|
22
|
-
const edit = AnnotatedStringEdit.compose(
|
|
22
|
+
const edit = AnnotatedStringEdit.compose(changes.map(c => c.edit));
|
|
23
23
|
if (!( edit.replacements.some(r => r.data.editSource.metadata.source === "inlineCompletionAccept"))) {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
@@ -32,8 +32,14 @@ let EditTelemetryReportInlineEditArcSender = class EditTelemetryReportInlineEdit
|
|
|
32
32
|
}
|
|
33
33
|
const data = edit.replacements[0].data.editSource.metadata;
|
|
34
34
|
const docWithJustReason = createDocWithJustReason(docWithAnnotatedEdits, this._store);
|
|
35
|
-
const reporter = this._store.add(
|
|
36
|
-
|
|
35
|
+
const reporter = this._store.add(this._instantiationService.createInstance(
|
|
36
|
+
ArcTelemetryReporter,
|
|
37
|
+
[0, 30, 120, 300, 600, 900].map(s => s * 1000),
|
|
38
|
+
_prev,
|
|
39
|
+
docWithJustReason,
|
|
40
|
+
scmRepoBridge,
|
|
41
|
+
edit,
|
|
42
|
+
res => {
|
|
37
43
|
res.telemetryService.publicLog2("editTelemetry.reportInlineEditArc", {
|
|
38
44
|
extensionId: data.$extensionId ?? "",
|
|
39
45
|
extensionVersion: data.$extensionVersion ?? "",
|
|
@@ -50,10 +56,11 @@ let EditTelemetryReportInlineEditArcSender = class EditTelemetryReportInlineEdit
|
|
|
50
56
|
currentDeletedLineCount: res.currentDeletedLineCount,
|
|
51
57
|
...forwardToChannelIf(isCopilotLikeExtension(data.$extensionId))
|
|
52
58
|
});
|
|
53
|
-
},
|
|
59
|
+
},
|
|
60
|
+
() => {
|
|
54
61
|
this._store.delete(reporter);
|
|
55
|
-
}
|
|
56
|
-
);
|
|
62
|
+
}
|
|
63
|
+
));
|
|
57
64
|
}));
|
|
58
65
|
}
|
|
59
66
|
};
|
|
@@ -63,7 +70,7 @@ let CreateSuggestionIdForChatOrInlineChatCaller = class CreateSuggestionIdForCha
|
|
|
63
70
|
super();
|
|
64
71
|
this._aiEditTelemetryService = _aiEditTelemetryService;
|
|
65
72
|
this._register(runOnChange(docWithAnnotatedEdits.value, (_val, _prev, changes) => {
|
|
66
|
-
const edit = AnnotatedStringEdit.compose(
|
|
73
|
+
const edit = AnnotatedStringEdit.compose(changes.map(c => c.edit));
|
|
67
74
|
const supportedSource = ( new Set(["Chat.applyEdits", "inlineChat.applyEdits"]));
|
|
68
75
|
if (!( edit.replacements.some(r => ( supportedSource.has(r.data.editSource.metadata.source))))) {
|
|
69
76
|
return;
|
|
@@ -116,7 +123,7 @@ let EditTelemetryReportEditArcForChatOrInlineChatSender = class EditTelemetryRep
|
|
|
116
123
|
this._instantiationService = _instantiationService;
|
|
117
124
|
this._randomService = _randomService;
|
|
118
125
|
this._register(runOnChange(docWithAnnotatedEdits.value, (_val, _prev, changes) => {
|
|
119
|
-
const edit = AnnotatedStringEdit.compose(
|
|
126
|
+
const edit = AnnotatedStringEdit.compose(changes.map(c => c.edit));
|
|
120
127
|
const supportedSource = ( new Set(["Chat.applyEdits", "inlineChat.applyEdits"]));
|
|
121
128
|
if (!( edit.replacements.some(r => ( supportedSource.has(r.data.editSource.metadata.source))))) {
|
|
122
129
|
return;
|
|
@@ -130,8 +137,14 @@ let EditTelemetryReportEditArcForChatOrInlineChatSender = class EditTelemetryRep
|
|
|
130
137
|
const data = edit.replacements[0].data.editSource;
|
|
131
138
|
const uniqueEditId = this._randomService.generateUuid();
|
|
132
139
|
const docWithJustReason = createDocWithJustReason(docWithAnnotatedEdits, this._store);
|
|
133
|
-
const reporter = this._store.add(
|
|
134
|
-
|
|
140
|
+
const reporter = this._store.add(this._instantiationService.createInstance(
|
|
141
|
+
ArcTelemetryReporter,
|
|
142
|
+
[0, 60, 300].map(s => s * 1000),
|
|
143
|
+
_prev,
|
|
144
|
+
docWithJustReason,
|
|
145
|
+
scmRepoBridge,
|
|
146
|
+
edit,
|
|
147
|
+
res => {
|
|
135
148
|
res.telemetryService.publicLog2("editTelemetry.reportEditArc", {
|
|
136
149
|
sourceKeyCleaned: data.toKey(Number.MAX_SAFE_INTEGER, {
|
|
137
150
|
$extensionId: false,
|
|
@@ -164,10 +177,11 @@ let EditTelemetryReportEditArcForChatOrInlineChatSender = class EditTelemetryRep
|
|
|
164
177
|
currentDeletedLineCount: res.currentDeletedLineCount,
|
|
165
178
|
...forwardToChannelIf(isCopilotLikeExtension(data.props.$extensionId))
|
|
166
179
|
});
|
|
167
|
-
},
|
|
180
|
+
},
|
|
181
|
+
() => {
|
|
168
182
|
this._store.delete(reporter);
|
|
169
|
-
}
|
|
170
|
-
);
|
|
183
|
+
}
|
|
184
|
+
));
|
|
171
185
|
}));
|
|
172
186
|
}
|
|
173
187
|
};
|
package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/editSourceTrackingFeature.js
CHANGED
|
@@ -55,7 +55,7 @@ let EditTrackingFeature = class EditTrackingFeature extends Disposable {
|
|
|
55
55
|
const extensions = observableFromEvent(this._extensionService.onDidChangeExtensions, () => {
|
|
56
56
|
return this._extensionService.extensions;
|
|
57
57
|
});
|
|
58
|
-
const extensionIds = derived(reader => ( new Set(
|
|
58
|
+
const extensionIds = derived(reader => ( new Set(extensions.read(reader).map(e => e.identifier.value.toLowerCase()))));
|
|
59
59
|
function getExtensionInfoObs(extensionId) {
|
|
60
60
|
const extIdLowerCase = extensionId.toLowerCase();
|
|
61
61
|
return derived(reader => ( extensionIds.read(reader).has(extIdLowerCase)));
|
|
@@ -111,13 +111,13 @@ let EditTrackingFeature = class EditTrackingFeature extends Disposable {
|
|
|
111
111
|
return [];
|
|
112
112
|
}
|
|
113
113
|
const ranges = (docsState.longtermTracker.read(reader)?.getTrackedRanges(reader)) ?? [];
|
|
114
|
-
return
|
|
114
|
+
return ranges.map(r => ({
|
|
115
115
|
range: doc.value.read(undefined).getTransformer().getRange(r.range),
|
|
116
116
|
options: {
|
|
117
117
|
description: "editSourceTracking",
|
|
118
118
|
inlineClassName: decorations.get(r.source)
|
|
119
119
|
}
|
|
120
|
-
}))
|
|
120
|
+
}));
|
|
121
121
|
})));
|
|
122
122
|
}
|
|
123
123
|
}).recomputeInitiallyAndOnChange(reader.store);
|
|
@@ -160,7 +160,7 @@ let EditTrackingFeature = class EditTrackingFeature extends Disposable {
|
|
|
160
160
|
if (data.totalModifiedCharactersInFinalState === 0) {
|
|
161
161
|
continue;
|
|
162
162
|
}
|
|
163
|
-
editSources.push(...
|
|
163
|
+
editSources.push(...trackedRanges.map(r => r.source));
|
|
164
164
|
const filteredData = Object.fromEntries(
|
|
165
165
|
Object.entries(data).filter(([_, value]) => !(typeof value === "number") || value !== 0)
|
|
166
166
|
);
|
|
@@ -220,9 +220,9 @@ let EditTrackingFeature = class EditTrackingFeature extends Disposable {
|
|
|
220
220
|
});
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
|
-
const agendaItems =
|
|
223
|
+
const agendaItems = editSourceInfo.map(
|
|
224
224
|
info => `<span style="background-color:${info.color};border-radius:3px;">${info.name}</span>`
|
|
225
|
-
)
|
|
225
|
+
);
|
|
226
226
|
return agendaItems.join(" ");
|
|
227
227
|
}
|
|
228
228
|
};
|
package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/editSourceTrackingImpl.js
CHANGED
|
@@ -79,7 +79,7 @@ let EditSourceTrackingImpl = class EditSourceTrackingImpl extends Disposable {
|
|
|
79
79
|
this._agentHostEditMarkerService
|
|
80
80
|
))];
|
|
81
81
|
});
|
|
82
|
-
this.docsState =
|
|
82
|
+
this.docsState = this._states.map(entries => ( new Map(entries)));
|
|
83
83
|
this.docsState.recomputeInitiallyAndOnChange(this._store);
|
|
84
84
|
}
|
|
85
85
|
};
|
|
@@ -31,7 +31,7 @@ class DocumentEditSourceTracker extends Disposable {
|
|
|
31
31
|
this._invalidatedExternalObservationIds = ( new Set());
|
|
32
32
|
this._reattributedExternalObservations = ( new Map());
|
|
33
33
|
this._documentStore.add(runOnChange(this._doc.value, (_val, _prevVal, edits) => {
|
|
34
|
-
let eComposed = AnnotatedStringEdit.compose(
|
|
34
|
+
let eComposed = AnnotatedStringEdit.compose(edits.map(e => e.edit));
|
|
35
35
|
if (eComposed.replacements.every(e => e.data.source.category === "external")) {
|
|
36
36
|
if (this._edits.isEmpty() && !this._externalEditCorrelation)
|
|
37
37
|
; else {
|
|
@@ -139,13 +139,13 @@ class DocumentEditSourceTracker extends Disposable {
|
|
|
139
139
|
getTrackedRanges(reader, includeSuppressed = false) {
|
|
140
140
|
this._update.read(reader);
|
|
141
141
|
const ranges = this._edits.getNewRanges();
|
|
142
|
-
return
|
|
142
|
+
return ranges.map((r, idx) => {
|
|
143
143
|
const e = this._edits.replacements[idx];
|
|
144
144
|
const representative = this.getRepresentative(e.data.key) ?? e.data.representative;
|
|
145
145
|
const source = representative === e.data.representative ? e.data.source : EditSourceBase.create(representative);
|
|
146
146
|
const te = ( new TrackedEdit(e.replaceRange, r, e.data.key, source, representative));
|
|
147
147
|
return te;
|
|
148
|
-
})
|
|
148
|
+
}).filter(edit => this._shouldIncludeKey(edit.sourceKey, includeSuppressed));
|
|
149
149
|
}
|
|
150
150
|
isEmpty() {
|
|
151
151
|
return this.getAllKeys().length === 0;
|
|
@@ -190,12 +190,12 @@ class DocumentEditSourceTracker extends Disposable {
|
|
|
190
190
|
$fileExtension: "text.w"
|
|
191
191
|
},
|
|
192
192
|
"value": txt,
|
|
193
|
-
"decorations":
|
|
193
|
+
"decorations": ranges.map(r => {
|
|
194
194
|
return {
|
|
195
195
|
range: [r.range.start, r.range.endExclusive],
|
|
196
196
|
color: r.source.getColor()
|
|
197
197
|
};
|
|
198
|
-
})
|
|
198
|
+
})
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
201
|
}
|
|
@@ -23,11 +23,11 @@ class ArcTracker {
|
|
|
23
23
|
}
|
|
24
24
|
function toArcTextEdit(edit) {
|
|
25
25
|
return {
|
|
26
|
-
replacements:
|
|
26
|
+
replacements: edit.replacements.map(replacement => ({
|
|
27
27
|
start: replacement.replaceRange.start,
|
|
28
28
|
endExclusive: replacement.replaceRange.endExclusive,
|
|
29
29
|
text: replacement.newText
|
|
30
|
-
}))
|
|
30
|
+
}))
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -176,7 +176,7 @@ let TelemetryContribution = class TelemetryContribution extends Disposable {
|
|
|
176
176
|
constructor() {
|
|
177
177
|
super({
|
|
178
178
|
id: "workbench.action.showTelemetry",
|
|
179
|
-
title: ( localize2(
|
|
179
|
+
title: ( localize2(18946, "Show Telemetry")),
|
|
180
180
|
category: Categories.Developer,
|
|
181
181
|
f1: true
|
|
182
182
|
});
|