diff --git a/extensions/ql-vscode/src/stories/common/Alert.stories.tsx b/extensions/ql-vscode/src/stories/common/Alert.stories.tsx
index f82eaa17100..1a5db4f14f6 100644
--- a/extensions/ql-vscode/src/stories/common/Alert.stories.tsx
+++ b/extensions/ql-vscode/src/stories/common/Alert.stories.tsx
@@ -1,8 +1,9 @@
import type { Meta, StoryFn } from "@storybook/react";
-import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react";
+import { VSCodeButton } from "@vscode/webview-ui-toolkit/react";
import { VariantAnalysisContainer } from "../../view/variant-analysis/VariantAnalysisContainer";
import { Alert } from "../../view/common";
+import { Link } from "../../view/common/Link";
export default {
title: "Alert",
@@ -24,7 +25,7 @@ Warning.args = {
title: "This query found a warning",
message: (
<>
- Warning content with links
+ Warning content with links
>
),
};
@@ -50,7 +51,7 @@ Error.args = {
title: "This query found an error",
message: (
<>
- Error content with links
+ Error content with links
>
),
};
@@ -70,8 +71,7 @@ ErrorExample.args = {
<>
Request to
https://api.github.com/repos/octodemo/Hello-World/code-scanning/codeql/queries
- failed. View actions logs and try running this
- query again.
+ failed. View actions logs and try running this query again.
>
),
};
diff --git a/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx b/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx
index 301107afcc5..520d26a3d83 100644
--- a/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx
+++ b/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx
@@ -1,5 +1,5 @@
import { styled } from "styled-components";
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
+import { Link } from "../Link";
import type {
AnalysisMessage,
@@ -8,7 +8,7 @@ import type {
} from "../../../variant-analysis/shared/analysis-result";
import { vscode } from "../../vscode-api";
-const ShowPathsLink = styled(VSCodeLink)`
+const ShowPathsLink = styled(Link)`
cursor: pointer;
`;
diff --git a/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx b/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx
index 6e209a340d4..09ec16d4288 100644
--- a/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx
+++ b/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx
@@ -1,5 +1,5 @@
import { styled } from "styled-components";
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
+import { Link } from "../Link";
import type {
AnalysisMessage,
@@ -39,7 +39,7 @@ const CodeSnippetMessageContainer = styled.div
padding-bottom: 1em;
`;
-const LocationLink = styled(VSCodeLink)`
+const LocationLink = styled(Link)`
font-family: var(--vscode-editor-font-family);
`;
diff --git a/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx b/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx
index c6fdb624156..b97c7d79c0c 100644
--- a/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx
+++ b/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx
@@ -1,5 +1,4 @@
import { styled } from "styled-components";
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
import type {
AnalysisMessage,
@@ -12,6 +11,7 @@ import { createRemoteFileRef } from "../../../common/location-link-utils";
import { CodeSnippetMessage } from "./CodeSnippetMessage";
import { CodeSnippetLine } from "./CodeSnippetLine";
import { sendTelemetry } from "../telemetry";
+import { Link } from "../Link";
const borderColor = "var(--vscode-editor-snippetFinalTabstopHighlightBorder)";
@@ -72,12 +72,9 @@ export const FileCodeSnippet = ({
return (
-
+
{fileLink.filePath}
-
+
{message && severity && (
@@ -93,12 +90,9 @@ export const FileCodeSnippet = ({
return (
-
+
{fileLink.filePath}
-
+
{code.map((line, index) => (
diff --git a/extensions/ql-vscode/src/view/common/Link.tsx b/extensions/ql-vscode/src/view/common/Link.tsx
new file mode 100644
index 00000000000..9fa73906433
--- /dev/null
+++ b/extensions/ql-vscode/src/view/common/Link.tsx
@@ -0,0 +1,25 @@
+import { styled } from "styled-components";
+
+export const Link = styled.a`
+ background: transparent;
+ box-sizing: border-box;
+ color: var(--link-foreground);
+ cursor: pointer;
+ fill: currentcolor;
+ font-family: var(--font-family);
+ font-size: var(--type-ramp-base-font-size);
+ line-height: var(--type-ramp-base-line-height);
+ outline: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ &:focus-visible {
+ border: 1px solid var(--vscode-focusBorder);
+ }
+
+ &:focus {
+ border: 1px solid var(--vscode-focusBorder);
+ }
+`;
diff --git a/extensions/ql-vscode/src/view/common/LinkIconButton.tsx b/extensions/ql-vscode/src/view/common/LinkIconButton.tsx
index 8a8e4bbeba5..f282fb646f3 100644
--- a/extensions/ql-vscode/src/view/common/LinkIconButton.tsx
+++ b/extensions/ql-vscode/src/view/common/LinkIconButton.tsx
@@ -1,7 +1,7 @@
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
import { styled } from "styled-components";
+import { Link } from "./Link";
-export const LinkIconButton = styled(VSCodeLink)`
+export const LinkIconButton = styled(Link)`
.codicon {
vertical-align: text-bottom;
}
diff --git a/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx b/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx
index 51ea31ee88d..8b27896d333 100644
--- a/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx
+++ b/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx
@@ -1,7 +1,7 @@
import { styled } from "styled-components";
import type { ModelAlerts } from "../../model-editor/model-alerts/model-alerts";
import { Codicon } from "../common";
-import { VSCodeBadge, VSCodeLink } from "@vscode/webview-ui-toolkit/react";
+import { VSCodeBadge } from "@vscode/webview-ui-toolkit/react";
import { useCallback, useEffect, useRef, useState } from "react";
import { formatDecimal } from "../../common/number";
import AnalysisAlertResult from "../variant-analysis/AnalysisAlertResult";
@@ -10,6 +10,7 @@ import { ModelDetails } from "./ModelDetails";
import { vscode } from "../vscode-api";
import { createModeledMethodKey } from "../../model-editor/modeled-method";
import type { ModeledMethod } from "../../model-editor/modeled-method";
+import { Link } from "../common/Link";
// This will ensure that these icons have a className which we can use in the TitleContainer
const ExpandCollapseCodicon = styled(Codicon)``;
@@ -39,7 +40,7 @@ const ModelTypeText = styled.span`
color: var(--vscode-descriptionForeground);
`;
-const ViewLink = styled(VSCodeLink)`
+const ViewLink = styled(Link)`
white-space: nowrap;
padding: 0 0 0.25em 1em;
`;
diff --git a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx
index 46b7e7bee78..22dc54d2a48 100644
--- a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx
+++ b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx
@@ -1,8 +1,4 @@
-import {
- VSCodeBadge,
- VSCodeButton,
- VSCodeLink,
-} from "@vscode/webview-ui-toolkit/react";
+import { VSCodeBadge, VSCodeButton } from "@vscode/webview-ui-toolkit/react";
import {
forwardRef,
useCallback,
@@ -13,6 +9,7 @@ import {
} from "react";
import { styled } from "styled-components";
import { vscode } from "../vscode-api";
+import { Link } from "../common/Link";
import type { Method } from "../../model-editor/method";
import type { ModeledMethod } from "../../model-editor/modeled-method";
@@ -59,7 +56,7 @@ const UsagesButton = styled(VSCodeBadge)`
cursor: pointer;
`;
-const ViewLink = styled(VSCodeLink)`
+const ViewLink = styled(Link)`
white-space: nowrap;
`;
diff --git a/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx b/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx
index de87fc663eb..95b94aa5411 100644
--- a/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx
+++ b/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx
@@ -1,11 +1,12 @@
import { styled } from "styled-components";
-import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react";
+import { VSCodeButton } from "@vscode/webview-ui-toolkit/react";
import type { ModeledMethod } from "../../model-editor/modeled-method";
import type { ModelEditorViewState } from "../../model-editor/shared/view-state";
import type { ModelEvaluationRunState } from "../../model-editor/shared/model-evaluation-run-state";
import { modelEvaluationRunIsRunning } from "../../model-editor/shared/model-evaluation-run-state";
import { ModelEditorProgressRing } from "./ModelEditorProgressRing";
import { LinkIconButton } from "../common/LinkIconButton";
+import { Link } from "../common/Link";
export type Props = {
viewState: ModelEditorViewState;
@@ -17,7 +18,7 @@ export type Props = {
evaluationRun: ModelEvaluationRunState | undefined;
};
-const RunLink = styled(VSCodeLink)`
+const RunLink = styled(Link)`
display: flex;
align-items: center;
`;
diff --git a/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx b/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx
index d6d07400584..1b6c631dbb7 100644
--- a/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx
+++ b/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx
@@ -1,8 +1,8 @@
import type { ReactNode } from "react";
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
import { Alert } from "../common";
import { vscode } from "../vscode-api";
import { VariantAnalysisFailureReason } from "../../variant-analysis/shared/variant-analysis";
+import { Link } from "../common/Link";
type Props = {
failureReason: VariantAnalysisFailureReason;
@@ -33,8 +33,8 @@ const getMessage = (failureReason: VariantAnalysisFailureReason): ReactNode => {
return (
<>
The GitHub Actions workflow run has failed.{" "}
- View actions logs and try
- running this query again.
+ View actions logs and try running this
+ query again.
>
);
case VariantAnalysisFailureReason.InternalError:
diff --git a/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx b/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx
index 0d7f589043e..7382d46f04b 100644
--- a/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx
+++ b/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx
@@ -1,10 +1,9 @@
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
-
import type { CellValue } from "../../common/raw-result-types";
import { sendTelemetry } from "../common/telemetry";
import { convertNonPrintableChars } from "../../common/text-utils";
import { tryGetRemoteLocation } from "../../common/bqrs-utils";
import { RawNumberValue } from "../common/RawNumberValue";
+import { Link } from "../common/Link";
type CellProps = {
value: CellValue;
@@ -35,9 +34,9 @@ export const RawResultCell = ({
const safeLabel = convertNonPrintableChars(value.value.label);
if (url) {
return (
-
+
{safeLabel}
-
+
);
} else {
return {safeLabel};
diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx
index 3969fd7951e..5f937b74682 100644
--- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx
+++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx
@@ -1,7 +1,7 @@
import { styled } from "styled-components";
-import { VSCodeLink } from "@vscode/webview-ui-toolkit/react";
import { formatDate } from "../../common/date";
import { VariantAnalysisStatus } from "../../variant-analysis/shared/variant-analysis";
+import { Link } from "../common/Link";
export type VariantAnalysisStatusStatsProps = {
variantAnalysisStatus: VariantAnalysisStatus;
@@ -37,7 +37,7 @@ export const VariantAnalysisStatusStats = ({
{completedAt !== undefined ? formatDate(completedAt) : "-"}
)}
{onViewLogsClick && (
- View actions logs
+ View actions logs
)}
);