mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
Add telemetry for rendering of markdown path
- Once per notebook, post if we see some rendered katex - For each known katex unsupported formula, see if it exists in the output. This will help us see which ones are used most often in the real world
This commit is contained in:
@@ -22,6 +22,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
|
||||
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { IOpenerService, matchesScheme } from 'vs/platform/opener/common/opener';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
||||
import { CellEditState, ICellOutputViewModel, ICommonCellInfo, ICommonNotebookEditor, IDisplayOutputLayoutUpdateRequest, IDisplayOutputViewModel, IGenericCellViewModel, IInsetRenderOutput, RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { preloadsScriptStr } from 'vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads';
|
||||
@@ -162,6 +163,15 @@ export interface IInitializedMarkdownPreviewMessage extends BaseToWebviewMessage
|
||||
readonly type: 'initializedMarkdownPreview';
|
||||
}
|
||||
|
||||
export interface ITelemetryFoundRenderedMarkdownMath extends BaseToWebviewMessage {
|
||||
readonly type: 'telemetryFoundRenderedMarkdownMath';
|
||||
}
|
||||
|
||||
export interface ITelemetryFoundUnrenderedMarkdownMath extends BaseToWebviewMessage {
|
||||
readonly type: 'telemetryFoundUnrenderedMarkdownMath';
|
||||
readonly latexDirective: string;
|
||||
}
|
||||
|
||||
export interface IClearMessage {
|
||||
type: 'clear';
|
||||
}
|
||||
@@ -339,7 +349,10 @@ export type FromWebviewMessage =
|
||||
| ICellDropMessage
|
||||
| ICellDragEndMessage
|
||||
| IInitializedMarkdownPreviewMessage
|
||||
| ITelemetryFoundRenderedMarkdownMath
|
||||
| ITelemetryFoundUnrenderedMarkdownMath
|
||||
;
|
||||
|
||||
export type ToWebviewMessage =
|
||||
| IClearMessage
|
||||
| IFocusOutputMessage
|
||||
@@ -426,6 +439,7 @@ export class BackLayerWebView<T extends ICommonCellInfo> extends Disposable {
|
||||
@IContextMenuService private readonly contextMenuService: IContextMenuService,
|
||||
@IMenuService private readonly menuService: IMenuService,
|
||||
@IContextKeyService private readonly contextKeyService: IContextKeyService,
|
||||
@ITelemetryService private readonly telemetryService: ITelemetryService,
|
||||
) {
|
||||
super();
|
||||
|
||||
@@ -1054,6 +1068,27 @@ var requirejs = (function() {
|
||||
this.notebookEditor.markdownCellDragEnd(data.cellId);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'telemetryFoundRenderedMarkdownMath':
|
||||
{
|
||||
this.telemetryService.publicLog2<{}, {}>('notebook/markdown/renderedLatex', {});
|
||||
break;
|
||||
}
|
||||
case 'telemetryFoundUnrenderedMarkdownMath':
|
||||
{
|
||||
type Classification = {
|
||||
latexDirective: { classification: 'SystemMetaData', purpose: 'FeatureInsight'; };
|
||||
};
|
||||
|
||||
type TelemetryEvent = {
|
||||
latexDirective: string;
|
||||
};
|
||||
|
||||
this.telemetryService.publicLog2<TelemetryEvent, Classification>('notebook/markdown/foundUnrenderedLatex', {
|
||||
latexDirective: data.latexDirective
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import type { Event } from 'vs/base/common/event';
|
||||
import type { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { FromWebviewMessage, IBlurOutputMessage, ICellDropMessage, ICellDragMessage, ICellDragStartMessage, IClickedDataUrlMessage, ICustomRendererMessage, IDimensionMessage, IClickMarkdownPreviewMessage, IMouseEnterMarkdownPreviewMessage, IMouseEnterMessage, IMouseLeaveMarkdownPreviewMessage, IMouseLeaveMessage, IToggleMarkdownPreviewMessage, IWheelMessage, ToWebviewMessage, ICellDragEndMessage, IOutputFocusMessage, IOutputBlurMessage, DimensionUpdate, IContextMenuMarkdownPreviewMessage } from 'vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView';
|
||||
import { FromWebviewMessage, IBlurOutputMessage, ICellDropMessage, ICellDragMessage, ICellDragStartMessage, IClickedDataUrlMessage, ICustomRendererMessage, IDimensionMessage, IClickMarkdownPreviewMessage, IMouseEnterMarkdownPreviewMessage, IMouseEnterMessage, IMouseLeaveMarkdownPreviewMessage, IMouseLeaveMessage, IToggleMarkdownPreviewMessage, IWheelMessage, ToWebviewMessage, ICellDragEndMessage, IOutputFocusMessage, IOutputBlurMessage, DimensionUpdate, IContextMenuMarkdownPreviewMessage, ITelemetryFoundRenderedMarkdownMath, ITelemetryFoundUnrenderedMarkdownMath } from 'vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView';
|
||||
|
||||
// !! IMPORTANT !! everything must be in-line within the webviewPreloads
|
||||
// function. Imports are not allowed. This is stringifies and injected into
|
||||
@@ -894,6 +894,9 @@ function webviewPreloads() {
|
||||
});
|
||||
}
|
||||
|
||||
let hasPostedRenderedMathTelemetry = false;
|
||||
const unsupportedKatexTermsRegex = /(\\(?:abovewithdelims|array|Arrowvert|arrowvert|atopwithdelims|bbox|bracevert|buildrel|cancelto|cases|class|cssId|ddddot|dddot|DeclareMathOperator|definecolor|displaylines|enclose|eqalign|eqalignno|eqref|hfil|hfill|idotsint|iiiint|label|leftarrowtail|leftroot|leqalignno|lower|mathtip|matrix|mbox|mit|mmlToken|moveleft|moveright|mspace|newenvironment|Newextarrow|notag|oldstyle|overparen|overwithdelims|pmatrix|raise|ref|renewenvironment|require|root|Rule|scr|shoveleft|shoveright|sideset|skew|Space|strut|style|texttip|Tiny|toggle|underparen|unicode|uproot)\b)/g;
|
||||
|
||||
function updateMarkdownPreview(cellId: string, content: string | undefined) {
|
||||
const previewContainerNode = document.getElementById(cellId);
|
||||
if (!previewContainerNode) {
|
||||
@@ -914,6 +917,21 @@ function webviewPreloads() {
|
||||
element: previewNode,
|
||||
content: content
|
||||
}]);
|
||||
|
||||
if (!hasPostedRenderedMathTelemetry) {
|
||||
const hasRenderedMath = previewNode.querySelector('.katex');
|
||||
if (hasRenderedMath) {
|
||||
hasPostedRenderedMathTelemetry = true;
|
||||
postNotebookMessage<ITelemetryFoundRenderedMarkdownMath>('telemetryFoundRenderedMarkdownMath', {});
|
||||
}
|
||||
}
|
||||
|
||||
const matches = previewNode.innerText.match(unsupportedKatexTermsRegex);
|
||||
if (matches) {
|
||||
postNotebookMessage<ITelemetryFoundUnrenderedMarkdownMath>('telemetryFoundUnrenderedMarkdownMath', {
|
||||
latexDirective: matches[0],
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user