@react-native/eslint-config 0.72.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/BUCK +23 -0
  2. package/README.md +24 -0
  3. package/index.js +340 -0
  4. package/package.json +36 -0
package/BUCK ADDED
@@ -0,0 +1,23 @@
1
+ load("@fbsource//tools/build_defs/third_party:yarn_defs.bzl", "yarn_workspace")
2
+
3
+ yarn_workspace(
4
+ name = "yarn-workspace",
5
+ srcs = glob(
6
+ ["**/*.js"],
7
+ exclude = [
8
+ "**/__fixtures__/**",
9
+ "**/__flowtests__/**",
10
+ "**/__mocks__/**",
11
+ "**/__server_snapshot_tests__/**",
12
+ "**/__tests__/**",
13
+ "**/node_modules/**",
14
+ "**/node_modules/.bin/**",
15
+ "**/.*",
16
+ "**/.*/**",
17
+ "**/.*/.*",
18
+ "**/*.xcodeproj/**",
19
+ "**/*.xcworkspace/**",
20
+ ],
21
+ ),
22
+ visibility = ["PUBLIC"],
23
+ )
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # @react-native/eslint-config
2
+
3
+ [![Version][version-badge]][package]
4
+
5
+ ## Installation
6
+
7
+ ```
8
+ yarn add --dev eslint prettier @react-native/eslint-config
9
+ ```
10
+
11
+ *Note: We're using `yarn` to install deps. Feel free to change commands to use `npm` 3+ and `npx` if you like*
12
+
13
+ ## Usage
14
+
15
+ Add to your eslint config (`.eslintrc`, or `eslintConfig` field in `package.json`):
16
+
17
+ ```json
18
+ {
19
+ "extends": "@react-native"
20
+ }
21
+ ```
22
+
23
+ [version-badge]: https://img.shields.io/npm/v/@react-native/eslint-config.svg?style=flat-square
24
+ [package]: https://www.npmjs.com/package/@react-native/eslint-config
package/index.js ADDED
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ */
9
+
10
+ module.exports = {
11
+ env: {
12
+ es6: true,
13
+ },
14
+
15
+ parserOptions: {
16
+ sourceType: 'module',
17
+ ecmaFeatures: {
18
+ jsx: true,
19
+ },
20
+ },
21
+
22
+ extends: ['plugin:prettier/recommended'],
23
+
24
+ plugins: [
25
+ 'eslint-comments',
26
+ 'react',
27
+ 'react-hooks',
28
+ 'react-native',
29
+ '@react-native',
30
+ 'jest',
31
+ ],
32
+
33
+ settings: {
34
+ react: {
35
+ version: 'detect',
36
+ },
37
+ },
38
+
39
+ overrides: [
40
+ {
41
+ files: ['*.js'],
42
+ parser: '@babel/eslint-parser',
43
+ plugins: ['ft-flow'],
44
+ rules: {
45
+ // Flow Plugin
46
+ // The following rules are made available via `eslint-plugin-ft-flow`
47
+
48
+ 'ft-flow/define-flow-type': 1,
49
+ 'ft-flow/use-flow-type': 1,
50
+ },
51
+ },
52
+ {
53
+ files: ['*.jsx'],
54
+ parser: '@babel/eslint-parser',
55
+ },
56
+ {
57
+ files: ['*.ts', '*.tsx'],
58
+ parser: '@typescript-eslint/parser',
59
+ plugins: ['@typescript-eslint/eslint-plugin'],
60
+ rules: {
61
+ '@typescript-eslint/no-unused-vars': [
62
+ 'error',
63
+ {
64
+ argsIgnorePattern: '^_',
65
+ destructuredArrayIgnorePattern: '^_',
66
+ },
67
+ ],
68
+ 'no-unused-vars': 'off',
69
+ 'no-shadow': 'off',
70
+ '@typescript-eslint/no-shadow': 1,
71
+ 'no-undef': 'off',
72
+ 'func-call-spacing': 'off',
73
+ '@typescript-eslint/func-call-spacing': 1,
74
+ },
75
+ },
76
+ {
77
+ files: [
78
+ '*.{spec,test}.{js,ts,tsx}',
79
+ '**/__{mocks,tests}__/**/*.{js,ts,tsx}',
80
+ ],
81
+ env: {
82
+ jest: true,
83
+ 'jest/globals': true,
84
+ },
85
+ rules: {
86
+ 'react-native/no-inline-styles': 0,
87
+ quotes: [1, 'single', {avoidEscape: true, allowTemplateLiterals: true}],
88
+ },
89
+ },
90
+ ],
91
+
92
+ // Map from global var to bool specifying if it can be redefined
93
+ globals: {
94
+ __DEV__: true,
95
+ __dirname: false,
96
+ __fbBatchedBridgeConfig: false,
97
+ AbortController: false,
98
+ Blob: true,
99
+ alert: false,
100
+ cancelAnimationFrame: false,
101
+ cancelIdleCallback: false,
102
+ clearImmediate: true,
103
+ clearInterval: false,
104
+ clearTimeout: false,
105
+ console: false,
106
+ document: false,
107
+ ErrorUtils: false,
108
+ escape: false,
109
+ Event: false,
110
+ EventTarget: false,
111
+ exports: false,
112
+ fetch: false,
113
+ File: true,
114
+ FileReader: false,
115
+ FormData: false,
116
+ global: false,
117
+ Headers: false,
118
+ Intl: false,
119
+ Map: true,
120
+ module: false,
121
+ navigator: false,
122
+ process: false,
123
+ Promise: true,
124
+ requestAnimationFrame: true,
125
+ requestIdleCallback: true,
126
+ require: false,
127
+ Set: true,
128
+ setImmediate: true,
129
+ setInterval: false,
130
+ setTimeout: false,
131
+ queueMicrotask: true,
132
+ URL: false,
133
+ URLSearchParams: false,
134
+ WebSocket: true,
135
+ window: false,
136
+ XMLHttpRequest: false,
137
+ },
138
+
139
+ rules: {
140
+ // General
141
+ 'comma-dangle': [1, 'always-multiline'], // allow or disallow trailing commas
142
+ 'no-cond-assign': 1, // disallow assignment in conditional expressions
143
+ 'no-console': 0, // disallow use of console (off by default in the node environment)
144
+ 'no-const-assign': 2, // disallow assignment to const-declared variables
145
+ 'no-constant-condition': 0, // disallow use of constant expressions in conditions
146
+ 'no-control-regex': 1, // disallow control characters in regular expressions
147
+ 'no-debugger': 1, // disallow use of debugger
148
+ 'no-dupe-class-members': 2, // Disallow duplicate name in class members
149
+ 'no-dupe-keys': 2, // disallow duplicate keys when creating object literals
150
+ 'no-empty': 0, // disallow empty statements
151
+ 'no-ex-assign': 1, // disallow assigning to the exception in a catch block
152
+ 'no-extra-boolean-cast': 1, // disallow double-negation boolean casts in a boolean context
153
+ 'no-extra-parens': 0, // disallow unnecessary parentheses (off by default)
154
+ 'no-extra-semi': 1, // disallow unnecessary semicolons
155
+ 'no-func-assign': 1, // disallow overwriting functions written as function declarations
156
+ 'no-inner-declarations': 0, // disallow function or variable declarations in nested blocks
157
+ 'no-invalid-regexp': 1, // disallow invalid regular expression strings in the RegExp constructor
158
+ 'no-negated-in-lhs': 1, // disallow negation of the left operand of an in expression
159
+ 'no-obj-calls': 1, // disallow the use of object properties of the global object (Math and JSON) as functions
160
+ 'no-regex-spaces': 1, // disallow multiple spaces in a regular expression literal
161
+ 'no-reserved-keys': 0, // disallow reserved words being used as object literal keys (off by default)
162
+ 'no-sparse-arrays': 1, // disallow sparse arrays
163
+ 'no-unreachable': 2, // disallow unreachable statements after a return, throw, continue, or break statement
164
+ 'use-isnan': 1, // disallow comparisons with the value NaN
165
+ 'valid-jsdoc': 0, // Ensure JSDoc comments are valid (off by default)
166
+ 'valid-typeof': 1, // Ensure that the results of typeof are compared against a valid string
167
+
168
+ // Best Practices
169
+ // These are rules designed to prevent you from making mistakes. They either prescribe a better way of doing something or help you avoid footguns.
170
+
171
+ 'block-scoped-var': 0, // treat var statements as if they were block scoped (off by default)
172
+ complexity: 0, // specify the maximum cyclomatic complexity allowed in a program (off by default)
173
+ 'consistent-return': 0, // require return statements to either always or never specify values
174
+ curly: 1, // specify curly brace conventions for all control statements
175
+ 'default-case': 0, // require default case in switch statements (off by default)
176
+ 'dot-notation': 1, // encourages use of dot notation whenever possible
177
+ eqeqeq: [1, 'allow-null'], // require the use of === and !==
178
+ 'guard-for-in': 0, // make sure for-in loops have an if statement (off by default)
179
+ 'no-alert': 1, // disallow the use of alert, confirm, and prompt
180
+ 'no-caller': 1, // disallow use of arguments.caller or arguments.callee
181
+ 'no-div-regex': 1, // disallow division operators explicitly at beginning of regular expression (off by default)
182
+ 'no-else-return': 0, // disallow else after a return in an if (off by default)
183
+ 'no-eq-null': 0, // disallow comparisons to null without a type-checking operator (off by default)
184
+ 'no-eval': 2, // disallow use of eval()
185
+ 'no-extend-native': 1, // disallow adding to native types
186
+ 'no-extra-bind': 1, // disallow unnecessary function binding
187
+ 'no-fallthrough': 1, // disallow fallthrough of case statements
188
+ 'no-floating-decimal': 1, // disallow the use of leading or trailing decimal points in numeric literals (off by default)
189
+ 'no-implied-eval': 1, // disallow use of eval()-like methods
190
+ 'no-labels': 1, // disallow use of labeled statements
191
+ 'no-iterator': 1, // disallow usage of __iterator__ property
192
+ 'no-lone-blocks': 1, // disallow unnecessary nested blocks
193
+ 'no-loop-func': 0, // disallow creation of functions within loops
194
+ 'no-multi-str': 0, // disallow use of multiline strings
195
+ 'no-native-reassign': 0, // disallow reassignments of native objects
196
+ 'no-new': 1, // disallow use of new operator when not part of the assignment or comparison
197
+ 'no-new-func': 2, // disallow use of new operator for Function object
198
+ 'no-new-wrappers': 1, // disallows creating new instances of String,Number, and Boolean
199
+ 'no-octal': 1, // disallow use of octal literals
200
+ 'no-octal-escape': 1, // disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
201
+ 'no-proto': 1, // disallow usage of __proto__ property
202
+ 'no-redeclare': 0, // disallow declaring the same variable more then once
203
+ 'no-return-assign': 1, // disallow use of assignment in return statement
204
+ 'no-script-url': 1, // disallow use of javascript: urls.
205
+ 'no-self-compare': 1, // disallow comparisons where both sides are exactly the same (off by default)
206
+ 'no-sequences': 1, // disallow use of comma operator
207
+ 'no-unused-expressions': 0, // disallow usage of expressions in statement position
208
+ 'no-useless-escape': 1, // disallow escapes that don't have any effect in literals
209
+ 'no-void': 1, // disallow use of void operator (off by default)
210
+ 'no-warning-comments': 0, // disallow usage of configurable warning terms in comments": 1, // e.g. TODO or FIXME (off by default)
211
+ 'no-with': 1, // disallow use of the with statement
212
+ radix: 1, // require use of the second argument for parseInt() (off by default)
213
+ 'semi-spacing': 1, // require a space after a semi-colon
214
+ 'vars-on-top': 0, // requires to declare all vars on top of their containing scope (off by default)
215
+ 'wrap-iife': 0, // require immediate function invocation to be wrapped in parentheses (off by default)
216
+ yoda: 1, // require or disallow Yoda conditions
217
+
218
+ // Variables
219
+ // These rules have to do with variable declarations.
220
+
221
+ 'no-catch-shadow': 1, // disallow the catch clause parameter name being the same as a variable in the outer scope (off by default in the node environment)
222
+ 'no-delete-var': 1, // disallow deletion of variables
223
+ 'no-label-var': 1, // disallow labels that share a name with a variable
224
+ 'no-shadow': 1, // disallow declaration of variables already declared in the outer scope
225
+ 'no-shadow-restricted-names': 1, // disallow shadowing of names such as arguments
226
+ 'no-undef': 2, // disallow use of undeclared variables unless mentioned in a /*global */ block
227
+ 'no-undefined': 0, // disallow use of undefined variable (off by default)
228
+ 'no-undef-init': 1, // disallow use of undefined when initializing variables
229
+ 'no-unused-vars': [
230
+ 1,
231
+ {vars: 'all', args: 'none', ignoreRestSiblings: true},
232
+ ], // disallow declaration of variables that are not used in the code
233
+ 'no-use-before-define': 0, // disallow use of variables before they are defined
234
+
235
+ // Node.js
236
+ // These rules are specific to JavaScript running on Node.js.
237
+
238
+ 'handle-callback-err': 1, // enforces error handling in callbacks (off by default) (on by default in the node environment)
239
+ 'no-mixed-requires': 1, // disallow mixing regular variable and require declarations (off by default) (on by default in the node environment)
240
+ 'no-new-require': 1, // disallow use of new operator with the require function (off by default) (on by default in the node environment)
241
+ 'no-path-concat': 1, // disallow string concatenation with __dirname and __filename (off by default) (on by default in the node environment)
242
+ 'no-process-exit': 0, // disallow process.exit() (on by default in the node environment)
243
+ 'no-restricted-modules': 1, // restrict usage of specified node modules (off by default)
244
+ 'no-sync': 0, // disallow use of synchronous methods (off by default)
245
+
246
+ // ESLint Comments Plugin
247
+ // The following rules are made available via `eslint-plugin-eslint-comments`
248
+ 'eslint-comments/no-aggregating-enable': 1, // disallows eslint-enable comments for multiple eslint-disable comments
249
+ 'eslint-comments/no-unlimited-disable': 1, // disallows eslint-disable comments without rule names
250
+ 'eslint-comments/no-unused-disable': 1, // disallow disables that don't cover any errors
251
+ 'eslint-comments/no-unused-enable': 1, // // disallow enables that don't enable anything or enable rules that weren't disabled
252
+
253
+ // Stylistic Issues
254
+ // These rules are purely matters of style and are quite subjective.
255
+
256
+ 'key-spacing': 0,
257
+ 'keyword-spacing': 1, // enforce spacing before and after keywords
258
+ 'jsx-quotes': [1, 'prefer-double'], // enforces the usage of double quotes for all JSX attribute values which doesn’t contain a double quote
259
+ 'comma-spacing': 0,
260
+ 'no-multi-spaces': 0,
261
+ 'brace-style': 0, // enforce one true brace style (off by default)
262
+ camelcase: 0, // require camel case names
263
+ 'consistent-this': 1, // enforces consistent naming when capturing the current execution context (off by default)
264
+ 'eol-last': 1, // enforce newline at the end of file, with no multiple empty lines
265
+ 'func-names': 0, // require function expressions to have a name (off by default)
266
+ 'func-style': 0, // enforces use of function declarations or expressions (off by default)
267
+ 'new-cap': 0, // require a capital letter for constructors
268
+ 'new-parens': 1, // disallow the omission of parentheses when invoking a constructor with no arguments
269
+ 'no-nested-ternary': 0, // disallow nested ternary expressions (off by default)
270
+ 'no-array-constructor': 1, // disallow use of the Array constructor
271
+ 'no-empty-character-class': 1, // disallow the use of empty character classes in regular expressions
272
+ 'no-lonely-if': 0, // disallow if as the only statement in an else block (off by default)
273
+ 'no-new-object': 1, // disallow use of the Object constructor
274
+ 'func-call-spacing': 1, // disallow space between function identifier and application
275
+ 'no-ternary': 0, // disallow the use of ternary operators (off by default)
276
+ 'no-trailing-spaces': 1, // disallow trailing whitespace at the end of lines
277
+ 'no-underscore-dangle': 0, // disallow dangling underscores in identifiers
278
+ 'no-mixed-spaces-and-tabs': 1, // disallow mixed spaces and tabs for indentation
279
+ quotes: [1, 'single', 'avoid-escape'], // specify whether double or single quotes should be used
280
+ 'quote-props': 0, // require quotes around object literal property names (off by default)
281
+ semi: 1, // require or disallow use of semicolons instead of ASI
282
+ 'sort-vars': 0, // sort variables within the same declaration block (off by default)
283
+ 'space-in-brackets': 0, // require or disallow spaces inside brackets (off by default)
284
+ 'space-in-parens': 0, // require or disallow spaces inside parentheses (off by default)
285
+ 'space-infix-ops': 1, // require spaces around operators
286
+ 'space-unary-ops': [1, {words: true, nonwords: false}], // require or disallow spaces before/after unary operators (words on by default, nonwords off by default)
287
+ 'max-nested-callbacks': 0, // specify the maximum depth callbacks can be nested (off by default)
288
+ 'one-var': 0, // allow just one var statement per function (off by default)
289
+ 'wrap-regex': 0, // require regex literals to be wrapped in parentheses (off by default)
290
+
291
+ // Legacy
292
+ // The following rules are included for compatibility with JSHint and JSLint. While the names of the rules may not match up with the JSHint/JSLint counterpart, the functionality is the same.
293
+
294
+ 'max-depth': 0, // specify the maximum depth that blocks can be nested (off by default)
295
+ 'max-len': 0, // specify the maximum length of a line in your program (off by default)
296
+ 'max-params': 0, // limits the number of parameters that can be used in the function declaration. (off by default)
297
+ 'max-statements': 0, // specify the maximum number of statement allowed in a function (off by default)
298
+ 'no-bitwise': 1, // disallow use of bitwise operators (off by default)
299
+ 'no-plusplus': 0, // disallow use of unary operators, ++ and -- (off by default)
300
+
301
+ // React Plugin
302
+ // The following rules are made available via `eslint-plugin-react`.
303
+
304
+ 'react/display-name': 0,
305
+ 'react/jsx-boolean-value': 0,
306
+ 'react/jsx-no-comment-textnodes': 2,
307
+ 'react/jsx-no-duplicate-props': 2,
308
+ 'react/jsx-no-undef': 2,
309
+ 'react/jsx-sort-props': 0,
310
+ 'react/jsx-uses-react': 1,
311
+ 'react/jsx-uses-vars': 1,
312
+ 'react/no-did-mount-set-state': 1,
313
+ 'react/no-did-update-set-state': 1,
314
+ 'react/no-multi-comp': 0,
315
+ 'react/no-string-refs': 1,
316
+ 'react/no-unknown-property': 0,
317
+ 'react/no-unstable-nested-components': 1,
318
+ 'react/prop-types': 0,
319
+ 'react/react-in-jsx-scope': 1,
320
+ 'react/self-closing-comp': 1,
321
+ 'react/wrap-multilines': 0,
322
+
323
+ // React-Hooks Plugin
324
+ // The following rules are made available via `eslint-plugin-react-hooks`
325
+ 'react-hooks/rules-of-hooks': 2,
326
+ 'react-hooks/exhaustive-deps': 2,
327
+
328
+ // React-Native Plugin
329
+ // The following rules are made available via `eslint-plugin-react-native`
330
+
331
+ 'react-native/no-inline-styles': 1,
332
+
333
+ // Jest Plugin
334
+ // The following rules are made available via `eslint-plugin-jest`.
335
+ 'jest/no-disabled-tests': 1,
336
+ 'jest/no-focused-tests': 1,
337
+ 'jest/no-identical-title': 1,
338
+ 'jest/valid-expect': 1,
339
+ },
340
+ };
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@react-native/eslint-config",
3
+ "version": "0.72.1",
4
+ "description": "ESLint config for React Native",
5
+ "main": "index.js",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git@github.com:facebook/react-native.git",
10
+ "directory": "packages/eslint-config-react-native-community"
11
+ },
12
+ "homepage": "https://github.com/facebook/react-native/tree/HEAD/packages/eslint-config-react-native-community#readme",
13
+ "dependencies": {
14
+ "@babel/core": "^7.20.0",
15
+ "@babel/eslint-parser": "^7.19.0",
16
+ "@react-native/eslint-plugin": "^0.72.0",
17
+ "@typescript-eslint/eslint-plugin": "^5.30.5",
18
+ "@typescript-eslint/parser": "^5.30.5",
19
+ "eslint-config-prettier": "^8.5.0",
20
+ "eslint-plugin-eslint-comments": "^3.2.0",
21
+ "eslint-plugin-ft-flow": "^2.0.1",
22
+ "eslint-plugin-jest": "^26.5.3",
23
+ "eslint-plugin-prettier": "^4.2.1",
24
+ "eslint-plugin-react": "^7.30.1",
25
+ "eslint-plugin-react-hooks": "^4.6.0",
26
+ "eslint-plugin-react-native": "^4.0.0"
27
+ },
28
+ "peerDependencies": {
29
+ "eslint": ">=8",
30
+ "prettier": ">=2"
31
+ },
32
+ "devDependencies": {
33
+ "eslint": "^8.19.0",
34
+ "prettier": "^2.4.1"
35
+ }
36
+ }