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:
@@ -1,3 +1,4 @@
|
|||||||
**/* @github/codeql-vscode-reviewers
|
**/* @github/codeql-vscode-reviewers
|
||||||
**/variant-analysis/ @github/code-scanning-secexp-reviewers
|
**/variant-analysis/ @github/code-scanning-secexp-reviewers
|
||||||
**/databases/ @github/code-scanning-secexp-reviewers
|
**/databases/ @github/code-scanning-secexp-reviewers
|
||||||
|
**/data-extensions-editor/ @github/code-scanning-secexp-reviewers
|
||||||
|
|||||||
@@ -703,6 +703,10 @@
|
|||||||
"title": "CodeQL: Go to QL Code",
|
"title": "CodeQL: Go to QL Code",
|
||||||
"enablement": "codeql.hasQLSource"
|
"enablement": "codeql.hasQLSource"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"command": "codeQL.openDataExtensionsEditor",
|
||||||
|
"title": "CodeQL: Open Data Extensions Editor"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"command": "codeQL.mockGitHubApiServer.startRecording",
|
"command": "codeQL.mockGitHubApiServer.startRecording",
|
||||||
"title": "CodeQL: Mock GitHub API Server: Start Scenario Recording"
|
"title": "CodeQL: Mock GitHub API Server: Start Scenario Recording"
|
||||||
@@ -1086,6 +1090,10 @@
|
|||||||
"command": "codeQL.viewCfgContextEditor",
|
"command": "codeQL.viewCfgContextEditor",
|
||||||
"when": "false"
|
"when": "false"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"command": "codeQL.openDataExtensionsEditor",
|
||||||
|
"when": "config.codeQL.canary && config.codeQL.dataExtensions.editor"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"command": "codeQLVariantAnalysisRepositories.openConfigFile",
|
"command": "codeQLVariantAnalysisRepositories.openConfigFile",
|
||||||
"when": "false"
|
"when": "false"
|
||||||
|
|||||||
@@ -241,6 +241,10 @@ export type PackagingCommands = {
|
|||||||
"codeQL.downloadPacks": () => Promise<void>;
|
"codeQL.downloadPacks": () => Promise<void>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type DataExtensionsEditorCommands = {
|
||||||
|
"codeQL.openDataExtensionsEditor": () => Promise<void>;
|
||||||
|
};
|
||||||
|
|
||||||
export type EvalLogViewerCommands = {
|
export type EvalLogViewerCommands = {
|
||||||
"codeQLEvalLogViewer.clear": () => Promise<void>;
|
"codeQLEvalLogViewer.clear": () => Promise<void>;
|
||||||
};
|
};
|
||||||
@@ -273,6 +277,7 @@ export type AllExtensionCommands = BaseCommands &
|
|||||||
AstCfgCommands &
|
AstCfgCommands &
|
||||||
AstViewerCommands &
|
AstViewerCommands &
|
||||||
PackagingCommands &
|
PackagingCommands &
|
||||||
|
DataExtensionsEditorCommands &
|
||||||
EvalLogViewerCommands &
|
EvalLogViewerCommands &
|
||||||
SummaryLanguageSupportCommands &
|
SummaryLanguageSupportCommands &
|
||||||
Partial<TestUICommands> &
|
Partial<TestUICommands> &
|
||||||
|
|||||||
@@ -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();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -120,6 +120,7 @@ import { getAstCfgCommands } from "./ast-cfg-commands";
|
|||||||
import { getQueryEditorCommands } from "./query-editor";
|
import { getQueryEditorCommands } from "./query-editor";
|
||||||
import { App } from "./common/app";
|
import { App } from "./common/app";
|
||||||
import { registerCommandWithErrorHandling } from "./common/vscode/commands";
|
import { registerCommandWithErrorHandling } from "./common/vscode/commands";
|
||||||
|
import { DataExtensionsEditorModule } from "./data-extensions-editor/data-extensions-editor-module";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* extension.ts
|
* extension.ts
|
||||||
@@ -860,6 +861,8 @@ async function activateWithInstalledDistribution(
|
|||||||
);
|
);
|
||||||
ctx.subscriptions.push(localQueries);
|
ctx.subscriptions.push(localQueries);
|
||||||
|
|
||||||
|
const dataExtensionsEditorModule = new DataExtensionsEditorModule(ctx);
|
||||||
|
|
||||||
void extLogger.log("Initializing QLTest interface.");
|
void extLogger.log("Initializing QLTest interface.");
|
||||||
const testExplorerExtension = extensions.getExtension<TestHub>(
|
const testExplorerExtension = extensions.getExtension<TestHub>(
|
||||||
testExplorerExtensionId,
|
testExplorerExtensionId,
|
||||||
@@ -922,6 +925,7 @@ async function activateWithInstalledDistribution(
|
|||||||
...getPackagingCommands({
|
...getPackagingCommands({
|
||||||
cliServer,
|
cliServer,
|
||||||
}),
|
}),
|
||||||
|
...dataExtensionsEditorModule.getCommands(),
|
||||||
...evalLogViewer.getCommands(),
|
...evalLogViewer.getCommands(),
|
||||||
...summaryLanguageSupport.getCommands(),
|
...summaryLanguageSupport.getCommands(),
|
||||||
...testUiCommands,
|
...testUiCommands,
|
||||||
|
|||||||
@@ -113,7 +113,8 @@ export type WebviewView =
|
|||||||
| "results"
|
| "results"
|
||||||
| "compare"
|
| "compare"
|
||||||
| "variant-analysis"
|
| "variant-analysis"
|
||||||
| "data-flow-paths";
|
| "data-flow-paths"
|
||||||
|
| "data-extensions-editor";
|
||||||
|
|
||||||
export interface WebviewMessage {
|
export interface WebviewMessage {
|
||||||
t: string;
|
t: string;
|
||||||
|
|||||||
@@ -478,3 +478,7 @@ export interface SetDataFlowPathsMessage {
|
|||||||
export type ToDataFlowPathsMessage = SetDataFlowPathsMessage;
|
export type ToDataFlowPathsMessage = SetDataFlowPathsMessage;
|
||||||
|
|
||||||
export type FromDataFlowPathsMessage = CommonFromViewMessages;
|
export type FromDataFlowPathsMessage = CommonFromViewMessages;
|
||||||
|
|
||||||
|
export type ToDataExtensionsEditorMessage = never;
|
||||||
|
|
||||||
|
export type FromDataExtensionsEditorMessage = ViewLoadedMsg;
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
export function DataExtensionsEditor(): JSX.Element {
|
||||||
|
return <div>Data extensions editor</div>;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
FromCompareViewMessage,
|
FromCompareViewMessage,
|
||||||
|
FromDataExtensionsEditorMessage,
|
||||||
FromResultsViewMsg,
|
FromResultsViewMsg,
|
||||||
FromVariantAnalysisMessage,
|
FromVariantAnalysisMessage,
|
||||||
VariantAnalysisState,
|
VariantAnalysisState,
|
||||||
@@ -13,7 +14,8 @@ export interface VsCodeApi {
|
|||||||
msg:
|
msg:
|
||||||
| FromResultsViewMsg
|
| FromResultsViewMsg
|
||||||
| FromCompareViewMessage
|
| FromCompareViewMessage
|
||||||
| FromVariantAnalysisMessage,
|
| FromVariantAnalysisMessage
|
||||||
|
| FromDataExtensionsEditorMessage,
|
||||||
): void;
|
): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user