wormhole/explorer/.eslintrc.js

190 lines
6.0 KiB
JavaScript

const {
rules: baseImportsRules,
} = require('eslint-config-airbnb-base/rules/imports');
module.exports = {
globals: {
// Gatsby Config
__PATH_PREFIX__: true,
},
env: {
// Allow `window` global
browser: true,
},
// Global ESLint Settings
// =================================
settings: {
'import/resolver': {
node: {
paths: ['./', 'src'],
extensions: ['.js', '.jsx', '.ts', '.tsx', 'json'],
},
// Resolve Aliases
// =================================
alias: {
map: [
['~', './src'],
['@theme/styled', './src/styled'],
],
extensions: ['.js', '.jsx', '.ts', '.tsx', 'json', '.d.ts'],
},
},
},
// ===========================================
// Set up ESLint for .js / .jsx files
// ===========================================
// .js / .jsx uses babel-eslint
parser: 'babel-eslint',
// Plugins
// =================================
plugins: ['no-only-tests'],
// Extend Other Configs
// =================================
extends: [
'eslint:recommended',
'airbnb',
// Disable rules that conflict with Prettier
// !!! Prettier must be last to override other configs
'prettier/react',
'plugin:prettier/recommended',
],
rules: {
// This project uses TS. Disable prop-types check
'react/prop-types': 0,
// Allow snake_case due to inconsistent APIs
camelcase: 0,
// Prevents exclusion of tests from passing lint check
'no-only-tests/no-only-tests': 'error',
},
// https://eslint.org/docs/user-guide/configuring#report-unused-eslint-disable-comments
reportUnusedDisableDirectives: true,
// =================================
// Overrides for Specific Files
// =================================
overrides: [
// =================================
// TypeScript Files
// =================================
{
files: ['**/*.{ts,tsx}'],
// allow ESLint to understand TypeScript syntax
// https://github.com/iamturns/eslint-config-airbnb-typescript/blob/master/lib/shared.js#L10
parserOptions: {
// Lint with Type Information
// https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/TYPED_LINTING.md
tsconfigRootDir: __dirname,
project: './tsconfig.json',
},
extends: [
// ESLint's inbuilt 'recommended' config
'eslint:recommended',
// Disables rules from the 'eslint:recommended' that are already covered by TypeScript's typechecker
'plugin:@typescript-eslint/eslint-recommended',
// Turns on rules from @typescript-eslint/eslint-plugin
'plugin:@typescript-eslint/recommended',
// Lint with Type Information
// https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/TYPED_LINTING.md
'plugin:@typescript-eslint/recommended-requiring-type-checking',
'airbnb-typescript',
// Disable rules that conflict with Prettier
// !!! Prettier must be last to override other configs
'prettier/react',
'prettier/@typescript-eslint',
'plugin:prettier/recommended',
],
rules: {
// This project uses TS. Disable prop-types check
'react/prop-types': 'off',
// Allow snake_case due to inconsistent APIs
'@typescript-eslint/camelcase': 0,
// Makes no sense to allow type inferrence for expression parameters, but require typing the response
'@typescript-eslint/explicit-function-return-type': 0,
// Reduce props spreading rule to a warning, not an error
'react/jsx-props-no-spreading': 1,
'no-restricted-imports': [
'warn',
{
paths: [
],
},
],
},
},
// =================================
// index.ts Files (Re-exporting a directory's files)
// =================================
{
files: ['**/index.{js,ts,tsx}'],
rules: {
// Allow named exports in a directory's index files
'import/prefer-default-export': 0,
},
},
// =================================
// Gatsby Files
// =================================
{
files: ['**/**/gatsby-*.js'],
rules: {
'no-console': 0,
// Allow import devDependencies in Gatsby files.
'import/no-extraneous-dependencies': [
2,
{
devDependencies: true,
// Tells ESLint where the path to the folder containing package.json is for nested files like /plugin/**/gatsby-*.js
packageDir: './',
},
],
'react/no-danger': 0,
'react/jsx-props-no-spreading': 0,
// Allow 'jsx' in .js files
'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx'] }],
'import/prefer-default-export': 0,
// Append 'ts' and 'tsx' when importing files from a folder/index.ts
'import/extensions': [
baseImportsRules['import/extensions'][0],
baseImportsRules['import/extensions'][1],
{
...baseImportsRules['import/extensions'][2],
ts: 'never',
tsx: 'never',
},
],
},
},
// =================================
// Test Files
// =================================
{
files: ['**/test-utils/*.{js,ts,tsx}', '**/**/*.test.{js,ts,tsx}'],
// Allow `jest` global
extends: ['plugin:jest/recommended'],
rules: {
// Allow import devDependencies in tests
'import/no-extraneous-dependencies': 0,
'react/jsx-props-no-spreading': 0,
'jsx-a11y/alt-text': 0,
},
},
// =================================
// Storybook Files
// =================================
{
files: ['**/*.stories.{js,ts,tsx}'],
rules: {
// Allow import devDependencies in stories
'import/no-extraneous-dependencies': 0,
'react/jsx-props-no-spreading': 0,
'jsx-a11y/alt-text': 0,
},
},
],
};