Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/88 Co-authored-by: Zoë Bijl <moiety@noreply.codeberg.org> Co-committed-by: Zoë Bijl <moiety@noreply.codeberg.org>
174 lines
4.2 KiB
JavaScript
174 lines
4.2 KiB
JavaScript
const globals = require("globals");
|
|
const importPlugin = require("eslint-plugin-import");
|
|
const reactPlugin = require("eslint-plugin-react");
|
|
const reactHooks = require("eslint-plugin-react-hooks");
|
|
const jsxA11y = require("eslint-plugin-jsx-a11y");
|
|
const pluginPromise = require("eslint-plugin-promise");
|
|
const pluginJest = require("eslint-plugin-jest");
|
|
|
|
module.exports = [
|
|
|
|
// Global settings.
|
|
{
|
|
settings: {
|
|
react: {
|
|
version: "detect",
|
|
},
|
|
},
|
|
},
|
|
|
|
// Import set of sensible rules from f0x and
|
|
// override some of them to fit the masto style
|
|
// to avoid reformatting a million files.
|
|
...require("@f0x52/eslint-config"),
|
|
{
|
|
rules: {
|
|
"@stylistic/indent": ["error", 2],
|
|
"no-unused-vars": "off",
|
|
"no-use-before-define": "off",
|
|
"no-useless-assignment": "off",
|
|
"no-case-declarations": "warn",
|
|
"quotes": ["error", "double"],
|
|
},
|
|
},
|
|
|
|
// Files about which
|
|
// we do not care.
|
|
{
|
|
ignores: [
|
|
"build/**/*",
|
|
"coverage/**/*",
|
|
"db/**/*",
|
|
"lib/**/*",
|
|
"log/**/*",
|
|
"node_modules/**/*",
|
|
"nonobox/**/*",
|
|
"public/**/*",
|
|
"!public/embed.js",
|
|
"spec/**/*",
|
|
"tmp/**/*",
|
|
"vendor/**/*",
|
|
"!**/.eslintrc.js",
|
|
],
|
|
},
|
|
|
|
// Main rules for source
|
|
// files defined here.
|
|
{
|
|
files: [
|
|
"**/*.ts",
|
|
"**/*.tsx",
|
|
"**/*.js",
|
|
"**/*.jsx",
|
|
],
|
|
plugins: {
|
|
import: importPlugin,
|
|
react: reactPlugin,
|
|
"react-hooks": reactHooks,
|
|
"jsx-a11y": jsxA11y,
|
|
"promise": pluginPromise,
|
|
},
|
|
languageOptions: {
|
|
ecmaVersion: 2022,
|
|
sourceType: "module",
|
|
globals: {
|
|
...globals.browser,
|
|
...globals.node,
|
|
},
|
|
parserOptions: {
|
|
ecmaFeatures: {
|
|
jsx: true,
|
|
},
|
|
project: true,
|
|
},
|
|
},
|
|
rules: {
|
|
// Import recommended rules for plugins.
|
|
...importPlugin.flatConfigs.warnings.rules,
|
|
...reactPlugin.configs.flat.recommended.rules,
|
|
...reactHooks.configs.flat.recommended.rules,
|
|
...jsxA11y.flatConfigs.recommended.rules,
|
|
...pluginPromise.configs["flat/recommended"].rules,
|
|
|
|
// Override ones we don"t need.
|
|
"react/jsx-uses-react": "off",
|
|
"react/jsx-no-target-blank": "warn",
|
|
"react/react-in-jsx-scope": "off",
|
|
"react/prop-types": "off",
|
|
"react/no-unknown-property": "warn",
|
|
"react/display-name": "warn",
|
|
"react/no-deprecated": "warn",
|
|
|
|
// TODO: Fix these jsx-a11y warnings.
|
|
"jsx-a11y/accessible-emoji": "warn",
|
|
"jsx-a11y/click-events-have-key-events": "warn",
|
|
"jsx-a11y/label-has-associated-control": "warn",
|
|
"jsx-a11y/media-has-caption": "warn",
|
|
"jsx-a11y/no-autofocus": "warn",
|
|
"jsx-a11y/no-noninteractive-tabindex": "warn",
|
|
"jsx-a11y/no-onchange": "warn",
|
|
"jsx-a11y/no-interactive-element-to-noninteractive-role": "warn",
|
|
"jsx-a11y/no-static-element-interactions": [
|
|
"warn",
|
|
{
|
|
handlers: [
|
|
"onClick",
|
|
],
|
|
},
|
|
],
|
|
|
|
// Todo: fix these promise warnings.
|
|
"promise/always-return": "warn",
|
|
"promise/catch-or-return": [
|
|
"error",
|
|
{
|
|
allowFinally: true,
|
|
},
|
|
],
|
|
"promise/no-callback-in-promise": "warn",
|
|
"promise/no-nesting": "warn",
|
|
"promise/no-promise-in-callback": "warn",
|
|
},
|
|
},
|
|
|
|
// Rules for test files.
|
|
{
|
|
files: [
|
|
"**/__tests__/*.js",
|
|
"**/__tests__/*.jsx",
|
|
],
|
|
plugins: { jest: pluginJest },
|
|
languageOptions: {
|
|
globals: pluginJest.environments.globals.globals,
|
|
},
|
|
rules: {
|
|
"jest/no-disabled-tests": "warn",
|
|
"jest/no-focused-tests": "error",
|
|
"jest/no-identical-title": "error",
|
|
"jest/prefer-to-have-length": "warn",
|
|
"jest/valid-expect": "error",
|
|
},
|
|
},
|
|
|
|
// Rules for other bits and
|
|
// bobs and odds and ends.
|
|
{
|
|
files: [
|
|
"*.config.js",
|
|
".*rc.js",
|
|
"ide-helper.js",
|
|
"config/webpack/**/*",
|
|
"config/formatjs-formatter.js",
|
|
],
|
|
languageOptions: {
|
|
sourceType: "script",
|
|
globals: {
|
|
...globals.commonjs,
|
|
},
|
|
},
|
|
rules: {
|
|
"import/no-commonjs": "off",
|
|
},
|
|
},
|
|
];
|