Skip to content

Commit a502e52

Browse files
authored
Add "view" button in model alerts view (#3514)
1 parent 5d45a11 commit a502e52

3 files changed

Lines changed: 34 additions & 3 deletions

File tree

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -755,4 +755,5 @@ export type FromModelAlertsMessage =
755755
| CommonFromViewMessages
756756
| OpenModelPackMessage
757757
| OpenActionsLogsMessage
758-
| StopEvaluationRunMessage;
758+
| StopEvaluationRunMessage
759+
| RevealInEditorMessage;

extensions/ql-vscode/src/model-editor/model-alerts/model-alerts-view.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import type {
2020
VariantAnalysisScannedRepositoryResult,
2121
} from "../../variant-analysis/shared/variant-analysis";
2222
import type { AppEvent, AppEventEmitter } from "../../common/events";
23+
import type { MethodSignature } from "../method";
2324

2425
export class ModelAlertsView extends AbstractWebview<
2526
ToModelAlertsMessage,
@@ -102,6 +103,9 @@ export class ModelAlertsView extends AbstractWebview<
102103
case "stopEvaluationRun":
103104
await this.stopEvaluationRun();
104105
break;
106+
case "revealInModelEditor":
107+
await this.revealInModelEditor(msg.method);
108+
break;
105109
default:
106110
assertNever(msg);
107111
}
@@ -180,4 +184,15 @@ export class ModelAlertsView extends AbstractWebview<
180184
private async stopEvaluationRun() {
181185
this.onEvaluationRunStopClickedEventEmitter.fire();
182186
}
187+
188+
private async revealInModelEditor(method: MethodSignature): Promise<void> {
189+
if (!this.dbItem) {
190+
return;
191+
}
192+
193+
this.modelingEvents.fireRevealInModelEditorEvent(
194+
this.dbItem.databaseUri.toString(),
195+
method,
196+
);
197+
}
183198
}

extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { styled } from "styled-components";
22
import type { ModelAlerts } from "../../model-editor/model-alerts/model-alerts";
33
import { Codicon } from "../common";
4-
import { useState } from "react";
5-
import { VSCodeBadge } from "@vscode/webview-ui-toolkit/react";
4+
import { useCallback, useState } from "react";
5+
import { VSCodeBadge, VSCodeLink } from "@vscode/webview-ui-toolkit/react";
66
import { formatDecimal } from "../../common/number";
77
import AnalysisAlertResult from "../variant-analysis/AnalysisAlertResult";
88
import { MethodName } from "../model-editor/MethodName";
99
import { ModelDetails } from "./ModelDetails";
10+
import { vscode } from "../vscode-api";
1011

1112
// This will ensure that these icons have a className which we can use in the TitleContainer
1213
const ExpandCollapseCodicon = styled(Codicon)``;
@@ -36,6 +37,11 @@ const ModelTypeText = styled.span`
3637
color: var(--vscode-descriptionForeground);
3738
`;
3839

40+
const ViewLink = styled(VSCodeLink)`
41+
white-space: nowrap;
42+
padding: 0 0 0.25em 1em;
43+
`;
44+
3945
const ModelDetailsContainer = styled.div`
4046
padding-top: 10px;
4147
`;
@@ -59,6 +65,14 @@ export const ModelAlertsResults = ({
5965
modelAlerts,
6066
}: Props): React.JSX.Element => {
6167
const [isExpanded, setExpanded] = useState(true);
68+
const viewInModelEditor = useCallback(
69+
() =>
70+
vscode.postMessage({
71+
t: "revealInModelEditor",
72+
method: modelAlerts.model,
73+
}),
74+
[modelAlerts.model],
75+
);
6276
return (
6377
<div>
6478
<TitleContainer onClick={() => setExpanded(!isExpanded)}>
@@ -71,6 +85,7 @@ export const ModelAlertsResults = ({
7185
<VSCodeBadge>{formatDecimal(modelAlerts.alerts.length)}</VSCodeBadge>
7286
<MethodName {...modelAlerts.model}></MethodName>
7387
<ModelTypeText>{modelAlerts.model.type}</ModelTypeText>
88+
<ViewLink onClick={viewInModelEditor}>View</ViewLink>
7489
</TitleContainer>
7590
{isExpanded && (
7691
<>

0 commit comments

Comments
 (0)