From 666b0b80b61594d15f6622bd8aff5fcfe5f92867 Mon Sep 17 00:00:00 2001 From: Matiss Janis Aboltins Date: Thu, 4 Dec 2025 23:17:31 +0000 Subject: [PATCH] Fix lint violations (#6299) --- .oxlintrc.json | 3 -- package.json | 2 +- packages/api/index.ts | 2 +- packages/crdt/src/crdt/timestamp.ts | 2 +- .../src/components/formula/QueryManager.tsx | 4 +-- .../components/mobile/budget/BudgetCell.tsx | 3 -- .../ImportTransactionsModal.tsx | 32 +++++++++---------- .../modals/ImportTransactionsModal/utils.ts | 14 ++++---- .../components/modals/TransferOwnership.tsx | 2 +- .../UnmigrateBudgetAutomationsModal.tsx | 2 +- .../src/components/reports/SaveReport.tsx | 2 +- .../src/components/settings/Format.tsx | 2 +- .../src/components/settings/Reset.tsx | 2 +- .../src/components/settings/Themes.tsx | 2 +- .../src/hooks/useIsInViewport.ts | 2 +- .../desktop-client/src/hooks/useTagCSS.ts | 2 +- packages/desktop-electron/index.ts | 2 +- packages/desktop-electron/modules.ts | 3 -- packages/desktop-electron/window-state.ts | 2 +- packages/docs/docs-sidebar.js | 11 ------- packages/docs/docs/api/types.js | 2 +- packages/docs/src/pages/index.js | 9 +----- packages/docs/src/remark/mentions.js | 2 +- .../migrations/1632571489012_remove_cache.js | 2 +- .../migrations/1723665565000_prefs.js | 2 +- .../src/platform/exceptions/index.ts | 2 +- .../server/asyncStorage/index.electron.ts | 2 +- .../src/platform/server/fs/index.web.ts | 6 ++-- .../platform/server/sqlite/index.electron.ts | 9 ++---- .../src/platform/server/sqlite/index.web.ts | 9 ++---- packages/loot-core/src/server/accounts/app.ts | 4 +-- .../loot-core/src/server/accounts/sync.ts | 2 +- .../src/server/aql/schema-helpers.ts | 2 +- packages/loot-core/src/server/auth/app.ts | 6 ++-- .../loot-core/src/server/budgetfiles/app.ts | 6 ++-- .../src/server/budgetfiles/backups.ts | 4 +-- .../loot-core/src/server/cloud-storage.ts | 4 +-- .../loot-core/src/server/db/types/index.ts | 29 ++++++++--------- .../loot-core/src/server/importers/ynab4.ts | 4 +-- packages/loot-core/src/server/main.ts | 4 +-- packages/loot-core/src/server/models.ts | 4 +-- packages/loot-core/src/server/post.ts | 14 ++++---- packages/loot-core/src/server/prefs.ts | 2 +- .../loot-core/src/server/schedules/app.ts | 4 +-- .../loot-core/src/server/server-config.ts | 2 +- packages/loot-core/src/server/sync/index.ts | 2 +- .../server/transactions/import/ofx2json.ts | 2 +- .../server/transactions/transaction-rules.ts | 2 +- packages/loot-core/src/shared/arithmetic.ts | 2 +- packages/loot-core/src/shared/locale.ts | 11 +++++-- packages/loot-core/src/shared/rules.ts | 2 +- packages/loot-core/src/shared/transactions.ts | 6 ++-- packages/sync-server/src/accounts/openid.js | 2 +- packages/sync-server/src/app-admin.js | 2 +- packages/sync-server/src/app-cors-proxy.js | 2 +- .../services/gocardless-service.js | 2 +- packages/sync-server/src/app-openid.js | 2 +- upcoming-release-notes/6299.md | 6 ++++ 58 files changed, 124 insertions(+), 151 deletions(-) delete mode 100644 packages/desktop-electron/modules.ts create mode 100644 upcoming-release-notes/6299.md diff --git a/.oxlintrc.json b/.oxlintrc.json index fa22def2c3..101a879333 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -3,7 +3,6 @@ "plugins": ["react", "typescript", "import", "jsx-a11y"], "rules": { // TODO fix all these and re-enable - "import/namespace": "off", "jsx-a11y/alt-text": "off", "jsx-a11y/aria-role": "off", "jsx-a11y/click-events-have-key-events": "off", @@ -16,8 +15,6 @@ "no-constant-condition": "off", "no-empty-pattern": "off", "no-extra-boolean-cast": "off", - "no-unused-vars": "off", - "no-useless-catch": "off", "react/jsx-key": "off", }, "overrides": [ diff --git a/package.json b/package.json index a85f0a16d9..0090bbc904 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ ], "*.{js,mjs,jsx,ts,tsx}": [ "oxlint --deny-warnings --fix", - "eslint --max-warnings 0 --fix" + "eslint --max-warnings 0 --fix --no-warn-ignored" ] }, "packageManager": "yarn@4.10.3", diff --git a/packages/api/index.ts b/packages/api/index.ts index 4caffc5ea9..9a535e9764 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -44,7 +44,7 @@ export async function shutdown() { if (actualApp) { try { await actualApp.send('sync'); - } catch (e) { + } catch { // most likely that no budget is loaded, so the sync failed } await actualApp.send('close-budget'); diff --git a/packages/crdt/src/crdt/timestamp.ts b/packages/crdt/src/crdt/timestamp.ts index a1c7da7f75..c9af7941b9 100644 --- a/packages/crdt/src/crdt/timestamp.ts +++ b/packages/crdt/src/crdt/timestamp.ts @@ -57,7 +57,7 @@ export function deserializeClock(clock: string): Clock { let data; try { data = JSON.parse(clock); - } catch (e) { + } catch { data = { timestamp: '1970-01-01T00:00:00.000Z-0000-' + makeClientId(), merkle: {}, diff --git a/packages/desktop-client/src/components/formula/QueryManager.tsx b/packages/desktop-client/src/components/formula/QueryManager.tsx index b02fd29dec..5ee5b13224 100644 --- a/packages/desktop-client/src/components/formula/QueryManager.tsx +++ b/packages/desktop-client/src/components/formula/QueryManager.tsx @@ -411,7 +411,7 @@ function QueryItem({ }, }), ); - } catch (error) { + } catch { dispatch( addNotification({ notification: { @@ -457,7 +457,7 @@ function QueryItem({ }), ); } - } catch (error) { + } catch { dispatch( addNotification({ notification: { diff --git a/packages/desktop-client/src/components/mobile/budget/BudgetCell.tsx b/packages/desktop-client/src/components/mobile/budget/BudgetCell.tsx index ddac18795d..795ef12fac 100644 --- a/packages/desktop-client/src/components/mobile/budget/BudgetCell.tsx +++ b/packages/desktop-client/src/components/mobile/budget/BudgetCell.tsx @@ -2,7 +2,6 @@ import { useCallback, type ComponentPropsWithoutRef } from 'react'; import { useTranslation } from 'react-i18next'; import { Button } from '@actual-app/components/button'; -import { type CSSProperties } from '@actual-app/components/styles'; import { Text } from '@actual-app/components/text'; import { AutoTextSize } from 'auto-text-size'; @@ -28,7 +27,6 @@ type BudgetCellProps< typeof CellValue<'envelope-budget' | 'tracking-budget', SheetFieldName> > & { category: CategoryEntity; - style?: CSSProperties; month: string; onBudgetAction: (month: string, action: string, args: unknown) => void; }; @@ -40,7 +38,6 @@ export function BudgetCell< category, month, onBudgetAction, - style, children, ...props }: BudgetCellProps) { diff --git a/packages/desktop-client/src/components/modals/ImportTransactionsModal/ImportTransactionsModal.tsx b/packages/desktop-client/src/components/modals/ImportTransactionsModal/ImportTransactionsModal.tsx index e9293d7f3b..3ea99a587f 100644 --- a/packages/desktop-client/src/components/modals/ImportTransactionsModal/ImportTransactionsModal.tsx +++ b/packages/desktop-client/src/components/modals/ImportTransactionsModal/ImportTransactionsModal.tsx @@ -284,14 +284,14 @@ export function ImportTransactionsModal({ } const { - inflow, - outflow, - inOut, - existing, - ignored, - selected, - selected_merge, - tombstone, + inflow: _inflow, + outflow: _outflow, + inOut: _inOut, + existing: _existing, + ignored: _ignored, + selected: _selected, + selected_merge: _selected_merge, + tombstone: _tombstone, ...finalTransaction } = trans; previewTransactions.push({ @@ -624,14 +624,14 @@ export function ImportTransactionsModal({ trans.category = category_id; const { - inflow, - outflow, - inOut, - existing, - ignored, - selected, - selected_merge, - trx_id, + inflow: _inflow, + outflow: _outflow, + inOut: _inOut, + existing: _existing, + ignored: _ignored, + selected: _selected, + selected_merge: _selected_merge, + trx_id: _trx_id, ...finalTransaction } = trans; diff --git a/packages/desktop-client/src/components/modals/ImportTransactionsModal/utils.ts b/packages/desktop-client/src/components/modals/ImportTransactionsModal/utils.ts index 23fcdd528c..c3b2c72a9c 100644 --- a/packages/desktop-client/src/components/modals/ImportTransactionsModal/utils.ts +++ b/packages/desktop-client/src/components/modals/ImportTransactionsModal/utils.ts @@ -119,7 +119,7 @@ export function formatDate( } try { return formatDate_(date, format); - } catch (e) {} + } catch {} return null; } @@ -265,12 +265,12 @@ export function parseAmountFields( export function stripCsvImportTransaction(transaction: ImportTransaction) { const { - existing, - ignored, - selected, - selected_merge, - trx_id, - tombstone, + existing: _existing, + ignored: _ignored, + selected: _selected, + selected_merge: _selected_merge, + trx_id: _trx_id, + tombstone: _tombstone, ...trans } = transaction; diff --git a/packages/desktop-client/src/components/modals/TransferOwnership.tsx b/packages/desktop-client/src/components/modals/TransferOwnership.tsx index cd32c40e8b..e810912798 100644 --- a/packages/desktop-client/src/components/modals/TransferOwnership.tsx +++ b/packages/desktop-client/src/components/modals/TransferOwnership.tsx @@ -201,7 +201,7 @@ export function TransferOwnership({ closeAndLoadBudget({ fileId: (currentFile as Budget).id }), ); close(); - } catch (error) { + } catch { dispatch( addNotification({ notification: { diff --git a/packages/desktop-client/src/components/modals/UnmigrateBudgetAutomationsModal.tsx b/packages/desktop-client/src/components/modals/UnmigrateBudgetAutomationsModal.tsx index da32cc70e3..3dc286b0b1 100644 --- a/packages/desktop-client/src/components/modals/UnmigrateBudgetAutomationsModal.tsx +++ b/packages/desktop-client/src/components/modals/UnmigrateBudgetAutomationsModal.tsx @@ -43,7 +43,7 @@ export function UnmigrateBudgetAutomationsModal({ templates, ); if (mounted) setRendered(text); - } catch (e) { + } catch { if (mounted) setRendered(''); } })(); diff --git a/packages/desktop-client/src/components/reports/SaveReport.tsx b/packages/desktop-client/src/components/reports/SaveReport.tsx index a6fe255bde..571352eee0 100644 --- a/packages/desktop-client/src/components/reports/SaveReport.tsx +++ b/packages/desktop-client/src/components/reports/SaveReport.tsx @@ -109,7 +109,7 @@ export function SaveReport({ return; } - const { name, id, ...props } = customReportItems; + const { name: _name, id: _id, ...props } = customReportItems; const updatedReport = { ...report, diff --git a/packages/desktop-client/src/components/settings/Format.tsx b/packages/desktop-client/src/components/settings/Format.tsx index 02eddb242a..e9d9c2de75 100644 --- a/packages/desktop-client/src/components/settings/Format.tsx +++ b/packages/desktop-client/src/components/settings/Format.tsx @@ -1,5 +1,5 @@ // @ts-strict-ignore -import React, { type ReactNode } from 'react'; +import React from 'react'; import { useTranslation, Trans } from 'react-i18next'; import { Select } from '@actual-app/components/select'; diff --git a/packages/desktop-client/src/components/settings/Reset.tsx b/packages/desktop-client/src/components/settings/Reset.tsx index 2125ee8b05..1f25e8effa 100644 --- a/packages/desktop-client/src/components/settings/Reset.tsx +++ b/packages/desktop-client/src/components/settings/Reset.tsx @@ -106,7 +106,7 @@ export function ForceReload() { } } } - } catch (error) { + } catch { // Do nothing } finally { window.location.reload(); diff --git a/packages/desktop-client/src/components/settings/Themes.tsx b/packages/desktop-client/src/components/settings/Themes.tsx index 84c6bb0b61..12fb4cac31 100644 --- a/packages/desktop-client/src/components/settings/Themes.tsx +++ b/packages/desktop-client/src/components/settings/Themes.tsx @@ -1,4 +1,4 @@ -import React, { type ReactNode } from 'react'; +import React from 'react'; import { useTranslation, Trans } from 'react-i18next'; import { Select } from '@actual-app/components/select'; diff --git a/packages/desktop-client/src/hooks/useIsInViewport.ts b/packages/desktop-client/src/hooks/useIsInViewport.ts index 72b7239152..fcbdf23a01 100644 --- a/packages/desktop-client/src/hooks/useIsInViewport.ts +++ b/packages/desktop-client/src/hooks/useIsInViewport.ts @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState, type RefObject } from 'react'; +import { useEffect, useMemo, useState, type RefObject } from 'react'; /** * Check if the given element (by ref) is visible in the viewport. diff --git a/packages/desktop-client/src/hooks/useTagCSS.ts b/packages/desktop-client/src/hooks/useTagCSS.ts index a20a4ec174..056ea1441e 100644 --- a/packages/desktop-client/src/hooks/useTagCSS.ts +++ b/packages/desktop-client/src/hooks/useTagCSS.ts @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import { theme as themeStyle } from '@actual-app/components/theme'; import { css } from '@emotion/css'; diff --git a/packages/desktop-electron/index.ts b/packages/desktop-electron/index.ts index eec9555867..cb7a74e7e6 100644 --- a/packages/desktop-electron/index.ts +++ b/packages/desktop-electron/index.ts @@ -141,7 +141,7 @@ async function loadGlobalPrefs() { 'utf8', ), ); - } catch (e) { + } catch { logMessage('info', 'Could not load global state - using defaults'); state = {}; } diff --git a/packages/desktop-electron/modules.ts b/packages/desktop-electron/modules.ts deleted file mode 100644 index bde546bb8e..0000000000 --- a/packages/desktop-electron/modules.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module 'module' { - const globalPaths: string[]; -} diff --git a/packages/desktop-electron/window-state.ts b/packages/desktop-electron/window-state.ts index 788f7495eb..c92ba0df93 100644 --- a/packages/desktop-electron/window-state.ts +++ b/packages/desktop-electron/window-state.ts @@ -23,7 +23,7 @@ async function loadState() { state = JSON.parse( fs.readFileSync(path.join(getDataDir(), 'window.json'), 'utf8'), ); - } catch (e) { + } catch { console.log('Could not load window state'); } diff --git a/packages/docs/docs-sidebar.js b/packages/docs/docs-sidebar.js index 17e795a7ae..c9c4e5f2d1 100644 --- a/packages/docs/docs-sidebar.js +++ b/packages/docs/docs-sidebar.js @@ -11,17 +11,6 @@ // @ts-check -/** - * @param {string} title - * @returns {import('@docusaurus/plugin-content-docs').PropSidebarItemHtml} - */ -const unavailable = title => ({ - type: 'html', - value: title, - className: 'menu__link menu__link--unavailable', - defaultStyle: true, -}); - /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { docs: [ diff --git a/packages/docs/docs/api/types.js b/packages/docs/docs/api/types.js index 99c69d577b..26da9e75e5 100644 --- a/packages/docs/docs/api/types.js +++ b/packages/docs/docs/api/types.js @@ -561,7 +561,7 @@ export function PrimitiveType({ name, type, description }) { ); } -export function StructType({ name, fields }) { +export function StructType({ fields }) { return (
diff --git a/packages/docs/src/remark/mentions.js b/packages/docs/src/remark/mentions.js index 08d207cbbb..0093519f5a 100644 --- a/packages/docs/src/remark/mentions.js +++ b/packages/docs/src/remark/mentions.js @@ -2,7 +2,7 @@ const { visitParents } = require('unist-util-visit-parents'); function githubMentionPlugin() { const pattern = /@([\w-]+)/g; - const transformer = async (ast, file) => { + const transformer = async ast => { visitParents(ast, 'text', (node, ancestors) => { const text = node.value; let match; diff --git a/packages/loot-core/migrations/1632571489012_remove_cache.js b/packages/loot-core/migrations/1632571489012_remove_cache.js index 77fdac7962..e1578160ad 100644 --- a/packages/loot-core/migrations/1632571489012_remove_cache.js +++ b/packages/loot-core/migrations/1632571489012_remove_cache.js @@ -113,7 +113,7 @@ CREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL); try { const value = JSON.parse(str); return value && value !== '' ? value : null; - } catch (e) { + } catch { return null; } }; diff --git a/packages/loot-core/migrations/1723665565000_prefs.js b/packages/loot-core/migrations/1723665565000_prefs.js index fa0ef1e32d..46829c706c 100644 --- a/packages/loot-core/migrations/1723665565000_prefs.js +++ b/packages/loot-core/migrations/1723665565000_prefs.js @@ -53,7 +53,7 @@ export default async function runMigration(db, { fs, fileId }) { ]); }), ); - } catch (e) { + } catch { // Do nothing } } diff --git a/packages/loot-core/src/platform/exceptions/index.ts b/packages/loot-core/src/platform/exceptions/index.ts index 73acb9d8e2..cc96d9d0e9 100644 --- a/packages/loot-core/src/platform/exceptions/index.ts +++ b/packages/loot-core/src/platform/exceptions/index.ts @@ -2,4 +2,4 @@ export const captureException = function (exc: Error) { console.error('[Exception]', exc); }; -export const captureBreadcrumb = function (crumb: unknown) {}; +export const captureBreadcrumb = function (_crumb: unknown) {}; diff --git a/packages/loot-core/src/platform/server/asyncStorage/index.electron.ts b/packages/loot-core/src/platform/server/asyncStorage/index.electron.ts index 62acf87744..7cc7145cdf 100644 --- a/packages/loot-core/src/platform/server/asyncStorage/index.electron.ts +++ b/packages/loot-core/src/platform/server/asyncStorage/index.electron.ts @@ -15,7 +15,7 @@ export const init: T.Init = function ({ persist = true } = {}) { if (persist) { try { store = JSON.parse(fs.readFileSync(getStorePath(), 'utf8')); - } catch (e) { + } catch { store = {}; } } else { diff --git a/packages/loot-core/src/platform/server/fs/index.web.ts b/packages/loot-core/src/platform/server/fs/index.web.ts index 59d343fc07..83bd4bf98b 100644 --- a/packages/loot-core/src/platform/server/fs/index.web.ts +++ b/packages/loot-core/src/platform/server/fs/index.web.ts @@ -27,12 +27,12 @@ function _exists(filepath: string): boolean { try { FS.readlink(filepath); return true; - } catch (e) {} + } catch {} try { FS.stat(filepath); return true; - } catch (e) {} + } catch {} return false; } @@ -114,7 +114,7 @@ function resolveLink(path: string): string { try { const { node } = FS.lookupPath(path, { follow: false }); return node.link ? FS.readlink(path) : path; - } catch (e) { + } catch { return path; } } diff --git a/packages/loot-core/src/platform/server/sqlite/index.electron.ts b/packages/loot-core/src/platform/server/sqlite/index.electron.ts index f5031a368d..959f28b27d 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.electron.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.electron.ts @@ -49,13 +49,8 @@ export function runQuery( throw e; } } else { - try { - const info = stmt.run(...params); - return { changes: info.changes, insertId: info.lastInsertRowid }; - } catch (e) { - // console.log('error', sql); - throw e; - } + const info = stmt.run(...params); + return { changes: info.changes, insertId: info.lastInsertRowid }; } } diff --git a/packages/loot-core/src/platform/server/sqlite/index.web.ts b/packages/loot-core/src/platform/server/sqlite/index.web.ts index 39502709ac..d974a9cb10 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.web.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.web.ts @@ -91,13 +91,8 @@ export function runQuery( throw e; } } else { - try { - stmt.run(params); - return { changes: db.getRowsModified() }; - } catch (e) { - // console.log(sql); - throw e; - } + stmt.run(params); + return { changes: db.getRowsModified() }; } } diff --git a/packages/loot-core/src/server/accounts/app.ts b/packages/loot-core/src/server/accounts/app.ts index 2c6eb7b1bf..3c85be81f8 100644 --- a/packages/loot-core/src/server/accounts/app.ts +++ b/packages/loot-core/src/server/accounts/app.ts @@ -709,7 +709,7 @@ async function simpleFinAccounts() { }, 60000, ); - } catch (error) { + } catch { return { error_code: 'TIMED_OUT' }; } } @@ -735,7 +735,7 @@ async function pluggyAiAccounts() { }, 60000, ); - } catch (error) { + } catch { return { error_code: 'TIMED_OUT' }; } } diff --git a/packages/loot-core/src/server/accounts/sync.ts b/packages/loot-core/src/server/accounts/sync.ts index ef3383df33..22cbf82216 100644 --- a/packages/loot-core/src/server/accounts/sync.ts +++ b/packages/loot-core/src/server/accounts/sync.ts @@ -577,7 +577,7 @@ export async function reconcileTransactions( } } else { // Insert a new transaction - const { forceAddTransaction, ...newTrans } = trans; + const { forceAddTransaction: _forceAddTransaction, ...newTrans } = trans; const finalTransaction = { ...newTrans, id: uuidv4(), diff --git a/packages/loot-core/src/server/aql/schema-helpers.ts b/packages/loot-core/src/server/aql/schema-helpers.ts index ddf71cb9e3..4dcf398400 100644 --- a/packages/loot-core/src/server/aql/schema-helpers.ts +++ b/packages/loot-core/src/server/aql/schema-helpers.ts @@ -76,7 +76,7 @@ export function convertOutputType(value, type) { case 'json/fallback': try { return JSON.parse(value); - } catch (e) { + } catch { return type === 'json/fallback' ? value : null; } default: diff --git a/packages/loot-core/src/server/auth/app.ts b/packages/loot-core/src/server/auth/app.ts index f7c910cf82..bb915382a9 100644 --- a/packages/loot-core/src/server/auth/app.ts +++ b/packages/loot-core/src/server/auth/app.ts @@ -52,14 +52,14 @@ async function needsBootstrap({ url }: { url?: string } = {}) { if (!serverConfig) { return { bootstrapped: true, hasServer: false }; } - } catch (err) { + } catch { return { error: 'get-server-failure' }; } let resText: string; try { resText = await get(serverConfig.SIGNUP_SERVER + '/needs-bootstrap'); - } catch (err) { + } catch { return { error: 'network-failure' }; } @@ -79,7 +79,7 @@ async function needsBootstrap({ url }: { url?: string } = {}) { try { res = JSON.parse(resText); - } catch (err) { + } catch { return { error: 'parse-failure' }; } diff --git a/packages/loot-core/src/server/budgetfiles/app.ts b/packages/loot-core/src/server/budgetfiles/app.ts index 49fe6cb4b1..4e288d5c7d 100644 --- a/packages/loot-core/src/server/budgetfiles/app.ts +++ b/packages/loot-core/src/server/budgetfiles/app.ts @@ -269,7 +269,7 @@ async function closeBudget() { try { await asyncStorage.setItem('lastBudget', ''); - } catch (e) { + } catch { // This might fail if we are shutting down after failing to load a // budget. We want to unload whatever has already been loaded but // be resilient to anything failing @@ -303,7 +303,7 @@ async function deleteBudget({ await db.closeDatabase(); const budgetDir = fs.getBudgetDir(id); await fs.removeDirRecursively(budgetDir); - } catch (e) { + } catch { return 'fail'; } } @@ -444,7 +444,7 @@ async function createBudget({ if (!avoidUpload && !testMode) { try { await cloudStorage.upload(); - } catch (e) { + } catch { // Ignore any errors uploading. If they are offline they should // still be able to create files. } diff --git a/packages/loot-core/src/server/budgetfiles/backups.ts b/packages/loot-core/src/server/budgetfiles/backups.ts index 3ebe7bdffe..82296076b7 100644 --- a/packages/loot-core/src/server/budgetfiles/backups.ts +++ b/packages/loot-core/src/server/budgetfiles/backups.ts @@ -178,7 +178,7 @@ export async function loadBackup(id: string, backupId: string) { // Re-upload the new file try { await cloudStorage.upload(); - } catch (e) {} + } catch {} prefs.unloadPrefs(); } else { logger.log('Loading backup', backupId); @@ -197,7 +197,7 @@ export async function loadBackup(id: string, backupId: string) { // Re-upload the new file try { await cloudStorage.upload(); - } catch (e) {} + } catch {} prefs.unloadPrefs(); diff --git a/packages/loot-core/src/server/cloud-storage.ts b/packages/loot-core/src/server/cloud-storage.ts index 8968c4ecb2..e975f77e77 100644 --- a/packages/loot-core/src/server/cloud-storage.ts +++ b/packages/loot-core/src/server/cloud-storage.ts @@ -195,7 +195,7 @@ export async function importBuffer(fileData, buffer) { try { zipped = new AdmZip(buffer); entries = zipped.getEntries(); - } catch (err) { + } catch { throw FileDownloadError('not-zip-file'); } const dbEntry = entries.find(e => e.entryName.includes('db.sqlite')); @@ -211,7 +211,7 @@ export async function importBuffer(fileData, buffer) { let meta; try { meta = JSON.parse(metaContent.toString('utf8')); - } catch (err) { + } catch { throw FileDownloadError('invalid-meta-file'); } diff --git a/packages/loot-core/src/server/db/types/index.ts b/packages/loot-core/src/server/db/types/index.ts index b173dc9529..5e5d1d8f4d 100644 --- a/packages/loot-core/src/server/db/types/index.ts +++ b/packages/loot-core/src/server/db/types/index.ts @@ -121,13 +121,13 @@ export type DbSchedule = { tombstone: 1 | 0; }; -type DbScheduleJsonPath = { - schedule_id: DbSchedule['id']; - payee: string; - account: string; - amount: string; - date: string; -}; +// type DbScheduleJsonPath = { +// schedule_id: DbSchedule['id']; +// payee: string; +// account: string; +// amount: string; +// date: string; +// }; export type DbScheduleNextDate = { id: string; @@ -139,14 +139,13 @@ export type DbScheduleNextDate = { }; // This is unused in the codebase. - -type DbPendingTransaction = { - id: string; - acct: number; - amount: number; - description: string; - date: string; -}; +// type DbPendingTransaction = { +// id: string; +// acct: number; +// amount: number; +// description: string; +// date: string; +// }; export type DbTransaction = { id: string; diff --git a/packages/loot-core/src/server/importers/ynab4.ts b/packages/loot-core/src/server/importers/ynab4.ts index 6f30dfa365..ec40bc6845 100644 --- a/packages/loot-core/src/server/importers/ynab4.ts +++ b/packages/loot-core/src/server/importers/ynab4.ts @@ -325,7 +325,7 @@ function findLatestDevice(zipped: AdmZip, entries: AdmZip.IZipEntry[]): string { let data; try { data = JSON.parse(contents); - } catch (e) { + } catch { return null; } @@ -435,7 +435,7 @@ export function parseFile(buffer: Buffer): YNAB4.YFull { try { return JSON.parse(contents); - } catch (e) { + } catch { throw new Error('Error parsing Budget.yfull file'); } } diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts index 1f7a04cb49..dc69f0d44b 100644 --- a/packages/loot-core/src/server/main.ts +++ b/packages/loot-core/src/server/main.ts @@ -84,7 +84,7 @@ handlers['get-server-version'] = async function () { const info = JSON.parse(res); version = info.build.version; - } catch (err) { + } catch { return { error: 'network-failure' }; } @@ -172,7 +172,7 @@ async function setupDocumentsDir() { if (documentDir) { try { await ensureExists(documentDir); - } catch (e) { + } catch { documentDir = null; } } diff --git a/packages/loot-core/src/server/models.ts b/packages/loot-core/src/server/models.ts index c66ea28b99..e93ef6bf5e 100644 --- a/packages/loot-core/src/server/models.ts +++ b/packages/loot-core/src/server/models.ts @@ -81,7 +81,7 @@ export const categoryModel = { update, ); - const { sort_order, ...rest } = category; + const { sort_order: _sort_order, ...rest } = category; return { ...rest } as DbCategory; }, toDb( @@ -116,7 +116,7 @@ export const categoryGroupModel = { update, ); - const { sort_order, ...rest } = categoryGroup; + const { sort_order: _sort_order, ...rest } = categoryGroup; return { ...rest } as DbCategoryGroup; }, toDb( diff --git a/packages/loot-core/src/server/post.ts b/packages/loot-core/src/server/post.ts index 740ba06c9c..60c690d16c 100644 --- a/packages/loot-core/src/server/post.ts +++ b/packages/loot-core/src/server/post.ts @@ -57,7 +57,7 @@ export async function post( }); clearTimeout(timeoutId); text = await res.text(); - } catch (err) { + } catch { throw new PostError('network-failure'); } @@ -67,7 +67,7 @@ export async function post( try { responseData = JSON.parse(text); - } catch (err) { + } catch { // Something seriously went wrong. TODO handle errors throw new PostError('parse-json', { meta: text }); } @@ -109,7 +109,7 @@ export async function del(url, data, headers = {}, timeout = null) { }); clearTimeout(timeoutId); text = await res.text(); - } catch (err) { + } catch { throw new PostError('network-failure'); } @@ -117,7 +117,7 @@ export async function del(url, data, headers = {}, timeout = null) { try { res = JSON.parse(text); - } catch (err) { + } catch { // Something seriously went wrong. TODO handle errors throw new PostError('parse-json', { meta: text }); } @@ -157,7 +157,7 @@ export async function patch(url, data, headers = {}, timeout = null) { }); clearTimeout(timeoutId); text = await res.text(); - } catch (err) { + } catch { throw new PostError('network-failure'); } @@ -165,7 +165,7 @@ export async function patch(url, data, headers = {}, timeout = null) { try { res = JSON.parse(text); - } catch (err) { + } catch { // Something seriously went wrong. TODO handle errors throw new PostError('parse-json', { meta: text }); } @@ -198,7 +198,7 @@ export async function postBinary(url, data, headers) { ...headers, }, }); - } catch (err) { + } catch { throw new PostError('network-failure'); } diff --git a/packages/loot-core/src/server/prefs.ts b/packages/loot-core/src/server/prefs.ts index 1fbca348b6..f5682c2506 100644 --- a/packages/loot-core/src/server/prefs.ts +++ b/packages/loot-core/src/server/prefs.ts @@ -30,7 +30,7 @@ export async function loadPrefs(id?: string): Promise { try { prefs = JSON.parse(await fs.readFile(fullpath)); - } catch (e) { + } catch { // If the user messed something up, be flexible and allow them to // still load the budget database. Default the budget name to the // id. diff --git a/packages/loot-core/src/server/schedules/app.ts b/packages/loot-core/src/server/schedules/app.ts index 34ea8946ab..99b6fbc4d9 100644 --- a/packages/loot-core/src/server/schedules/app.ts +++ b/packages/loot-core/src/server/schedules/app.ts @@ -280,7 +280,7 @@ export async function updateSchedule({ await updateRule({ id: rule.id, conditions: newConditions }); // Annoyingly, sometimes it has `type` and sometimes it doesn't - const stripType = ({ type, ...fields }) => fields; + const stripType = ({ type: _type, ...fields }) => fields; // Update `next_date` if the user forced it, or if the account // or date changed. We check account because we don't update @@ -480,7 +480,7 @@ async function advanceSchedulesService(syncSuccess) { if (schedule._date.frequency) { try { await setNextDate({ id: schedule.id }); - } catch (err) { + } catch { // This might error if the rule is corrupted and it can't // find the rule } diff --git a/packages/loot-core/src/server/server-config.ts b/packages/loot-core/src/server/server-config.ts index 260f463ddb..25714c7425 100644 --- a/packages/loot-core/src/server/server-config.ts +++ b/packages/loot-core/src/server/server-config.ts @@ -21,7 +21,7 @@ function joinURL(base: string | URL, ...paths: string[]): string { export function isValidBaseURL(base: string): boolean { try { return Boolean(new URL(base)); - } catch (error) { + } catch { return false; } } diff --git a/packages/loot-core/src/server/sync/index.ts b/packages/loot-core/src/server/sync/index.ts index 7f7bbebc2c..06a545bc92 100644 --- a/packages/loot-core/src/server/sync/index.ts +++ b/packages/loot-core/src/server/sync/index.ts @@ -233,7 +233,7 @@ function applyMessagesForImport(messages: Message[]): void { if (!msg.old) { try { apply(msg); - } catch (e) { + } catch { apply(msg, true); } diff --git a/packages/loot-core/src/server/transactions/import/ofx2json.ts b/packages/loot-core/src/server/transactions/import/ofx2json.ts index 03b127d818..d4635d8a12 100644 --- a/packages/loot-core/src/server/transactions/import/ofx2json.ts +++ b/packages/loot-core/src/server/transactions/import/ofx2json.ts @@ -145,7 +145,7 @@ export async function ofx2json(ofx: string): Promise { let dataParsed = null; try { dataParsed = await parseXml(content); - } catch (e) { + } catch { const sanitized = sgml2Xml(content); dataParsed = await parseXml(sanitized); } diff --git a/packages/loot-core/src/server/transactions/transaction-rules.ts b/packages/loot-core/src/server/transactions/transaction-rules.ts index 7711a00303..94d5fed77e 100644 --- a/packages/loot-core/src/server/transactions/transaction-rules.ts +++ b/packages/loot-core/src/server/transactions/transaction-rules.ts @@ -95,7 +95,7 @@ function parseArray(str) { let value; try { value = typeof str === 'string' ? JSON.parse(str) : str; - } catch (e) { + } catch { throw new RuleError('internal', 'Cannot parse rule json'); } diff --git a/packages/loot-core/src/shared/arithmetic.ts b/packages/loot-core/src/shared/arithmetic.ts index a028c79d41..fe791e0648 100644 --- a/packages/loot-core/src/shared/arithmetic.ts +++ b/packages/loot-core/src/shared/arithmetic.ts @@ -121,7 +121,7 @@ export function evalArithmetic( let result: number; try { result = evaluate(parse(expression)); - } catch (e) { + } catch { // If it errors, return the default value return defaultValue; } diff --git a/packages/loot-core/src/shared/locale.ts b/packages/loot-core/src/shared/locale.ts index 49c48014d8..2c8decc2de 100644 --- a/packages/loot-core/src/shared/locale.ts +++ b/packages/loot-core/src/shared/locale.ts @@ -1,18 +1,23 @@ -import * as locales from 'date-fns/locale'; +import * as localesNamespace from 'date-fns/locale'; + +// Spread into plain object to allow dynamic access without ESLint namespace warnings +const locales: Record = { + ...localesNamespace, +}; export function getLocale(language: string) { if (!language || typeof language !== 'string') { return locales.enUS; } - let localeKey = language.replace('-', '') as keyof typeof locales; + let localeKey = language.replace('-', ''); if (localeKey in locales) { return locales[localeKey]; } //if language was not found with four letters, try with two - localeKey = language.replace('-', '').substring(0, 2) as keyof typeof locales; + localeKey = language.replace('-', '').substring(0, 2); if (localeKey in locales) { return locales[localeKey]; diff --git a/packages/loot-core/src/shared/rules.ts b/packages/loot-core/src/shared/rules.ts index 85952713b3..3313c7629a 100644 --- a/packages/loot-core/src/shared/rules.ts +++ b/packages/loot-core/src/shared/rules.ts @@ -311,7 +311,7 @@ export function parse(item) { return { ...item, error: null }; } -export function unparse({ error, inputKey, ...item }) { +export function unparse({ error: _error, inputKey: _inputKey, ...item }) { if (item.op === 'set-split-amount') { if (item.options.method === 'fixed-amount') { return { diff --git a/packages/loot-core/src/shared/transactions.ts b/packages/loot-core/src/shared/transactions.ts index 0df560f8a5..caca4ebaf7 100644 --- a/packages/loot-core/src/shared/transactions.ts +++ b/packages/loot-core/src/shared/transactions.ts @@ -79,7 +79,7 @@ export function recalculateSplit(trans: TransactionEntity) { 0, ); - const { error, ...rest } = trans; + const { error: _error, ...rest } = trans; return { ...rest, error: @@ -290,7 +290,7 @@ export function deleteTransaction( if (trans.id === id) { return null; } else if (trans.subtransactions?.length === 1) { - const { subtransactions, ...rest } = trans; + const { subtransactions: _subtransactions, ...rest } = trans; return { ...rest, is_parent: false, @@ -325,7 +325,7 @@ export function splitTransaction( makeChild(trans), ]; - const { error, ...rest } = trans; + const { error: _error, ...rest } = trans; return { ...rest, diff --git a/packages/sync-server/src/accounts/openid.js b/packages/sync-server/src/accounts/openid.js index bc039ea4e5..ca1884c287 100644 --- a/packages/sync-server/src/accounts/openid.js +++ b/packages/sync-server/src/accounts/openid.js @@ -366,7 +366,7 @@ export function isValidRedirectUrl(url) { } else { return false; } - } catch (err) { + } catch { return false; } } diff --git a/packages/sync-server/src/app-admin.js b/packages/sync-server/src/app-admin.js index 04f58a5d5f..14619ed1cd 100644 --- a/packages/sync-server/src/app-admin.js +++ b/packages/sync-server/src/app-admin.js @@ -21,7 +21,7 @@ app.get('/owner-created/', (req, res) => { try { const ownerCount = UserService.getOwnerCount(); res.json(ownerCount > 0); - } catch (error) { + } catch { res.status(500).json({ error: 'Failed to retrieve owner count' }); } }); diff --git a/packages/sync-server/src/app-cors-proxy.js b/packages/sync-server/src/app-cors-proxy.js index 81439f0c7e..bc2afb78bc 100644 --- a/packages/sync-server/src/app-cors-proxy.js +++ b/packages/sync-server/src/app-cors-proxy.js @@ -151,7 +151,7 @@ app.use('/', async (req, res) => { let url; try { url = new URL(targetUrlString); - } catch (e) { + } catch { return res.status(400).json({ error: 'Invalid url parameter' }); } diff --git a/packages/sync-server/src/app-gocardless/services/gocardless-service.js b/packages/sync-server/src/app-gocardless/services/gocardless-service.js index ed65e58182..f2c41b8526 100644 --- a/packages/sync-server/src/app-gocardless/services/gocardless-service.js +++ b/packages/sync-server/src/app-gocardless/services/gocardless-service.js @@ -332,7 +332,7 @@ export const goCardlessService = { }; try { response = await client.initSession(body); - } catch (error) { + } catch { try { console.log('Failed to link using:'); console.log(body); diff --git a/packages/sync-server/src/app-openid.js b/packages/sync-server/src/app-openid.js index b5124c2255..68bd2d3745 100644 --- a/packages/sync-server/src/app-openid.js +++ b/packages/sync-server/src/app-openid.js @@ -82,7 +82,7 @@ app.post('/config', async (req, res) => { try { const openIdConfig = JSON.parse(auth.extra_data); res.send({ status: 'ok', data: { openId: openIdConfig } }); - } catch (error) { + } catch { res .status(500) .send({ status: 'error', reason: 'Invalid OpenID configuration' }); diff --git a/upcoming-release-notes/6299.md b/upcoming-release-notes/6299.md new file mode 100644 index 0000000000..c939a1c99e --- /dev/null +++ b/upcoming-release-notes/6299.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MatissJanis] +--- + +Fix no-unused-vars lint violations