From 83b87dd201ccecf784e1d3df33f251797355ae76 Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Wed, 4 Nov 2026 12:43:37 -0500 Subject: [PATCH] Count LSP commands only when the file has a provider for them Agent-Session: 9384a605-d9c3-4fb4-90ee-785315d819c8 Agent-Session: e35ee3f1-35bb-443a-a7fa-2d0fcb48c31e Agent-Session: b8a1d0cf-9b38-4aa4-b9f2-62aeab83bfb0 --- .../reviewLspTelemetry.contribution.ts | 29 ++++++++++++++++++- docs/telemetry.md | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/review-desktop/code-oss/src/vs/review/contrib/telemetry/reviewLspTelemetry.contribution.ts b/apps/review-desktop/code-oss/src/vs/review/contrib/telemetry/reviewLspTelemetry.contribution.ts index 48a83d2fd..64834909b 100644 --- a/apps/review-desktop/code-oss/src/vs/review/contrib/telemetry/reviewLspTelemetry.contribution.ts +++ b/apps/review-desktop/code-oss/src/vs/review/contrib/telemetry/reviewLspTelemetry.contribution.ts @@ -116,7 +116,7 @@ class ReviewLspTelemetryContribution extends Disposable implements IWorkbenchCon } const editor = this.activeEditor(); const model = editor?.getModel(); - if (!editor || !model) { + if (!editor || !model || !this.hasProvider(feature, model)) { return; } if (feature === 'hover') { @@ -229,6 +229,33 @@ class ReviewLspTelemetryContribution extends Disposable implements IWorkbenchCon this.editorStores.delete(editor); } + private hasProvider(feature: string, model: ITextModel): boolean { + const features = this.languageFeaturesService; + switch (feature) { + case 'goto_definition': + case 'peek_definition': + return features.definitionProvider.has(model) || features.declarationProvider.has(model); + case 'goto_type_definition': + return features.typeDefinitionProvider.has(model); + case 'goto_implementation': + return features.implementationProvider.has(model); + case 'references': + return features.referenceProvider.has(model); + case 'rename': + return features.renameProvider.has(model); + case 'format': + return features.documentFormattingEditProvider.has(model) || features.documentRangeFormattingEditProvider.has(model); + case 'code_action': + return features.codeActionProvider.has(model); + case 'hover': + return features.hoverProvider.has(model); + case 'symbol_search': + return features.documentSymbolProvider.has(model); + default: + return true; + } + } + private captureLspUsed(editor: ICodeEditor, model: ITextModel, feature: string, via: string): void { this.telemetryService.capture('lsp_used', { feature, diff --git a/docs/telemetry.md b/docs/telemetry.md index 49bb7d067..078ece706 100644 --- a/docs/telemetry.md +++ b/docs/telemetry.md @@ -300,7 +300,7 @@ session with `outcome: "app_quit"`, the same as quitting. | Event | Additional properties | When | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | -| `review_lsp_used` | `feature` in hover, goto_definition, peek_definition, goto_type_definition, goto_implementation, references, rename, format, code_action, symbol_search; `via` in command, mouse; `language`; `editor_kind` in files_tab, inline_peek, diff, definition_peek | A user invokes an LSP feature | +| `review_lsp_used` | `feature` in hover, goto_definition, peek_definition, goto_type_definition, goto_implementation, references, rename, format, code_action, symbol_search; `via` in command, mouse; `language`; `editor_kind` in files_tab, inline_peek, diff, definition_peek | A user invokes an LSP feature the file supports | | `review_ls_activated` | `group` in python, go, rust, swift, csharp; `ok` | A language server activation check ends | | `review_extension_installed` | Allowlisted `extension_id`; `trigger` in user, auto_upgrade, startup_seed, keymap, rollback; `cached`; `duration_ms` | An optional extension installs | | `review_extension_install_failed` | Allowlisted `extension_id`; allowlisted `trigger`; `phase` in download, install | An optional extension install fails |