diff --git a/.github/actions/ai-generated-release-notes/check-first-comment.js b/.github/actions/ai-generated-release-notes/check-first-comment.js index 7a2dd328fd..70eb7d9b8f 100755 --- a/.github/actions/ai-generated-release-notes/check-first-comment.js +++ b/.github/actions/ai-generated-release-notes/check-first-comment.js @@ -6,7 +6,7 @@ import fs from 'fs'; const token = process.env.GITHUB_TOKEN; const repo = process.env.GITHUB_REPOSITORY; const issueNumber = process.env.GITHUB_EVENT_ISSUE_NUMBER; -const commentId = process.env.GITHUB_EVENT_COMMENT_ID; +const commentId = String(process.env.GITHUB_EVENT_COMMENT_ID); if (!token || !repo || !issueNumber || !commentId) { console.log('Missing required environment variables'); @@ -51,7 +51,7 @@ async function checkFirstComment() { const isFirstSummaryComment = coderabbitSummaryComments.length === 1 && - coderabbitSummaryComments[0].id == commentId; + String(coderabbitSummaryComments[0].id) === commentId; console.log( `CodeRabbit summary comments found: ${coderabbitSummaryComments.length}`, diff --git a/.oxlintrc.json b/.oxlintrc.json index ed43589a40..eda4455422 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -45,6 +45,7 @@ "fixStyle": "inline-type-imports" } ], + "typescript/no-implied-eval": "warn", "typescript/no-explicit-any": "warn", "typescript/no-restricted-types": [ "warn", @@ -114,15 +115,80 @@ "react/style-prop-object": "warn", // ESLint rules + "eslint/array-callback-return": "warn", + // "eslint/curly": ["warn", "multi-line", "consistent"], // TODO: re-enable? this rule is really slow "eslint/default-case": [ "warn", { "commentPattern": "^no default$" } ], + "eslint/eqeqeq": ["warn", "smart"], "eslint/no-array-constructor": "warn", + "eslint/no-caller": "warn", + "eslint/no-cond-assign": ["warn", "except-parens"], + "eslint/no-const-assign": "warn", + "eslint/no-control-regex": "warn", + "eslint/no-delete-var": "warn", + "eslint/no-dupe-class-members": "warn", + "eslint/no-dupe-keys": "warn", + "eslint/no-duplicate-case": "warn", + "eslint/no-empty-character-class": "warn", // "eslint/no-empty-function": "warn", // TODO: enable this + "eslint/no-empty-pattern": "warn", + "eslint/no-eval": "warn", + "eslint/no-ex-assign": "warn", + "eslint/no-extend-native": "warn", + "eslint/no-extra-bind": "warn", + "eslint/no-extra-label": "warn", + "eslint/no-fallthrough": "warn", + "eslint/no-func-assign": "warn", + "eslint/no-invalid-regexp": "warn", + "eslint/no-iterator": "warn", + "eslint/no-label-var": "warn", + "eslint/no-labels": [ + "warn", + { + "allowLoop": true, + "allowSwitch": false + } + ], + "eslint/no-new-func": "warn", + "eslint/no-script-url": "warn", + "eslint/no-self-assign": "warn", + "eslint/no-self-compare": "warn", + "eslint/no-sequences": "warn", + "eslint/no-shadow-restricted-names": "warn", + "eslint/no-sparse-arrays": "warn", + "eslint/no-template-curly-in-string": "warn", + "eslint/no-this-before-super": "warn", + "eslint/no-throw-literal": "warn", + "eslint/no-unreachable": "warn", + "eslint/no-obj-calls": "warn", + "eslint/no-new-wrappers": "warn", + "eslint/no-unsafe-negation": "warn", + "eslint/no-multi-str": "warn", + "eslint/no-global-assign": "warn", + "eslint/no-lone-blocks": "warn", + "eslint/no-unused-labels": "warn", "eslint/no-redeclare": "warn", + "eslint/no-useless-computed-key": "warn", + "eslint/no-useless-concat": "warn", + "eslint/no-useless-escape": "warn", + "eslint/require-yield": "warn", + "eslint/getter-return": "warn", + "eslint/unicode-bom": ["warn", "never"], + "eslint/no-use-isnan": "warn", + "eslint/valid-typeof": "warn", + "eslint/no-useless-rename": [ + "warn", + { + "ignoreDestructuring": false, + "ignoreImport": false, + "ignoreExport": false + } + ], + "eslint/no-with": "warn", "eslint/no-regex-spaces": "warn", "eslint/no-restricted-globals": [ "warn", diff --git a/eslint.config.mjs b/eslint.config.mjs index ba85f43252..3bba395501 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -15,6 +15,7 @@ export default defineConfig( 'packages/api/app/stats.json', 'packages/api/@types', 'packages/api/migrations', + 'packages/crdt/src/proto/sync_pb.js', 'packages/component-library/src/icons/**/*', 'packages/desktop-client/bundle.browser.js', 'packages/desktop-client/dev-dist/', @@ -38,19 +39,6 @@ export default defineConfig( '**/node_modules/', ], }, - { - // Temporary until the sync-server is migrated to TypeScript - files: [ - 'packages/sync-server/**/*.spec.{js,jsx}', - 'packages/sync-server/**/*.test.{js,jsx}', - ], - languageOptions: { - globals: { - ...globals.jest, - vi: true, - }, - }, - }, { linterOptions: { reportUnusedDisableDirectives: true, @@ -83,12 +71,6 @@ export default defineConfig( react: { version: 'detect', }, - - 'import/resolver': { - typescript: { - alwaysTryTypes: true, - }, - }, }, }, pluginTypescript.configs.base, @@ -109,107 +91,12 @@ export default defineConfig( }, rules: { // http://eslint.org/docs/rules/ - 'array-callback-return': 'warn', - - curly: ['warn', 'multi-line', 'consistent'], - eqeqeq: ['warn', 'smart'], - 'no-array-constructor': 'warn', - 'no-caller': 'warn', - 'no-cond-assign': ['warn', 'except-parens'], - 'no-const-assign': 'warn', - 'no-control-regex': 'warn', - 'no-delete-var': 'warn', 'no-dupe-args': 'warn', - 'no-dupe-class-members': 'warn', - 'no-dupe-keys': 'warn', - 'no-duplicate-case': 'warn', - 'no-empty-character-class': 'warn', - 'no-empty-pattern': 'warn', - 'no-eval': 'warn', - 'no-ex-assign': 'warn', - 'no-extend-native': 'warn', - 'no-extra-bind': 'warn', - 'no-extra-label': 'warn', - 'no-fallthrough': 'warn', - 'no-func-assign': 'warn', - 'no-implied-eval': 'warn', - 'no-invalid-regexp': 'warn', - 'no-iterator': 'warn', - 'no-label-var': 'warn', - - 'no-labels': [ - 'warn', - { - allowLoop: true, - allowSwitch: false, - }, - ], - - 'no-lone-blocks': 'warn', - - 'no-multi-str': 'warn', - 'no-global-assign': 'warn', - 'no-unsafe-negation': 'warn', - 'no-new-func': 'warn', 'no-new-object': 'warn', 'no-new-symbol': 'warn', - 'no-new-wrappers': 'warn', - 'no-obj-calls': 'warn', 'no-octal': 'warn', 'no-octal-escape': 'warn', - 'no-script-url': 'warn', - 'no-self-assign': 'warn', - 'no-self-compare': 'warn', - 'no-sequences': 'warn', - 'no-shadow-restricted-names': 'warn', - 'no-sparse-arrays': 'warn', - 'no-template-curly-in-string': 'warn', - 'no-this-before-super': 'warn', - 'no-throw-literal': 'warn', - 'no-undef': 'error', - 'no-unreachable': 'warn', - - 'no-unused-expressions': [ - 'error', - { - allowShortCircuit: true, - allowTernary: true, - allowTaggedTemplates: true, - }, - ], - - 'no-unused-labels': 'warn', - - 'no-use-before-define': [ - 'warn', - { - functions: false, - classes: false, - variables: false, - }, - ], - - 'no-useless-computed-key': 'warn', - 'no-useless-concat': 'warn', - 'no-useless-constructor': 'warn', - 'no-useless-escape': 'warn', - - 'no-useless-rename': [ - 'warn', - { - ignoreDestructuring: false, - ignoreImport: false, - ignoreExport: false, - }, - ], - - 'no-with': 'warn', - - 'require-yield': 'warn', strict: ['warn', 'never'], - 'unicode-bom': ['warn', 'never'], - 'use-isnan': 'warn', - 'valid-typeof': 'warn', 'no-restricted-properties': [ 'error', @@ -227,8 +114,6 @@ export default defineConfig( }, ], - 'getter-return': 'warn', - 'perfectionist/sort-imports': [ 'warn', { @@ -293,10 +178,6 @@ export default defineConfig( 'actual/prefer-if-statement': 'warn', 'actual/prefer-logger-over-console': 'error', - // https://github.com/eslint/eslint/issues/16954 - // https://github.com/eslint/eslint/issues/16953 - 'no-loop-func': 'off', - 'object-shorthand': ['warn', 'properties'], 'no-restricted-syntax': [ @@ -317,7 +198,6 @@ export default defineConfig( // Rules disabled during TS migration 'prefer-const': 'warn', - 'prefer-spread': 'off', }, }, { diff --git a/packages/crdt/src/crdt/merkle.ts b/packages/crdt/src/crdt/merkle.ts index e2e845c13a..36a15167b6 100644 --- a/packages/crdt/src/crdt/merkle.ts +++ b/packages/crdt/src/crdt/merkle.ts @@ -134,7 +134,7 @@ export function diff(trie1: TrieNode, trie2: TrieNode): number | null { node2 = node2[diffkey] || emptyTrie(); } - // eslint-disable-next-line no-unreachable + // oxlint-disable-next-line no-unreachable return null; } diff --git a/packages/loot-core/src/platform/server/sqlite/unicodeLike.test.ts b/packages/loot-core/src/platform/server/sqlite/unicodeLike.test.ts index 04f75619f6..a5fab63c13 100644 --- a/packages/loot-core/src/platform/server/sqlite/unicodeLike.test.ts +++ b/packages/loot-core/src/platform/server/sqlite/unicodeLike.test.ts @@ -14,6 +14,7 @@ describe('unicode LIKE functionality', () => { }); it('should match special characters', () => { + // oxlint-disable-next-line no-template-curly-in-string const result = unicodeLike('.*+^${}()|[]\\', '.*+^${}()|[]\\'); expect(result).toBe(1); diff --git a/packages/loot-core/src/server/cloud-storage.ts b/packages/loot-core/src/server/cloud-storage.ts index 3094b47ac5..d550078149 100644 --- a/packages/loot-core/src/server/cloud-storage.ts +++ b/packages/loot-core/src/server/cloud-storage.ts @@ -90,7 +90,7 @@ export async function checkKey(): Promise<{ return { valid: // This == comparison is important, they could be null or undefined - // eslint-disable-next-line eqeqeq + // oxlint-disable-next-line eslint/eqeqeq res.id == encryptKeyId && (encryptKeyId == null || encryption.hasKey(encryptKeyId)), }; diff --git a/packages/loot-core/src/server/sync/migrate.test.ts b/packages/loot-core/src/server/sync/migrate.test.ts index 3c42b4b034..06efe29f86 100644 --- a/packages/loot-core/src/server/sync/migrate.test.ts +++ b/packages/loot-core/src/server/sync/migrate.test.ts @@ -105,13 +105,12 @@ describe('sync migrations', () => { { isChild: number; parent_id: string | null; id: string } >; if ( - ts && - [...ts.values()].find( + !ts || + ![...ts.values()].find( t => t.isChild === 1 && t.parent_id == null && t.id.includes('/'), ) ) { - } else { tracer.event('applied'); } }); diff --git a/upcoming-release-notes/6449.md b/upcoming-release-notes/6449.md new file mode 100644 index 0000000000..9f3e439943 --- /dev/null +++ b/upcoming-release-notes/6449.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MatissJanis] +--- + +lint: move more native eslint rules to oxlint