Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
225 changes: 225 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
module.exports = {
extends: [
'plugin:@wordpress/eslint-plugin/recommended',
'plugin:jest/recommended',
'plugin:sitekit/main',
'plugin:react-hooks/recommended',
'plugin:import/recommended',
],
env: {
browser: true,
es6: true,
},
globals: {
fetchMock: false,
},
rules: {
'import/no-unresolved': [
'error',
{
ignore: ['^@wordpress-core/?.*'],
},
],
'jsdoc/check-tag-names': 'error',
'jsdoc/check-types': 'error',
'jsdoc/check-line-alignment': [
'error',
'always',
{
preserveMainDescriptionPostDelimiter: true,
tags: ['param', 'arg', 'argument', 'prop', 'returns'],
},
],
'jsdoc/require-description': 'error',
'jsdoc/require-description-complete-sentence': 'off',
'jsdoc/require-param': 'error',
'jsdoc/require-param-description': 'error',
'jsdoc/require-param-name': 'error',
'jsdoc/require-param-type': 'error',
'jsdoc/require-returns-check': 'error',
'jsdoc/require-returns-description': 'error',
'jsdoc/require-returns-type': 'error',
'jsdoc/require-returns': 'error',
'jsdoc/require-yields': 'off',
'jsdoc/no-undefined-types': 'error',
'jsdoc/tag-lines': 'off',
'jsdoc/valid-types': 'error',
'lodash/import-scope': ['error', 'member'],
'require-await': 'error',
'react/function-component-definition': [
'error',
{
namedComponents: 'function-declaration',
unnamedComponents: 'function-expression',
},
],
'react/jsx-boolean-value': ['error', 'never'],
'react/jsx-curly-brace-presence': 'error',
'no-invalid-regexp': 'error',
'no-useless-escape': 'error',
'no-relative-import-paths/no-relative-import-paths': [
'error',
{
allowSameFolder: true,
rootDir: 'assets',
prefix: '@',
},
],
complexity: ['error', 15],
'no-use-before-define': [
'error',
{
functions: false,
classes: false,
variables: false,
},
],
'react/jsx-fragments': ['error', 'element'],
'valid-jsdoc': [
'error',
{
requireReturn: false,
},
],
'@wordpress/i18n-text-domain': [
'error',
{
allowedTextDomain: 'google-site-kit',
},
],
quotes: [
'error',
'single',
{
avoidEscape: true,
},
],
curly: ['error', 'all'],
'prettier/prettier': [
'error',
{},
{
usePrettierrc: true,
},
],
'react/jsx-no-useless-fragment': 'error',
'consistent-return': 'error',
},
settings: {
'import/core-modules': [
'googlesitekit-data',
'googlesitekit-modules',
'googlesitekit-api',
'googlesitekit-widgets',
'googlesitekit-components',
'googlesitekit-notifications',
'@wordpress/i18n__non-shim',
'@wordpress/api-fetch__non-shim',
],
'import/parsers': {
'@typescript-eslint/parser': ['.ts', '.tsx'],
},
'import/resolver': {
alias: {
map: [
['@/(.*\\.svg)\\?url', 'assets/'],
['@/(.*)', 'assets/'],
['@wordpress-core', '@wordpress'],
],
},
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
typescript: {
alwaysTryTypes: true,
},
},
},
overrides: [
{
files: ['**/*.ts', '**/*.tsx'],
extends: ['plugin:@typescript-eslint/recommended'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2024,
},
env: {
browser: true,
},
globals: {
browser: true,
page: true,
},
rules: {
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-shadow': 'error',
'jsdoc/require-param-type': 'off',
'jsdoc/require-returns-type': 'off',
'no-shadow': 'off',
'react/function-component-definition': 'off',
'valid-jsdoc': [
'error',
{
requireParamType: false,
requireReturnType: false,
},
],
},
},
{
files: ['tests/e2e/**/*.js'],
env: {
browser: true,
},
globals: {
browser: true,
page: true,
},
rules: {
'react-hooks/rules-of-hooks': 'off',
},
},
{
files: [
'assets/js/components/**/*.js',
'**/modules/*/components/**/*.js',
'assets/js/googlesitekit/*/components/**/*.js',
],
rules: {
'filenames/match-exported': [
2,
'[A-Z]([A-Z0-9]*[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Za-z0-9]*',
],
},
},
{
files: [
'assets/js/components/data/**/*.js',
'assets/js/components/legacy*/**/*.js',
],
rules: {
'filenames/match-exported': ['off'],
},
},
{
files: [
'webpack/*',
'**/__factories__/*',
'*.stories.js',
'*.test.js',
],
rules: {
'sitekit/no-direct-date': 'off',
},
},
],
plugins: [
'filenames',
'sitekit',
'jsdoc',
'react',
'react-hooks',
'lodash',
'no-relative-import-paths',
],
};
Loading
Loading