lint: move eslint-native rules to oxlint (#6449)

* Update linting configuration and fix related issues

* Fix type coercion for comment ID in check-first-comment.js to ensure proper comparison with summary comment IDs
This commit is contained in:
Matiss Janis Aboltins
2025-12-19 19:57:30 +00:00
committed by GitHub
parent 80bb888bae
commit 07fbcebb6a
8 changed files with 80 additions and 128 deletions

View File

@@ -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}`,

View File

@@ -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",

View File

@@ -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',
},
},
{

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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)),
};

View File

@@ -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');
}
});

View File

@@ -0,0 +1,6 @@
---
category: Maintenance
authors: [MatissJanis]
---
lint: move more native eslint rules to oxlint