diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts index 750989c197d7a7d83b68a1a08d1f3278020ffe94..ce9c1e2ff94e89c3bbfba5e370c8c40eed383c93 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts @@ -574,28 +574,15 @@ export class SuggestWidget implements IContentWidget, IDisposable { this.completionModel = null; } else { - // TODO@joao,joh move this to a better place - let snippetCount = 0; - let textCount = 0; - this.completionModel.items.forEach((item, index) => { - switch (item.suggestion.type) { - case 'snippet': snippetCount++; break; - case 'text': textCount++; break; - } - }); + const {stats} = this.completionModel; + stats['wasAutomaticallyTriggered'] = !!isAuto; + this.telemetryService.publicLog('suggestWidget', stats); this.list.splice(0, this.list.length, ...this.completionModel.items); this.list.setFocus(this.completionModel.topScoreIdx); this.list.reveal(this.completionModel.topScoreIdx, 0); this.setState(State.Open); - - this.telemetryService.publicLog('suggestWidget', { - suggestionCount: visibleCount, - snippetCount, - textCount, - wasAutomaticallyTriggered: !!isAuto - }); } } diff --git a/src/vs/editor/contrib/suggest/common/completionModel.ts b/src/vs/editor/contrib/suggest/common/completionModel.ts index 020ba89cf8e26299907dc479c4b15cbaffddbc6e..568a9ab058a5cfcc58f15cec1e763a8ae6194005 100644 --- a/src/vs/editor/contrib/suggest/common/completionModel.ts +++ b/src/vs/editor/contrib/suggest/common/completionModel.ts @@ -27,6 +27,13 @@ export class CompletionItem { } } +export interface CompletionStats { + suggestionCount: number; + snippetCount: number; + textCount: number; + [name: string]: any; +} + export class LineContext { leadingLineContent: string; characterCountDelta: number; @@ -41,6 +48,7 @@ export class CompletionModel { private _filteredItems: CompletionItem[] = undefined; private _topScoreIdx: number; + private _stats: CompletionStats; constructor(raw: ISuggestionItem[], lineContext: LineContext) { this.raw = raw; @@ -77,9 +85,17 @@ export class CompletionModel { return this._topScoreIdx; } + get stats(): CompletionStats { + if (!this._filteredItems) { + this._filterAndScore(); + } + return this._stats; + } + private _filterAndScore(): void { this._filteredItems = []; this._topScoreIdx = -1; + this._stats = { suggestionCount: 0, snippetCount: 0, textCount: 0 }; const {leadingLineContent, characterCountDelta} = this._lineContext; let word = ''; @@ -121,6 +137,13 @@ export class CompletionModel { topScore = score; this._topScoreIdx = this._filteredItems.length - 1; } + + // update stats + this._stats.suggestionCount++; + switch (item.suggestion.type) { + case 'snippet': this._stats.snippetCount++; break; + case 'text': this._stats.textCount++; break; + } } }