From 7b0ba6d94f9a325efdded1d2a1727c833b8f97f4 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Thu, 16 Jun 2022 10:12:58 -0700 Subject: [PATCH] switch from babel-eslint to hermes-eslint for flow code Summary: `hermes-eslint` is built by Meta to work with the latest Flow code. It follows the latest ESLint standards and AST, and has a true scope analyser to ensure best compatibility with core ESLint rules. Reviewed By: motiz88 Differential Revision: D37181192 fbshipit-source-id: 1f59e01f306792e67a4977435c5c77e0000d960a --- .eslintrc | 60 ---------------------------------------- .eslintrc.js | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + yarn.lock | 21 ++++++++++++++ 4 files changed, 99 insertions(+), 60 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index c05c62620cbf81..00000000000000 --- a/.eslintrc +++ /dev/null @@ -1,60 +0,0 @@ -{ - "root": true, - - "extends": [ - "./packages/eslint-config-react-native-community/index.js" - ], - - "plugins": [ - "@react-native/eslint-plugin-specs" - ], - - "overrides": [ - { - "files": [ - "Libraries/**/*.js", - ], - "rules": { - "@react-native-community/no-haste-imports": 2, - "@react-native-community/error-subclass-name": 2, - "@react-native-community/platform-colors": 2, - "@react-native/specs/react-native-modules": 2 - } - }, - { - "files": [ - "flow-typed/**/*.js", - ], - "rules": { - quotes: 0 - } - }, - { - "files": [ - "**/__fixtures__/**/*.js", - "**/__mocks__/**/*.js", - "**/__tests__/**/*.js", - "jest/**/*.js", - "packages/rn-tester/**/*.js", - ], - "globals": { - // Expose some Jest globals for test helpers - "afterAll": true, - "afterEach": true, - "beforeAll": true, - "beforeEach": true, - "expect": true, - "jest": true, - }, - }, - { - "files": [ - "**/__tests__/**/*-test.js", - ], - "env": { - "jasmine": true, - "jest": true - } - } - ] -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000000000..3d0dad11dfcd21 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,77 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +'use strict'; + +module.exports = { + root: true, + + extends: ['./packages/eslint-config-react-native-community/index.js'], + + plugins: ['@react-native/eslint-plugin-specs'], + + overrides: [ + // overriding the JS config from eslint-config-react-native-community config to ensure + // that we use hermes-eslint for all js files + { + files: ['*.js'], + parser: 'hermes-eslint', + rules: { + // These rules are not required with hermes-eslint + 'ft-flow/define-flow-type': 0, + 'ft-flow/use-flow-type': 0, + 'flowtype/define-flow-type': 0, + 'flowtype/use-flow-type': 0, + // flow handles this check for us, so it's not required + 'no-undef': 0, + }, + }, + + { + files: ['Libraries/**/*.js'], + rules: { + '@react-native-community/no-haste-imports': 2, + '@react-native-community/error-subclass-name': 2, + '@react-native-community/platform-colors': 2, + '@react-native/specs/react-native-modules': 2, + }, + }, + { + files: ['flow-typed/**/*.js'], + rules: { + quotes: 0, + }, + }, + { + files: [ + '**/__fixtures__/**/*.js', + '**/__mocks__/**/*.js', + '**/__tests__/**/*.js', + 'jest/**/*.js', + 'packages/rn-tester/**/*.js', + ], + globals: { + // Expose some Jest globals for test helpers + afterAll: true, + afterEach: true, + beforeAll: true, + beforeEach: true, + expect: true, + jest: true, + }, + }, + { + files: ['**/__tests__/**/*-test.js'], + env: { + jasmine: true, + jest: true, + }, + }, + ], +}; diff --git a/package.json b/package.json index 1802524aaff4e0..087d7159b71ca5 100644 --- a/package.json +++ b/package.json @@ -137,6 +137,7 @@ }, "devDependencies": { "flow-bin": "^0.180.0", + "hermes-eslint": "0.8.0", "react": "18.2.0", "react-test-renderer": "^18.2.0" }, diff --git a/yarn.lock b/yarn.lock index c0a85d50568b62..72584261b96478 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3518,11 +3518,25 @@ hermes-engine@~0.11.0: resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.11.0.tgz#bb224730d230a02a5af02c4e090d1f52d57dd3db" integrity sha512-7aMUlZja2IyLYAcZ69NBnwJAR5ZOYlSllj0oMpx08a8HzxHOys0eKCzfphrf6D0vX1JGO1QQvVsQKe6TkYherw== +hermes-eslint@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-eslint/-/hermes-eslint-0.8.0.tgz#e0a892d3f63f25d0966aa558ed40e373e2d0a065" + integrity sha512-TXbTys9Ssx9kzB8W18TK8m23QTSG6RqI4dOVzG12DslDJGNBU3pJV8AWkiwz8aOyCU6uiWhbVE2855E7g3iXoA== + dependencies: + esrecurse "^4.3.0" + hermes-estree "0.8.0" + hermes-parser "0.8.0" + hermes-estree@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.6.0.tgz#e866fddae1b80aec65fe2ae450a5f2070ad54033" integrity sha512-2YTGzJCkhdmT6VuNprWjXnvTvw/3iPNw804oc7yknvQpNKo+vJGZmtvLLCghOZf0OwzKaNAzeIMp71zQbNl09w== +hermes-estree@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.8.0.tgz#530be27243ca49f008381c1f3e8b18fb26bf9ec0" + integrity sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q== + hermes-parser@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.6.0.tgz#00d14e91bca830b3c1457050fa4187400cb96328" @@ -3530,6 +3544,13 @@ hermes-parser@0.6.0: dependencies: hermes-estree "0.6.0" +hermes-parser@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.8.0.tgz#116dceaba32e45b16d6aefb5c4c830eaeba2d257" + integrity sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA== + dependencies: + hermes-estree "0.8.0" + hermes-profile-transformer@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b"