From 476a9737651587f50b9b06c5b038e39c1d07d10e Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Wed, 31 Jul 2024 14:43:21 +0200 Subject: [PATCH] Cannot parse treesitter telemetry Fixes #224310 --- .../treeSitter/treeSitterParserService.ts | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts b/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts index 7b1b17c613357..dfaf2974b4849 100644 --- a/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts +++ b/src/vs/editor/browser/services/treeSitter/treeSitterParserService.ts @@ -74,6 +74,11 @@ export class TextModelTreeSitter extends Disposable { } } +const enum TelemetryParseType { + Full = 'fullParse', + Incremental = 'incrementalParse' +} + export class TreeSitterTree implements IDisposable { private _tree: Parser.Tree | undefined; private _isDisposed: boolean = false; @@ -131,16 +136,14 @@ export class TreeSitterTree implements IDisposable { } private parse(model: ITextModel): Promise { - let telemetryTag: string; + let parseType: TelemetryParseType = TelemetryParseType.Full; if (this.tree) { - telemetryTag = 'incrementalParse'; - } else { - telemetryTag = 'fullParse'; + parseType = TelemetryParseType.Incremental; } - return this._parseAndYield(model, telemetryTag); + return this._parseAndYield(model, parseType); } - private async _parseAndYield(model: ITextModel, telemetryTag: string): Promise { + private async _parseAndYield(model: ITextModel, parseType: TelemetryParseType): Promise { const language = model.getLanguageId(); let tree: Parser.Tree | undefined; let time: number = 0; @@ -163,7 +166,7 @@ export class TreeSitterTree implements IDisposable { return; } } while (!tree); - this.sendParseTimeTelemetry(telemetryTag, language, time, passes); + this.sendParseTimeTelemetry(parseType, language, time, passes); return tree; } @@ -171,8 +174,8 @@ export class TreeSitterTree implements IDisposable { return textModel.getTextBuffer().getNearestChunk(index); } - private sendParseTimeTelemetry(eventName: string, languageId: string, time: number, passes: number): void { - this._logService.debug(`Tree parsing (${eventName}) took ${time} ms and ${passes} passes.`); + private sendParseTimeTelemetry(parseType: TelemetryParseType, languageId: string, time: number, passes: number): void { + this._logService.debug(`Tree parsing (${parseType}) took ${time} ms and ${passes} passes.`); type ParseTimeClassification = { owner: 'alros'; comment: 'Used to understand how long it takes to parse a tree-sitter tree'; @@ -180,7 +183,11 @@ export class TreeSitterTree implements IDisposable { time: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The ms it took to parse' }; passes: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of passes it took to parse' }; }; - this._telemetryService.publicLog2<{ languageId: string; time: number; passes: number }, ParseTimeClassification>(`treeSitter.${eventName}`, { languageId, time, passes }); + if (parseType === TelemetryParseType.Full) { + this._telemetryService.publicLog2<{ languageId: string; time: number; passes: number }, ParseTimeClassification>(`treeSitter.fullParse`, { languageId, time, passes }); + } else { + this._telemetryService.publicLog2<{ languageId: string; time: number; passes: number }, ParseTimeClassification>(`treeSitter.incrementalParse`, { languageId, time, passes }); + } } }