From 0a3857c7f5195d95a094a1465cd64626cc4ae477 Mon Sep 17 00:00:00 2001 From: Qichen Zhu <57348009+QichenZhu@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:08:57 +1300 Subject: [PATCH 1/6] Ignore .rock directory --- eslint.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.js b/eslint.config.js index 1d021ecf75c9..addc8e9acf57 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -571,6 +571,7 @@ const config = defineConfig([ 'docs/assets/**/*', 'web/gtm.js', '**/.expo/**/*', + '**/.rock/**/*', 'src/libs/SearchParser/searchParser.js', 'src/libs/SearchParser/autocompleteParser.js', 'help/_scripts/**/*', From 1cde6def86788979174de3a9bcb9ffbfcc3bf0b9 Mon Sep 17 00:00:00 2001 From: Qichen Zhu <57348009+QichenZhu@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:09:17 +1300 Subject: [PATCH 2/6] Remove rulesdir/no-multiple-onyx-in-file --- eslint.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/eslint.config.js b/eslint.config.js index addc8e9acf57..82c7b7ee4857 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -269,7 +269,6 @@ const config = defineConfig([ // Rulesdir specific rules 'rulesdir/no-default-props': 'error', 'rulesdir/prefer-type-fest': 'error', - 'rulesdir/no-multiple-onyx-in-file': 'off', 'rulesdir/prefer-underscore-method': 'off', 'rulesdir/prefer-import-module-contents': 'off', 'rulesdir/no-beta-handler': 'error', From 38344480446b665d1b3ddd717a00c16e780f1bb1 Mon Sep 17 00:00:00 2001 From: Qichen Zhu <57348009+QichenZhu@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:09:37 +1300 Subject: [PATCH 3/6] Unsuppress @typescript-eslint/no-unused-vars --- .../ProductTrainingContext/TOOLTIPS.ts | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/components/ProductTrainingContext/TOOLTIPS.ts b/src/components/ProductTrainingContext/TOOLTIPS.ts index 0f4624473d4c..3e9cfb979e7b 100644 --- a/src/components/ProductTrainingContext/TOOLTIPS.ts +++ b/src/components/ProductTrainingContext/TOOLTIPS.ts @@ -3,20 +3,10 @@ import {dismissProductTraining} from '@libs/actions/Welcome'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; -const { - CONCIERGE_LHN_GBR, - RENAME_SAVED_SEARCH, - SCAN_TEST_TOOLTIP, - SCAN_TEST_TOOLTIP_MANAGER, - SCAN_TEST_CONFIRMATION, - OUTSTANDING_FILTER, - ACCOUNT_SWITCHER, - SCAN_TEST_DRIVE_CONFIRMATION, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - MULTI_SCAN_EDUCATIONAL_MODAL, -} = CONST.PRODUCT_TRAINING_TOOLTIP_NAMES; +const {CONCIERGE_LHN_GBR, RENAME_SAVED_SEARCH, SCAN_TEST_TOOLTIP, SCAN_TEST_TOOLTIP_MANAGER, SCAN_TEST_CONFIRMATION, OUTSTANDING_FILTER, ACCOUNT_SWITCHER, SCAN_TEST_DRIVE_CONFIRMATION} = + CONST.PRODUCT_TRAINING_TOOLTIP_NAMES; -type ProductTrainingTooltipName = Exclude, typeof MULTI_SCAN_EDUCATIONAL_MODAL>; +type ProductTrainingTooltipName = Exclude, typeof CONST.PRODUCT_TRAINING_TOOLTIP_NAMES.MULTI_SCAN_EDUCATIONAL_MODAL>; type ShouldShowConditionProps = { shouldUseNarrowLayout: boolean; From ede464c8c06e0e6eefd27c02de52b8f0d415aa75 Mon Sep 17 00:00:00 2001 From: Qichen Zhu <57348009+QichenZhu@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:13:20 +1300 Subject: [PATCH 4/6] Fix MODULE_TYPELESS_PACKAGE_JSON warnings --- eslint.config.changed.js => eslint.changed.config.mjs | 0 eslint.config.js => eslint.config.mjs | 0 scripts/lintChanged.sh | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename eslint.config.changed.js => eslint.changed.config.mjs (100%) rename eslint.config.js => eslint.config.mjs (100%) diff --git a/eslint.config.changed.js b/eslint.changed.config.mjs similarity index 100% rename from eslint.config.changed.js rename to eslint.changed.config.mjs diff --git a/eslint.config.js b/eslint.config.mjs similarity index 100% rename from eslint.config.js rename to eslint.config.mjs diff --git a/scripts/lintChanged.sh b/scripts/lintChanged.sh index a07241162f45..94740ab7f5d4 100755 --- a/scripts/lintChanged.sh +++ b/scripts/lintChanged.sh @@ -36,7 +36,7 @@ fi # Run eslint on the changed files if [[ -n "$GIT_DIFF_OUTPUT" ]] ; then # shellcheck disable=SC2086 # For multiple files in variable - eslint --max-warnings=0 --config ./eslint.config.changed.js $GIT_DIFF_OUTPUT + eslint --max-warnings=0 --config ./eslint.changed.config.mjs $GIT_DIFF_OUTPUT else info "No TypeScript files changed" fi From 85037a8a656e3bade21cd2a95d64e586bd078d75 Mon Sep 17 00:00:00 2001 From: Qichen Zhu <57348009+QichenZhu@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:14:53 +1300 Subject: [PATCH 5/6] Address @typescript-eslint/await-thenable errors --- scripts/combine-web-sourcemaps.ts | 1 - src/libs/actions/IOU.ts | 3 ++- src/pages/iou/request/step/IOURequestStepConfirmation.tsx | 3 +-- src/pages/iou/request/step/IOURequestStepScan/index.tsx | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/combine-web-sourcemaps.ts b/scripts/combine-web-sourcemaps.ts index 4a5972ed79c5..f35c5e56181d 100755 --- a/scripts/combine-web-sourcemaps.ts +++ b/scripts/combine-web-sourcemaps.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/await-thenable */ import fs from 'fs'; import path from 'path'; import type {RawSourceMap} from 'source-map'; diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index c3fa75846ef5..977293b2ab0a 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -12048,7 +12048,8 @@ function checkIfScanFileCanBeRead( onFailure: () => void, ) { if (!receiptFilename || !receiptPath) { - return; + onFailure(); + return Promise.resolve(); } return readFileAsync(receiptPath.toString(), receiptFilename, onSuccess, onFailure, receiptType); diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 3f2f94dea373..e1e17988681d 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -410,7 +410,6 @@ function IOURequestStepConfirmation({ let isScanFilesCanBeRead = true; Promise.all( - // eslint-disable-next-line @typescript-eslint/await-thenable transactions.map((item) => { const itemReceiptFilename = getReceiptFilenameFromTransaction(item); const itemReceiptPath = item.receipt?.source; @@ -421,7 +420,7 @@ function IOURequestStepConfirmation({ if (item.receipt) { newReceiptFiles = {...newReceiptFiles, [item.transactionID]: item.receipt}; } - return; + return Promise.resolve(); } const onSuccess = (file: File) => { diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.tsx index 9e78940ac2f4..d61b92953fcb 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.tsx @@ -241,13 +241,12 @@ function IOURequestStepScan({ let isAllScanFilesCanBeRead = true; Promise.all( - // eslint-disable-next-line @typescript-eslint/await-thenable transactions.map((item) => { const itemReceiptPath = item.receipt?.source; const isLocalFile = isLocalFileFileUtils(itemReceiptPath); if (!isLocalFile) { - return; + return Promise.resolve(); } const onFailure = () => { From 47e70c80455e3bd87758609f1b02fff607ba1907 Mon Sep 17 00:00:00 2001 From: Qichen Zhu <57348009+QichenZhu@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:15:21 +1300 Subject: [PATCH 6/6] Inherit main config for changed files --- eslint.changed.config.mjs | 68 +++------------------------------------ scripts/lintChanged.sh | 2 +- 2 files changed, 5 insertions(+), 65 deletions(-) diff --git a/eslint.changed.config.mjs b/eslint.changed.config.mjs index 62c6ea1ef2cb..882c33faea73 100644 --- a/eslint.changed.config.mjs +++ b/eslint.changed.config.mjs @@ -1,49 +1,12 @@ -import {FlatCompat} from '@eslint/eslintrc'; -import tsParser from '@typescript-eslint/parser'; -import expensifyConfig from 'eslint-config-expensify'; -import lodash from 'eslint-plugin-lodash'; -import reactCompiler from 'eslint-plugin-react-compiler'; -import reactNativeA11Y from 'eslint-plugin-react-native-a11y'; -import testingLibrary from 'eslint-plugin-testing-library'; -import youDontNeedLodashUnderscore from 'eslint-plugin-you-dont-need-lodash-underscore'; -import {defineConfig, globalIgnores} from 'eslint/config'; -import path from 'node:path'; -import {fileURLToPath} from 'node:url'; -import typescriptEslint from 'typescript-eslint'; - -const filename = fileURLToPath(import.meta.url); -const dirname = path.dirname(filename); +import {defineConfig} from 'eslint/config'; +import mainConfig from './eslint.config.mjs'; const config = defineConfig([ - { - extends: new FlatCompat({baseDirectory: dirname}).extends('plugin:@dword-design/import-alias/recommended'), - - plugins: Object.assign( - { - '@typescript-eslint': typescriptEslint.plugin, - 'you-dont-need-lodash-underscore': youDontNeedLodashUnderscore, - 'react-native-a11y': reactNativeA11Y, - 'testing-library': testingLibrary, - 'react-compiler': reactCompiler, - lodash, - }, - ...expensifyConfig.map((item) => item.plugins), - ), - - languageOptions: { - parser: tsParser, - parserOptions: { - project: path.resolve(dirname, './tsconfig.json'), - }, - }, - - linterOptions: { - reportUnusedDisableDirectives: 'off', - }, + ...mainConfig, + { files: ['**/*.ts', '**/*.tsx'], rules: { - '@dword-design/import-alias/prefer-alias': 'off', '@typescript-eslint/no-deprecated': 'error', 'rulesdir/no-default-id-values': 'error', 'rulesdir/provide-canBeMissing-in-useOnyx': 'error', @@ -78,29 +41,6 @@ const config = defineConfig([ ], }, }, - - globalIgnores([ - '!**/.storybook', - '!**/.github', - '.github/actions/**/index.js', - '**/*.config.js', - '**/*.config.mjs', - '**/node_modules/**/*', - '**/dist/**/*', - 'android/**/build/**/*', - 'docs/vendor/**/*', - 'docs/assets/**/*', - 'web/gtm.js', - '**/.expo/**/*', - 'src/libs/SearchParser/searchParser.js', - 'src/libs/SearchParser/autocompleteParser.js', - 'help/_scripts/**/*', - 'modules/ExpensifyNitroUtils/nitrogen/**/*', - 'Mobile-Expensify/**/*', - '**/vendor', - 'modules/group-ib-fp/**/*', - 'web/snippets/gib.js', - ]), ]); export default config; diff --git a/scripts/lintChanged.sh b/scripts/lintChanged.sh index 94740ab7f5d4..56f33828b420 100755 --- a/scripts/lintChanged.sh +++ b/scripts/lintChanged.sh @@ -36,7 +36,7 @@ fi # Run eslint on the changed files if [[ -n "$GIT_DIFF_OUTPUT" ]] ; then # shellcheck disable=SC2086 # For multiple files in variable - eslint --max-warnings=0 --config ./eslint.changed.config.mjs $GIT_DIFF_OUTPUT + eslint --max-warnings=241 --config ./eslint.changed.config.mjs $GIT_DIFF_OUTPUT else info "No TypeScript files changed" fi