diff --git a/extensions/ql-vscode/src/common/interface-types.ts b/extensions/ql-vscode/src/common/interface-types.ts
index 2d8a07fe6..1aaab0634 100644
--- a/extensions/ql-vscode/src/common/interface-types.ts
+++ b/extensions/ql-vscode/src/common/interface-types.ts
@@ -597,9 +597,15 @@ export type FromModelEditorMessage =
| HideModeledMethodsMessage
| SetModeledMethodMessage;
+interface RevealInEditorMessage {
+ t: "revealInModelEditor";
+ method: Method;
+}
+
export type FromMethodModelingMessage =
| CommonFromViewMessages
- | SetModeledMethodMessage;
+ | SetModeledMethodMessage
+ | RevealInEditorMessage;
interface SetMethodMessage {
t: "setMethod";
diff --git a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts
index e87375dc4..e42539629 100644
--- a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts
+++ b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts
@@ -10,6 +10,7 @@ import { redactableError } from "../../common/errors";
import { Method } from "../method";
import { ModelingStore } from "../modeling-store";
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
+import { assertNever } from "../../common/helpers-pure";
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
ToMethodModelingMessage,
@@ -87,6 +88,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
);
break;
}
+ case "revealInModelEditor":
+ break;
+ default:
+ assertNever(msg);
}
}
diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx
index 018376955..0e1d16d43 100644
--- a/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx
+++ b/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx
@@ -7,6 +7,7 @@ import { MethodName } from "../model-editor/MethodName";
import { ModeledMethod } from "../../model-editor/modeled-method";
import { MethodModelingInputs } from "./MethodModelingInputs";
import { VSCodeTag } from "@vscode/webview-ui-toolkit/react";
+import { ReviewInEditorButton } from "./ReviewInEditorButton";
const Container = styled.div`
padding: 0.3rem;
@@ -64,6 +65,7 @@ export const MethodModeling = ({
modeledMethod={modeledMethod}
onChange={onChange}
/>
+
);
};
diff --git a/extensions/ql-vscode/src/view/method-modeling/ReviewInEditorButton.tsx b/extensions/ql-vscode/src/view/method-modeling/ReviewInEditorButton.tsx
new file mode 100644
index 000000000..a77c61146
--- /dev/null
+++ b/extensions/ql-vscode/src/view/method-modeling/ReviewInEditorButton.tsx
@@ -0,0 +1,25 @@
+import * as React from "react";
+import { useCallback } from "react";
+import { styled } from "styled-components";
+import { vscode } from "../vscode-api";
+import TextButton from "../common/TextButton";
+import { Method } from "../../model-editor/method";
+
+const Button = styled(TextButton)`
+ margin-top: 0.5rem;
+`;
+
+type Props = {
+ method: Method;
+};
+
+export const ReviewInEditorButton = ({ method }: Props) => {
+ const handleClick = useCallback(() => {
+ vscode.postMessage({
+ t: "revealInModelEditor",
+ method,
+ });
+ }, [method]);
+
+ return ;
+};
diff --git a/extensions/ql-vscode/src/view/vscode-api.ts b/extensions/ql-vscode/src/view/vscode-api.ts
index ae75480ce..1b2e3fb6f 100644
--- a/extensions/ql-vscode/src/view/vscode-api.ts
+++ b/extensions/ql-vscode/src/view/vscode-api.ts
@@ -1,5 +1,6 @@
import {
FromCompareViewMessage,
+ FromMethodModelingMessage,
FromModelEditorMessage,
FromResultsViewMsg,
FromVariantAnalysisMessage,
@@ -15,7 +16,8 @@ export interface VsCodeApi {
| FromResultsViewMsg
| FromCompareViewMessage
| FromVariantAnalysisMessage
- | FromModelEditorMessage,
+ | FromModelEditorMessage
+ | FromMethodModelingMessage,
): void;
/**