Files
pipopotamasu 18592451de Add support for Flat Config (eslint v9) (#54297)
Summary:
Implements: https://github.com/facebook/react-native/issues/42996

Add support for Flat config (eslint v9) to `eslint-config-react-native`. To achieve this, I created `packages/eslint-config-react-native/flat.js` to export flat config as well as maintain legacy config for backward compatibility. I recognize we have had [the PR for supporting Flat config](https://github.com/facebook/react-native/issues/42996) already, but it looks stale and doesn't seem likely to move forward. That's why I created this PR.

I also updated `eslint-plugin-react-native` and `eslint-plugin-specs`  so that they comply with the current eslint plugin format.

## Changelog:

[GENERAL] [ADDED] - Add support for Flat Config (eslint v9)

Pull Request resolved: https://github.com/facebook/react-native/pull/54297

Test Plan:
1. Pull this branch into your local machine
2. `cd packages/eslint-config-react-native`
3.  `yarn link`
4. Clone https://github.com/pipopotamasu/rn-eslint-config-test in your local machine
5. `cd path/to/rn-eslint-config-test`
6. `yarn install`
7. `yarn link "react-native/eslint-config"`
8. `yarn lint`
9. Confirm that eslint rules from `react-native/eslint-config` are applied

<img width="1470" height="628" alt="image" src="https://github.com/user-attachments/assets/955fd655-8a79-4dd4-9031-e505d218d63a" />

Reviewed By: vzaidman

Differential Revision: D85851077

Pulled By: huntie

fbshipit-source-id: 9c78ecc4f5c3b10175a89417628b599735f95215
2025-11-13 10:47:06 -08:00

72 lines
1.4 KiB
JavaScript

/**
* 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
* @noflow
*/
const sharedConfig = require('./shared.js');
module.exports = {
env: {
es6: true,
},
parserOptions: sharedConfig.parserOptions,
extends: ['prettier'],
plugins: [
'eslint-comments',
'react',
'react-hooks',
'react-native',
'@react-native',
'jest',
],
settings: sharedConfig.settings,
overrides: [
{
...sharedConfig.overrides.flow,
files: ['*.js'],
parser: '@babel/eslint-parser',
plugins: ['ft-flow'],
},
{
files: ['*.jsx'],
parser: '@babel/eslint-parser',
},
{
...sharedConfig.overrides.reactNative,
files: ['*.js', '*.jsx', '*.ts', '*.tsx'],
},
{
...sharedConfig.overrides.typescript,
files: ['*.ts', '*.tsx'],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint/eslint-plugin'],
},
{
...sharedConfig.overrides.jest,
files: [
'*.{spec,test}.{js,ts,tsx}',
'**/__{mocks,tests}__/**/*.{js,ts,tsx}',
],
env: {
jest: true,
'jest/globals': true,
},
},
],
// Map from global var to bool specifying if it can be redefined
globals: sharedConfig.globals,
rules: sharedConfig.rules,
};