From a3f9518b7874f240f7fdcc3ad9479359b0a47577 Mon Sep 17 00:00:00 2001 From: Nora Date: Wed, 24 Jan 2024 16:45:02 +0000 Subject: [PATCH 1/8] Set up deprecation plugin --- extensions/ql-vscode/.eslintrc.js | 1 + extensions/ql-vscode/package-lock.json | 16 ++++++++++++++++ extensions/ql-vscode/package.json | 1 + 3 files changed, 18 insertions(+) diff --git a/extensions/ql-vscode/.eslintrc.js b/extensions/ql-vscode/.eslintrc.js index 5621731a11a..6b28409c49a 100644 --- a/extensions/ql-vscode/.eslintrc.js +++ b/extensions/ql-vscode/.eslintrc.js @@ -28,6 +28,7 @@ const baseConfig = { "plugin:@typescript-eslint/recommended", "plugin:import/recommended", "plugin:import/typescript", + "plugin:deprecation/recommended", ], rules: { "@typescript-eslint/await-thenable": "error", diff --git a/extensions/ql-vscode/package-lock.json b/extensions/ql-vscode/package-lock.json index 71375505ee6..84aaae39a0c 100644 --- a/extensions/ql-vscode/package-lock.json +++ b/extensions/ql-vscode/package-lock.json @@ -106,6 +106,7 @@ "eslint": "^8.56.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-etc": "^2.0.2", "eslint-plugin-github": "^4.4.1", "eslint-plugin-import": "^2.29.1", @@ -15664,6 +15665,21 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-deprecation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz", + "integrity": "sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^6.0.0", + "tslib": "^2.3.1", + "tsutils": "^3.21.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "^4.2.4 || ^5.0.0" + } + }, "node_modules/eslint-plugin-escompat": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index 1c464452638..7fc007c0158 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -2024,6 +2024,7 @@ "eslint": "^8.56.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-etc": "^2.0.2", "eslint-plugin-github": "^4.4.1", "eslint-plugin-import": "^2.29.1", From deab3e617558cc42c5b6fbe93c74a13f2eaba6c1 Mon Sep 17 00:00:00 2001 From: Nora Date: Wed, 24 Jan 2024 16:53:22 +0000 Subject: [PATCH 2/8] Update simple deprecations --- extensions/ql-vscode/src/view/compare/Compare.tsx | 2 +- .../src/view/data-flow-paths/DataFlowPaths.tsx | 2 +- .../src/view/data-flow-paths/DataFlowPathsView.tsx | 2 +- .../src/view/method-modeling/MethodModeling.tsx | 2 +- .../src/view/method-modeling/MethodModelingInputs.tsx | 2 +- .../src/view/method-modeling/MethodModelingView.tsx | 4 +++- .../ql-vscode/src/view/model-editor/MethodName.tsx | 2 +- .../ql-vscode/src/view/model-editor/ModelEditor.tsx | 2 +- .../src/view/model-editor/ModelInputDropdown.tsx | 2 +- .../src/view/model-editor/ModelOutputDropdown.tsx | 2 +- .../src/view/model-editor/ModelTypeDropdown.tsx | 2 +- .../src/view/model-editor/ModelTypeTextbox.tsx | 2 +- .../ql-vscode/src/view/results/AlertTableNoResults.tsx | 2 +- .../src/view/results/AlertTableTruncatedMessage.tsx | 4 +++- .../src/view/results/EmptyQueryResultsMessage.tsx | 2 +- .../src/view/results/ProblemsViewCheckbox.tsx | 2 +- .../ql-vscode/src/view/results/RawTableValue.tsx | 2 +- extensions/ql-vscode/src/view/results/ResultCount.tsx | 2 +- .../src/view/results/locations/ClickableLocation.tsx | 2 +- .../ql-vscode/src/view/results/locations/Location.tsx | 2 +- .../src/view/variant-analysis/VariantAnalysis.tsx | 2 +- extensions/ql-vscode/src/view/webview-definition.ts | 2 +- .../distribution/releases-api-consumer.test.ts | 4 ++-- .../variant-analysis-results-manager.test.ts | 2 +- .../local-queries/local-databases.test.ts | 6 ++---- .../databases/github-databases/api.test.ts | 10 +++++----- .../no-workspace/local-queries/query-resolver.test.ts | 2 +- 27 files changed, 37 insertions(+), 35 deletions(-) diff --git a/extensions/ql-vscode/src/view/compare/Compare.tsx b/extensions/ql-vscode/src/view/compare/Compare.tsx index 65dc7d0db88..5b2b5a51d52 100644 --- a/extensions/ql-vscode/src/view/compare/Compare.tsx +++ b/extensions/ql-vscode/src/view/compare/Compare.tsx @@ -25,7 +25,7 @@ const Message = styled.div` padding: 1.5rem; `; -export function Compare(_: Record): JSX.Element { +export function Compare(_: Record): React.JSX.Element { const [queryInfo, setQueryInfo] = useState(null); const [comparison, setComparison] = useState( diff --git a/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPaths.tsx b/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPaths.tsx index 4b43b1573fd..d7846edcf86 100644 --- a/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPaths.tsx +++ b/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPaths.tsx @@ -32,7 +32,7 @@ export const DataFlowPaths = ({ dataFlowPaths, }: { dataFlowPaths: DataFlowPathsDomainModel; -}): JSX.Element => { +}): React.JSX.Element => { const [selectedCodeFlow, setSelectedCodeFlow] = useState( dataFlowPaths.codeFlows[0], ); diff --git a/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx b/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx index 798577a3b3b..9267b81f053 100644 --- a/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx +++ b/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx @@ -9,7 +9,7 @@ export type DataFlowPathsViewProps = { export function DataFlowPathsView({ dataFlowPaths: initialDataFlowPaths, -}: DataFlowPathsViewProps): JSX.Element { +}: DataFlowPathsViewProps): React.JSX.Element { const [dataFlowPaths, setDataFlowPaths] = useState< DataFlowPathsDomainModel | undefined >(initialDataFlowPaths); diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx index cf0048e6828..47872ee597e 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx @@ -64,7 +64,7 @@ export const MethodModeling = ({ method, isModelingInProgress, onChange, -}: MethodModelingProps): JSX.Element => { +}: MethodModelingProps): React.JSX.Element => { return ( diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx index bb9d1c92060..78d96f3919f 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx @@ -39,7 +39,7 @@ export const MethodModelingInputs = ({ modelingStatus, isModelingInProgress, onChange, -}: MethodModelingInputsProps): JSX.Element => { +}: MethodModelingInputsProps): React.JSX.Element => { const inputProps = { language, method, diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx index a12d257a787..fd9742c7bca 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx @@ -16,7 +16,9 @@ type Props = { initialViewState?: MethodModelingPanelViewState; }; -export function MethodModelingView({ initialViewState }: Props): JSX.Element { +export function MethodModelingView({ + initialViewState, +}: Props): React.JSX.Element { const [viewState, setViewState] = useState< MethodModelingPanelViewState | undefined >(initialViewState); diff --git a/extensions/ql-vscode/src/view/model-editor/MethodName.tsx b/extensions/ql-vscode/src/view/model-editor/MethodName.tsx index 7e239d9c253..bf189239472 100644 --- a/extensions/ql-vscode/src/view/model-editor/MethodName.tsx +++ b/extensions/ql-vscode/src/view/model-editor/MethodName.tsx @@ -22,7 +22,7 @@ const TypeMethodName = (method: Method) => { ); }; -export const MethodName = (method: Method): JSX.Element => { +export const MethodName = (method: Method): React.JSX.Element => { return ( <Name> {method.packageName && <>{method.packageName}.</>} diff --git a/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx b/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx index b59f5e9ccfa..c0d868f5476 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx @@ -85,7 +85,7 @@ export function ModelEditor({ initialMethods = [], initialModeledMethods = {}, initialHideModeledMethods = INITIAL_HIDE_MODELED_METHODS_VALUE, -}: Props): JSX.Element { +}: Props): React.JSX.Element { const [viewState, setViewState] = useState<ModelEditorViewState | undefined>( initialViewState, ); diff --git a/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx index e50b5f56651..999e651afcd 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx @@ -27,7 +27,7 @@ export const ModelInputDropdown = ({ modeledMethod, modelingStatus, onChange, -}: Props): JSX.Element => { +}: Props): React.JSX.Element => { const options = useMemo(() => { const modelsAsDataLanguage = getModelsAsDataLanguage(language); diff --git a/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx index 5c505390306..a03d7204284 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx @@ -27,7 +27,7 @@ export const ModelOutputDropdown = ({ modeledMethod, modelingStatus, onChange, -}: Props): JSX.Element => { +}: Props): React.JSX.Element => { const options = useMemo(() => { const modelsAsDataLanguage = getModelsAsDataLanguage(language); diff --git a/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx index 98b9bf7c152..7842a9c2360 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx @@ -31,7 +31,7 @@ export const ModelTypeDropdown = ({ modeledMethod, modelingStatus, onChange, -}: Props): JSX.Element => { +}: Props): React.JSX.Element => { const options = useMemo(() => { const baseOptions: Array<{ value: ModeledMethodType; label: string }> = [ { value: "none", label: "Unmodeled" }, diff --git a/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx b/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx index 13eb46ee65d..d52ab1306bf 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx @@ -24,7 +24,7 @@ export const ModelTypeTextbox = ({ typeInfo, onChange, ...props -}: Props): JSX.Element => { +}: Props): React.JSX.Element => { const [value, setValue] = useState<string | undefined>( modeledMethod[typeInfo], ); diff --git a/extensions/ql-vscode/src/view/results/AlertTableNoResults.tsx b/extensions/ql-vscode/src/view/results/AlertTableNoResults.tsx index 51bd4c5ff5d..5e10849cdff 100644 --- a/extensions/ql-vscode/src/view/results/AlertTableNoResults.tsx +++ b/extensions/ql-vscode/src/view/results/AlertTableNoResults.tsx @@ -6,7 +6,7 @@ interface Props { showRawResults: () => void; } -export function AlertTableNoResults(props: Props): JSX.Element { +export function AlertTableNoResults(props: Props): React.JSX.Element { if (props.nonemptyRawResults) { return ( <span> diff --git a/extensions/ql-vscode/src/view/results/AlertTableTruncatedMessage.tsx b/extensions/ql-vscode/src/view/results/AlertTableTruncatedMessage.tsx index c2c1565ea9f..865ca8bd360 100644 --- a/extensions/ql-vscode/src/view/results/AlertTableTruncatedMessage.tsx +++ b/extensions/ql-vscode/src/view/results/AlertTableTruncatedMessage.tsx @@ -2,7 +2,9 @@ interface Props { numTruncatedResults: number; } -export function AlertTableTruncatedMessage(props: Props): JSX.Element | null { +export function AlertTableTruncatedMessage( + props: Props, +): React.JSX.Element | null { if (props.numTruncatedResults === 0) { return null; } diff --git a/extensions/ql-vscode/src/view/results/EmptyQueryResultsMessage.tsx b/extensions/ql-vscode/src/view/results/EmptyQueryResultsMessage.tsx index 93107ce411b..da58e2d3fcc 100644 --- a/extensions/ql-vscode/src/view/results/EmptyQueryResultsMessage.tsx +++ b/extensions/ql-vscode/src/view/results/EmptyQueryResultsMessage.tsx @@ -18,7 +18,7 @@ const Container = styled.span` text-align: center; `; -export function EmptyQueryResultsMessage(): JSX.Element { +export function EmptyQueryResultsMessage(): React.JSX.Element { return ( <Root> <Container> diff --git a/extensions/ql-vscode/src/view/results/ProblemsViewCheckbox.tsx b/extensions/ql-vscode/src/view/results/ProblemsViewCheckbox.tsx index de0e0f2f91e..59a1a2bab7a 100644 --- a/extensions/ql-vscode/src/view/results/ProblemsViewCheckbox.tsx +++ b/extensions/ql-vscode/src/view/results/ProblemsViewCheckbox.tsx @@ -10,7 +10,7 @@ interface Props { handleCheckboxChanged: (event: React.ChangeEvent<HTMLInputElement>) => void; } -export function ProblemsViewCheckbox(props: Props): JSX.Element | null { +export function ProblemsViewCheckbox(props: Props): React.JSX.Element | null { const { selectedTable, problemsViewSelected, handleCheckboxChanged } = props; if (selectedTable !== ALERTS_TABLE_NAME) { diff --git a/extensions/ql-vscode/src/view/results/RawTableValue.tsx b/extensions/ql-vscode/src/view/results/RawTableValue.tsx index e9afdfe4250..7036b415de6 100644 --- a/extensions/ql-vscode/src/view/results/RawTableValue.tsx +++ b/extensions/ql-vscode/src/view/results/RawTableValue.tsx @@ -13,7 +13,7 @@ export default function RawTableValue({ value, databaseUri, onSelected, -}: Props): JSX.Element { +}: Props): React.JSX.Element { switch (value.type) { case "boolean": return <span>{value.value.toString()}</span>; diff --git a/extensions/ql-vscode/src/view/results/ResultCount.tsx b/extensions/ql-vscode/src/view/results/ResultCount.tsx index 49ae9428435..2311a652ad5 100644 --- a/extensions/ql-vscode/src/view/results/ResultCount.tsx +++ b/extensions/ql-vscode/src/view/results/ResultCount.tsx @@ -14,7 +14,7 @@ function getResultCount(resultSet: ResultSet): number { } } -export function ResultCount(props: Props): JSX.Element | null { +export function ResultCount(props: Props): React.JSX.Element | null { if (!props.resultSet) { return null; } diff --git a/extensions/ql-vscode/src/view/results/locations/ClickableLocation.tsx b/extensions/ql-vscode/src/view/results/locations/ClickableLocation.tsx index c073b10f839..29f62c72f56 100644 --- a/extensions/ql-vscode/src/view/results/locations/ClickableLocation.tsx +++ b/extensions/ql-vscode/src/view/results/locations/ClickableLocation.tsx @@ -23,7 +23,7 @@ export function ClickableLocation({ label, databaseUri, onClick: onClick, -}: Props): JSX.Element { +}: Props): React.JSX.Element { const handleClick = useCallback( (e: React.MouseEvent) => { e.preventDefault(); diff --git a/extensions/ql-vscode/src/view/results/locations/Location.tsx b/extensions/ql-vscode/src/view/results/locations/Location.tsx index 8f45c194dd2..85a325aebcb 100644 --- a/extensions/ql-vscode/src/view/results/locations/Location.tsx +++ b/extensions/ql-vscode/src/view/results/locations/Location.tsx @@ -22,7 +22,7 @@ export function Location({ databaseUri, title, onClick, -}: Props): JSX.Element { +}: Props): React.JSX.Element { const displayLabel = useMemo(() => convertNonPrintableChars(label), [label]); if (loc === undefined) { diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx index 67f19c79ba1..3a72c3548cd 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx @@ -51,7 +51,7 @@ export function VariantAnalysis({ variantAnalysis: initialVariantAnalysis, repoStates: initialRepoStates = [], repoResults: initialRepoResults = [], -}: VariantAnalysisProps): JSX.Element { +}: VariantAnalysisProps): React.JSX.Element { const [variantAnalysis, setVariantAnalysis] = useState< VariantAnalysisDomainModel | undefined >(initialVariantAnalysis); diff --git a/extensions/ql-vscode/src/view/webview-definition.ts b/extensions/ql-vscode/src/view/webview-definition.ts index b23b8150c95..ff9265d1127 100644 --- a/extensions/ql-vscode/src/view/webview-definition.ts +++ b/extensions/ql-vscode/src/view/webview-definition.ts @@ -1,3 +1,3 @@ export type WebviewDefinition = { - component: JSX.Element; + component: React.JSX.Element; }; diff --git a/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts b/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts index 62055657cde..a4d29f272ad 100644 --- a/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts +++ b/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts @@ -115,7 +115,7 @@ describe("Releases API consumer", () => { await expect( consumer.getLatestRelease(new Range("5.*.*")), - ).rejects.toThrowError(); + ).rejects.toThrow(); }); it("picked release passes additional compatibility test if an additional compatibility test is specified", async () => { @@ -140,7 +140,7 @@ describe("Releases API consumer", () => { (asset) => asset.name === "otherExampleAsset.txt", ), ), - ).rejects.toThrowError(); + ).rejects.toThrow(); }); it("picked release is the most recent prerelease when includePrereleases is set", async () => { diff --git a/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts b/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts index 5faec408ff9..5035aaf5281 100644 --- a/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts @@ -154,7 +154,7 @@ describe(VariantAnalysisResultsManager.name, () => { async function* generateInParts() { const partLength = fileContents.length / 5; for (let i = 0; i < 5; i++) { - yield fileContents.slice(i * partLength, (i + 1) * partLength); + yield fileContents.subarray(i * partLength, (i + 1) * partLength); } } diff --git a/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/local-databases.test.ts b/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/local-databases.test.ts index f86543d62c1..1fdfa67dba5 100644 --- a/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/local-databases.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/local-databases.test.ts @@ -296,9 +296,7 @@ describe("local databases", () => { Uri.parse("file:/sourceArchive-uri/"), ); (db as any).contents.sourceArchiveUri = undefined; - expect(() => db.resolveSourceFile("abc")).toThrowError( - "Scheme is missing", - ); + expect(() => db.resolveSourceFile("abc")).toThrow("Scheme is missing"); }); it("should fail to resolve when not a file uri", () => { @@ -308,7 +306,7 @@ describe("local databases", () => { Uri.parse("file:/sourceArchive-uri/"), ); (db as any).contents.sourceArchiveUri = undefined; - expect(() => db.resolveSourceFile("http://abc")).toThrowError( + expect(() => db.resolveSourceFile("http://abc")).toThrow( "Invalid uri scheme", ); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/databases/github-databases/api.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/databases/github-databases/api.test.ts index e18b26a5a09..f5dbadd6c94 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/databases/github-databases/api.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/databases/github-databases/api.test.ts @@ -123,7 +123,7 @@ describe("listDatabases", () => { it("throws an error", async () => { await expect( listDatabases(owner, repo, credentials, config), - ).rejects.toThrowError("Not found"); + ).rejects.toThrow("Not found"); }); }); @@ -150,7 +150,7 @@ describe("listDatabases", () => { it("throws an error", async () => { await expect( listDatabases(owner, repo, credentials, config), - ).rejects.toThrowError("Internal server error"); + ).rejects.toThrow("Internal server error"); }); }); }); @@ -199,7 +199,7 @@ describe("listDatabases", () => { it("throws an error", async () => { await expect( listDatabases(owner, repo, credentials, config), - ).rejects.toThrowError("Internal server error"); + ).rejects.toThrow("Internal server error"); expect(mockListCodeqlDatabases).not.toHaveBeenCalled(); }); }); @@ -270,7 +270,7 @@ describe("listDatabases", () => { it("throws an error", async () => { await expect( listDatabases(owner, repo, credentials, config), - ).rejects.toThrowError("Not found"); + ).rejects.toThrow("Not found"); }); }); @@ -297,7 +297,7 @@ describe("listDatabases", () => { it("throws an error", async () => { await expect( listDatabases(owner, repo, credentials, config), - ).rejects.toThrowError("Internal server error"); + ).rejects.toThrow("Internal server error"); }); }); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/local-queries/query-resolver.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/local-queries/query-resolver.test.ts index 9e4dec27bf4..20114aac6e2 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/local-queries/query-resolver.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/local-queries/query-resolver.test.ts @@ -112,7 +112,7 @@ describe("resolveQueries", () => { "tags contain": ["ide-contextual-queries/print-ast"], }, ), - ).rejects.toThrowError( + ).rejects.toThrow( 'No my query queries (kind "graph", tagged "ide-contextual-queries/print-ast") could be found in the current library path (tried searching the following packs: my-qlpack). Try upgrading the CodeQL libraries. If that doesn\'t work, then my query queries are not yet available for this language.', ); }); From dd9ca8082007a8438d9432cedaf1233b45b9136c Mon Sep 17 00:00:00 2001 From: Nora <norascheuch@github.com> Date: Wed, 24 Jan 2024 17:20:05 +0000 Subject: [PATCH 3/8] Solution for unique numbers --- .../VariantAnalysisAnalyzedRepos.stories.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx index 2139f95bc76..22748a39873 100644 --- a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx +++ b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx @@ -125,10 +125,13 @@ Example.args = { }; faker.seed(42); -const uniqueStore = {}; +const uniqueNumbers = [...Array(1000).keys()].sort(() => Math.random() - 0.5); const manyScannedRepos = Array.from({ length: 1000 }, (_, i) => { const mockedScannedRepo = createMockScannedRepo(); + const randomInt = uniqueNumbers.pop(); + const uniqueId = + randomInt === undefined ? Math.floor(Math.random() * 100000) : randomInt; return { ...mockedScannedRepo, @@ -136,13 +139,8 @@ const manyScannedRepos = Array.from({ length: 1000 }, (_, i) => { resultCount: faker.number.int({ min: 0, max: 1000 }), repository: { ...mockedScannedRepo.repository, - // We need to ensure the ID is unique for React keys - id: faker.helpers.unique(faker.number.int, [], { - store: uniqueStore, - }), - fullName: `octodemo/${faker.helpers.unique(faker.word.sample, [], { - store: uniqueStore, - })}`, + id: uniqueId, + fullName: `octodemo/${uniqueId}`, }, }; }); From 8397f58d0b0b0fd72fe64785579a1febef22c2e6 Mon Sep 17 00:00:00 2001 From: Nora <norascheuch@github.com> Date: Wed, 24 Jan 2024 17:27:52 +0000 Subject: [PATCH 4/8] Disable rule for storybook types --- extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx b/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx index 9ab2d0b6c4a..a6816fa795c 100644 --- a/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx +++ b/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx @@ -7,6 +7,7 @@ const ADDON_ID = "vscode-theme-addon"; addons.register(ADDON_ID, () => { addons.add(ADDON_ID, { title: "VSCode Themes", + // eslint-disable-next-line deprecation/deprecation type: types.TOOL, match: ({ viewMode }) => !!(viewMode && viewMode.match(/^(story|docs)$/)), render: () => <ThemeSelector />, From d5932fc1de43edbb396bc8312c16def5aec6c730 Mon Sep 17 00:00:00 2001 From: Nora <norascheuch@github.com> Date: Thu, 25 Jan 2024 08:25:33 +0000 Subject: [PATCH 5/8] Use storybook type --- .../ql-vscode/.storybook/vscode-theme-addon/manager.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx b/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx index a6816fa795c..8d7881ffb14 100644 --- a/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx +++ b/extensions/ql-vscode/.storybook/vscode-theme-addon/manager.tsx @@ -1,5 +1,6 @@ import * as React from "react"; -import { addons, types } from "@storybook/manager-api"; +import { addons } from "@storybook/manager-api"; +import { Addon_TypesEnum } from "@storybook/types"; import { ThemeSelector } from "./ThemeSelector"; const ADDON_ID = "vscode-theme-addon"; @@ -7,8 +8,7 @@ const ADDON_ID = "vscode-theme-addon"; addons.register(ADDON_ID, () => { addons.add(ADDON_ID, { title: "VSCode Themes", - // eslint-disable-next-line deprecation/deprecation - type: types.TOOL, + type: Addon_TypesEnum.TOOL, match: ({ viewMode }) => !!(viewMode && viewMode.match(/^(story|docs)$/)), render: () => <ThemeSelector />, }); From 12a3af0a759cdec0120442da7a5c0ad0f9941b8f Mon Sep 17 00:00:00 2001 From: Nora <norascheuch@github.com> Date: Thu, 25 Jan 2024 09:47:19 +0000 Subject: [PATCH 6/8] Make random number bigger than 1000 --- .../variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx index 22748a39873..a98c73c5bcd 100644 --- a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx +++ b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx @@ -131,7 +131,7 @@ const manyScannedRepos = Array.from({ length: 1000 }, (_, i) => { const mockedScannedRepo = createMockScannedRepo(); const randomInt = uniqueNumbers.pop(); const uniqueId = - randomInt === undefined ? Math.floor(Math.random() * 100000) : randomInt; + randomInt === undefined ? Math.random() * 8000 + 1001 : randomInt; return { ...mockedScannedRepo, From 70461d857ce7a0656dbb0f7b540efc702dc6a467 Mon Sep 17 00:00:00 2001 From: Nora <norascheuch@github.com> Date: Thu, 25 Jan 2024 13:17:12 +0000 Subject: [PATCH 7/8] Use nanoid --- .../VariantAnalysisAnalyzedRepos.stories.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx index a98c73c5bcd..c52b590bfb9 100644 --- a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx +++ b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx @@ -1,6 +1,7 @@ import type { Meta, StoryFn } from "@storybook/react"; import { faker } from "@faker-js/faker"; +import { customAlphabet } from "nanoid"; import { VariantAnalysisContainer } from "../../view/variant-analysis/VariantAnalysisContainer"; import { VariantAnalysisAnalyzedRepos } from "../../view/variant-analysis/VariantAnalysisAnalyzedRepos"; @@ -125,22 +126,19 @@ Example.args = { }; faker.seed(42); -const uniqueNumbers = [...Array(1000).keys()].sort(() => Math.random() - 0.5); const manyScannedRepos = Array.from({ length: 1000 }, (_, i) => { const mockedScannedRepo = createMockScannedRepo(); - const randomInt = uniqueNumbers.pop(); - const uniqueId = - randomInt === undefined ? Math.random() * 8000 + 1001 : randomInt; - + const nanoid = customAlphabet("0123456789"); return { ...mockedScannedRepo, analysisStatus: VariantAnalysisRepoStatus.Succeeded, resultCount: faker.number.int({ min: 0, max: 1000 }), repository: { ...mockedScannedRepo.repository, - id: uniqueId, - fullName: `octodemo/${uniqueId}`, + // We need to ensure the ID is unique for React keys + id: parseInt(nanoid()), + fullName: `octodemo/${nanoid()}`, }, }; }); From e126dfbe36983ef8cf18fb0d74a1152cf25fabf9 Mon Sep 17 00:00:00 2001 From: Nora <norascheuch@github.com> Date: Thu, 25 Jan 2024 16:19:31 +0000 Subject: [PATCH 8/8] Remove 0 for parseInt --- .../variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx index c52b590bfb9..7b8f08878e0 100644 --- a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx +++ b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisAnalyzedRepos.stories.tsx @@ -129,7 +129,7 @@ faker.seed(42); const manyScannedRepos = Array.from({ length: 1000 }, (_, i) => { const mockedScannedRepo = createMockScannedRepo(); - const nanoid = customAlphabet("0123456789"); + const nanoid = customAlphabet("123456789"); return { ...mockedScannedRepo, analysisStatus: VariantAnalysisRepoStatus.Succeeded,