Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions extensions/ql-vscode/src/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ import {
import { AbstractWebview, WebviewPanelConfig } from "./abstract-webview";
import { PAGE_SIZE } from "./config";
import { HistoryItemLabelProvider } from "./history-item-label-provider";
import { telemetryListener } from "./telemetry";

/**
* interface.ts
Expand Down Expand Up @@ -255,6 +256,7 @@ export class ResultsView extends AbstractWebview<
}
case "changeSort":
await this.changeRawSortState(msg.resultSetName, msg.sortState);
telemetryListener?.sendUIInteraction("local-results-column-sorting");
break;
case "changeInterpretedSort":
await this.changeInterpretedSortState(msg.sortState);
Expand Down Expand Up @@ -282,6 +284,9 @@ export class ResultsView extends AbstractWebview<
case "openFile":
await this.openFile(msg.filePath);
break;
case "telemetry":
telemetryListener?.sendUIInteraction(msg.action);
break;
default:
assertNever(msg);
}
Expand Down
3 changes: 2 additions & 1 deletion extensions/ql-vscode/src/pure/interface-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,8 @@ export type FromResultsViewMsg =
| ChangeInterpretedResultsSortMsg
| ViewLoadedMsg
| ChangePage
| OpenFileMsg;
| OpenFileMsg
| TelemetryMessage;

/**
* Message from the results view to open a database source
Expand Down
5 changes: 5 additions & 0 deletions extensions/ql-vscode/src/view/results/alert-table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import {
import { vscode } from "../vscode-api";
import { isWholeFileLoc, isLineColumnLoc } from "../../pure/bqrs-utils";
import { ScrollIntoViewHelper } from "./scroll-into-view-helper";
import { sendTelemetry } from "../common/telemetry";

export type PathTableProps = ResultTableProps & {
resultSet: InterpretedResultSet<SarifInterpretationData>;
Expand Down Expand Up @@ -64,6 +65,9 @@ export class PathTable extends React.Component<PathTableProps, PathTableState> {
expanded.add(str);
}
}
if (expanded) {
sendTelemetry("local-results-alert-table-path-expanded");
}
return { expanded };
});
e.stopPropagation();
Expand Down Expand Up @@ -185,6 +189,7 @@ export class PathTable extends React.Component<PathTableProps, PathTableState> {
...previousState,
selectedItem: resultKey,
}));
sendTelemetry("local-results-alert-table-path-selected");
};
};

Expand Down
2 changes: 2 additions & 0 deletions extensions/ql-vscode/src/view/results/raw-results-table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { ResultRow } from "../../pure/bqrs-cli-types";
import { onNavigation } from "./results";
import { tryGetResolvableLocation } from "../../pure/bqrs-utils";
import { ScrollIntoViewHelper } from "./scroll-into-view-helper";
import { sendTelemetry } from "../common/telemetry";

export type RawTableProps = ResultTableProps & {
resultSet: RawTableResultSet;
Expand All @@ -44,6 +45,7 @@ export class RawTable extends React.Component<RawTableProps, RawTableState> {
...prev,
selectedItem: { row, column },
}));
sendTelemetry("local-results-raw-results-table-selected");
}

render(): React.ReactNode {
Expand Down
10 changes: 9 additions & 1 deletion extensions/ql-vscode/src/view/results/result-table-utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
import { assertNever } from "../../pure/helpers-pure";
import { vscode } from "../vscode-api";
import { convertNonPrintableChars } from "../../text-utils";
import { sendTelemetry } from "../common/telemetry";

export interface ResultTableProps {
resultSet: ResultSet;
Expand Down Expand Up @@ -160,13 +161,20 @@ export function nextSortDirection(
}
}

function sendCodeQLLanguageGuidesTelemetry() {
sendTelemetry("codeql-language-guides-link");
}

export function emptyQueryResultsMessage(): JSX.Element {
return (
<div className="vscode-codeql__empty-query-message">
<span>
This query returned no results. If this isn&apos;t what you were
expecting, and for effective query-writing tips, check out the{" "}
<a href="https://codeql.github.com/docs/codeql-language-guides/">
<a
href="https://codeql.github.com/docs/codeql-language-guides/"
onClick={sendCodeQLLanguageGuidesTelemetry}
>
CodeQL language guides
</a>
.
Expand Down
14 changes: 14 additions & 0 deletions extensions/ql-vscode/src/view/results/result-tables.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
openFile,
} from "./result-table-utils";
import { vscode } from "../vscode-api";
import { sendTelemetry } from "../common/telemetry";

const FILE_PATH_REGEX = /^(?:.+[\\/])*(.+)$/;

Expand Down Expand Up @@ -153,6 +154,7 @@ export class ResultTables extends React.Component<
pageNumber: 0,
selectedTable,
});
sendTelemetry("local-results-table-selection");
};

private alertTableExtras(): JSX.Element | undefined {
Expand All @@ -165,6 +167,9 @@ export class ResultTables extends React.Component<
this.setState({
problemsViewSelected: e.target.checked,
});
if (e.target.checked) {
sendTelemetry("local-results-show-results-in-problems-view");
}
if (resultsPath !== undefined) {
vscode.postMessage({
t: "toggleDiagnostics",
Expand Down Expand Up @@ -199,6 +204,10 @@ export class ResultTables extends React.Component<
return parsedResultSets.pageNumber * parsedResultSets.pageSize;
}

sendResultsPageChangedTelemetry() {
sendTelemetry("local-results-alert-table-page-changed");
}

renderPageButtons(): JSX.Element {
const { parsedResultSets } = this.props;
const selectedTable = this.state.selectedTable;
Expand All @@ -217,6 +226,7 @@ export class ResultTables extends React.Component<

const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
this.setState({ selectedPage: e.target.value });
this.sendResultsPageChangedTelemetry();
};
const choosePage = (input: string) => {
const pageNumber = parseInt(input);
Expand All @@ -239,17 +249,20 @@ export class ResultTables extends React.Component<
pageNumber: Math.max(parsedResultSets.pageNumber - 1, 0),
selectedTable,
});
this.sendResultsPageChangedTelemetry();
};
const nextPage = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
vscode.postMessage({
t: "changePage",
pageNumber: Math.min(parsedResultSets.pageNumber + 1, numPages - 1),
selectedTable,
});
this.sendResultsPageChangedTelemetry();
};

const openQuery = () => {
openFile(this.props.queryPath);
sendTelemetry("local-results-open-query-file");
};
const fileName = FILE_PATH_REGEX.exec(this.props.queryPath)?.[1] || "query";

Expand Down Expand Up @@ -334,6 +347,7 @@ export class ResultTables extends React.Component<
nonemptyRawResults={nonemptyRawResults}
showRawResults={() => {
this.setState({ selectedTable: SELECT_TABLE_NAME });
sendTelemetry("local-results-show-raw-results");
}}
offset={this.getOffset()}
/>
Expand Down