Skip to content

Commit

Permalink
Cannot parse treesitter telemetry
Browse files Browse the repository at this point in the history
Fixes #224310
  • Loading branch information
alexr00 committed Jul 31, 2024
1 parent 5410988 commit 476a973
Showing 1 changed file with 17 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -131,16 +136,14 @@ export class TreeSitterTree implements IDisposable {
}

private parse(model: ITextModel): Promise<Parser.Tree | undefined> {
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<Parser.Tree | undefined> {
private async _parseAndYield(model: ITextModel, parseType: TelemetryParseType): Promise<Parser.Tree | undefined> {
const language = model.getLanguageId();
let tree: Parser.Tree | undefined;
let time: number = 0;
Expand All @@ -163,24 +166,28 @@ export class TreeSitterTree implements IDisposable {
return;
}
} while (!tree);
this.sendParseTimeTelemetry(telemetryTag, language, time, passes);
this.sendParseTimeTelemetry(parseType, language, time, passes);
return tree;
}

private _parseCallback(textModel: ITextModel, index: number): string | null {
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';
languageId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The programming language ID.' };
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 });
}
}
}

Expand Down

0 comments on commit 476a973

Please sign in to comment.