Add empty data extension editor view

This adds an empty data extension editor view which is only available
behind the `codeQL.dataExtensions.editor` and `codeQL.canary` settings.
This commit is contained in:
Koen Vlaswinkel
2023-04-04 12:07:59 +02:00
parent 35cb1137e8
commit 478c095d65
11 changed files with 110 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
**/* @github/codeql-vscode-reviewers
**/variant-analysis/ @github/code-scanning-secexp-reviewers
**/databases/ @github/code-scanning-secexp-reviewers
**/data-extensions-editor/ @github/code-scanning-secexp-reviewers

View File

@@ -703,6 +703,10 @@
"title": "CodeQL: Go to QL Code",
"enablement": "codeql.hasQLSource"
},
{
"command": "codeQL.openDataExtensionsEditor",
"title": "CodeQL: Open Data Extensions Editor"
},
{
"command": "codeQL.mockGitHubApiServer.startRecording",
"title": "CodeQL: Mock GitHub API Server: Start Scenario Recording"
@@ -1086,6 +1090,10 @@
"command": "codeQL.viewCfgContextEditor",
"when": "false"
},
{
"command": "codeQL.openDataExtensionsEditor",
"when": "config.codeQL.canary && config.codeQL.dataExtensions.editor"
},
{
"command": "codeQLVariantAnalysisRepositories.openConfigFile",
"when": "false"

View File

@@ -241,6 +241,10 @@ export type PackagingCommands = {
"codeQL.downloadPacks": () => Promise<void>;
};
export type DataExtensionsEditorCommands = {
"codeQL.openDataExtensionsEditor": () => Promise<void>;
};
export type EvalLogViewerCommands = {
"codeQLEvalLogViewer.clear": () => Promise<void>;
};
@@ -273,6 +277,7 @@ export type AllExtensionCommands = BaseCommands &
AstCfgCommands &
AstViewerCommands &
PackagingCommands &
DataExtensionsEditorCommands &
EvalLogViewerCommands &
SummaryLanguageSupportCommands &
Partial<TestUICommands> &

View File

@@ -0,0 +1,16 @@
import { ExtensionContext } from "vscode";
import { DataExtensionsEditorView } from "./data-extensions-editor-view";
import { DataExtensionsEditorCommands } from "../common/commands";
export class DataExtensionsEditorModule {
public constructor(private readonly ctx: ExtensionContext) {}
public getCommands(): DataExtensionsEditorCommands {
return {
"codeQL.openDataExtensionsEditor": async () => {
const view = new DataExtensionsEditorView(this.ctx);
await view.openView();
},
};
}
}

View File

@@ -0,0 +1,53 @@
import { ExtensionContext, ViewColumn } from "vscode";
import { AbstractWebview, WebviewPanelConfig } from "../abstract-webview";
import {
FromDataExtensionsEditorMessage,
ToDataExtensionsEditorMessage,
} from "../pure/interface-types";
export class DataExtensionsEditorView extends AbstractWebview<
ToDataExtensionsEditorMessage,
FromDataExtensionsEditorMessage
> {
public constructor(ctx: ExtensionContext) {
super(ctx);
}
public async openView() {
const panel = await this.getPanel();
panel.reveal(undefined, true);
await this.waitForPanelLoaded();
}
protected async getPanelConfig(): Promise<WebviewPanelConfig> {
return {
viewId: "data-extensions-editor",
title: "Data Extensions Editor",
viewColumn: ViewColumn.Active,
preserveFocus: true,
view: "data-extensions-editor",
};
}
protected onPanelDispose(): void {
// Nothing to do here
}
protected async onMessage(
msg: FromDataExtensionsEditorMessage,
): Promise<void> {
switch (msg.t) {
case "viewLoaded":
await this.onWebViewLoaded();
break;
default:
throw new Error("Unexpected message type");
}
}
protected async onWebViewLoaded() {
super.onWebViewLoaded();
}
}

View File

@@ -120,6 +120,7 @@ import { getAstCfgCommands } from "./ast-cfg-commands";
import { getQueryEditorCommands } from "./query-editor";
import { App } from "./common/app";
import { registerCommandWithErrorHandling } from "./common/vscode/commands";
import { DataExtensionsEditorModule } from "./data-extensions-editor/data-extensions-editor-module";
/**
* extension.ts
@@ -860,6 +861,8 @@ async function activateWithInstalledDistribution(
);
ctx.subscriptions.push(localQueries);
const dataExtensionsEditorModule = new DataExtensionsEditorModule(ctx);
void extLogger.log("Initializing QLTest interface.");
const testExplorerExtension = extensions.getExtension<TestHub>(
testExplorerExtensionId,
@@ -922,6 +925,7 @@ async function activateWithInstalledDistribution(
...getPackagingCommands({
cliServer,
}),
...dataExtensionsEditorModule.getCommands(),
...evalLogViewer.getCommands(),
...summaryLanguageSupport.getCommands(),
...testUiCommands,

View File

@@ -113,7 +113,8 @@ export type WebviewView =
| "results"
| "compare"
| "variant-analysis"
| "data-flow-paths";
| "data-flow-paths"
| "data-extensions-editor";
export interface WebviewMessage {
t: string;

View File

@@ -478,3 +478,7 @@ export interface SetDataFlowPathsMessage {
export type ToDataFlowPathsMessage = SetDataFlowPathsMessage;
export type FromDataFlowPathsMessage = CommonFromViewMessages;
export type ToDataExtensionsEditorMessage = never;
export type FromDataExtensionsEditorMessage = ViewLoadedMsg;

View File

@@ -0,0 +1,5 @@
import * as React from "react";
export function DataExtensionsEditor(): JSX.Element {
return <div>Data extensions editor</div>;
}

View File

@@ -0,0 +1,9 @@
import * as React from "react";
import { WebviewDefinition } from "../webview-definition";
import { DataExtensionsEditor } from "./DataExtensionsEditor";
const definition: WebviewDefinition = {
component: <DataExtensionsEditor />,
};
export default definition;

View File

@@ -1,5 +1,6 @@
import {
FromCompareViewMessage,
FromDataExtensionsEditorMessage,
FromResultsViewMsg,
FromVariantAnalysisMessage,
VariantAnalysisState,
@@ -13,7 +14,8 @@ export interface VsCodeApi {
msg:
| FromResultsViewMsg
| FromCompareViewMessage
| FromVariantAnalysisMessage,
| FromVariantAnalysisMessage
| FromDataExtensionsEditorMessage,
): void;
/**