Socket
Book a DemoInstallSign in
Socket

@wagtail/eslint-config-wagtail

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wagtail/eslint-config-wagtail

Shareable ESLint config for Wagtail, based on airbnb/javascript

latest
Source
npmnpm
Version
0.5.0
Version published
Maintainers
4
Created
Source

@wagtail/eslint-config-wagtail ESLint

npm Build status

Shareable ESLint config for Wagtail, based on airbnb/javascript.

The package provides Wagtail's .eslintrc as an extensible shared config.

Usage

Our default export contains all of our ESLint rules, including Airbnb's config (which has ECMAScript 6 and React). It requires eslint, as well as the configuration’s peer dependencies.

# npm v7 and up:
npm install --save-dev @wagtail/eslint-config-wagtail@latest
# npm v6 and below:
npx install-peerdeps --dev @wagtail/eslint-config-wagtail@latest

Code style

Write JavaScript according to the Airbnb Styleguide, with some exceptions:

  • Use soft-tabs with a two space indent. Spaces are the only way to guarantee code renders the same in any person’s environment.
  • We accept snake_case in object properties, such as ajaxResponse.page_title, however camelCase or UPPER_CASE should be used everywhere else.

Contribution Guidelines

Install

  • Required Node
  • We recommend using nvm
  • Clone the project on to your computer
  • Run nvm install to ensure you have the correct Node version
  • Run npm install to install project dependencies
  • Ensure your editor is set up to use editorconfig, Prettier and Eslint

Development

  • Run nvm use to set Node to the correct version
  • Run tests via npm run test
  • Run linting via npm run lint
  • Run preflight checks before commiting final code via npm run preflight
  • Note: When working with the rule set, only modify the index.js file, not the .eslintrc file as it is for local linting only

Rules

RuleSeverityConfig
array-callback-returnerror{"allowImplicit":true,"checkForEach":false,"allowVoid":false}
arrow-body-styleerror"as-needed", {"requireReturnForObjectLiteral":false}
block-scoped-varerror
camelcaseerrorsee Config
consistent-returnerror
constructor-supererror
default-caseerror{"commentPattern":"^no default$"}
default-case-lasterror
default-param-lasterror
dot-notationerror{"allowKeywords":true,"allowPattern":""}
eqeqeqerror"always", {"null":"ignore"}
for-directionerror
func-nameswarn
getter-returnerror{"allowImplicit":true}
global-requireerror
grouped-accessor-pairserror
guard-for-inerror
id-lengthwarn{"min":2,"exceptions":["x","y","e","i","j","k","d","n","_","$"]}
import/exporterror
import/extensionserror"ignorePackages", {"js":"never","mjs":"never","jsx":"never"}
import/firsterror
import/namederror
import/newline-after-importerror
import/no-absolute-patherror
import/no-amderror
import/no-cycleerrorsee Config
import/no-duplicateserror
import/no-dynamic-requireerror
import/no-extraneous-dependencieserrorsee Config
import/no-import-module-exportserror{"exceptions":[]}
import/no-mutable-exportserror
import/no-named-as-defaulterror
import/no-named-as-default-membererror
import/no-named-defaulterror
import/no-relative-packageserror
import/no-self-importerror
import/no-unresolvederror{"commonjs":true,"caseSensitive":true,"caseSensitiveStrict":false}
import/no-useless-path-segmentserror{"commonjs":true}
import/no-webpack-loader-syntaxerror
import/ordererrorsee Config
import/prefer-default-exporterror
jsx-a11y/alt-texterrorsee Config
jsx-a11y/anchor-has-contenterror{"components":[]}
jsx-a11y/anchor-is-validerrorsee Config
jsx-a11y/aria-activedescendant-has-tabindexerror
jsx-a11y/aria-propserror
jsx-a11y/aria-proptypeserror
jsx-a11y/aria-roleerror{"ignoreNonDOM":false}
jsx-a11y/aria-unsupported-elementserror
jsx-a11y/click-events-have-key-eventserror
jsx-a11y/control-has-associated-labelerrorsee Config
jsx-a11y/heading-has-contenterror{"components":[""]}
jsx-a11y/html-has-langerror
jsx-a11y/iframe-has-titleerror
jsx-a11y/img-redundant-alterror
jsx-a11y/interactive-supports-focuserror
jsx-a11y/label-has-associated-controlerrorsee Config
jsx-a11y/langerror
jsx-a11y/media-has-captionerror{"audio":[],"video":[],"track":[]}
jsx-a11y/mouse-events-have-key-eventserror
jsx-a11y/no-access-keyerror
jsx-a11y/no-autofocuserror{"ignoreNonDOM":true}
jsx-a11y/no-distracting-elementserror{"elements":["marquee","blink"]}
jsx-a11y/no-interactive-element-to-noninteractive-roleerror{"tr":["none","presentation"]}
jsx-a11y/no-noninteractive-element-interactionserrorsee Config
jsx-a11y/no-noninteractive-element-to-interactive-roleerrorsee Config
jsx-a11y/no-noninteractive-tabindexerror{"tags":[],"roles":["tabpanel"]}
jsx-a11y/no-redundant-roleserror
jsx-a11y/no-static-element-interactionserrorsee Config
jsx-a11y/role-has-required-aria-propserror
jsx-a11y/role-supports-aria-propserror
jsx-a11y/scopeerror
jsx-a11y/tabindex-no-positiveerror
lines-around-directiveerror{"before":"always","after":"always"}
lines-between-class-memberserror"always", {"exceptAfterSingleLine":false}
new-caperrorsee Config
no-alertwarn
no-array-constructorerror
no-async-promise-executorerror
no-await-in-looperror
no-bitwiseerror
no-buffer-constructorerror
no-callererror
no-case-declarationserror
no-class-assignerror
no-compare-neg-zeroerror
no-cond-assignerror"always"
no-consolewarn
no-const-assignerror
no-constant-binary-expressionerror
no-constant-conditionwarn
no-constructor-returnerror
no-continueerror
no-control-regexerror
no-debuggererror
no-delete-varerror
no-dupe-argserror
no-dupe-class-memberserror
no-dupe-else-iferror
no-dupe-keyserror
no-duplicate-caseerror
no-else-returnerror{"allowElseIf":false}
no-emptyerror
no-empty-character-classerror
no-empty-functionerror{"allow":["arrowFunctions","functions","methods"]}
no-empty-patternerror
no-evalerror
no-ex-assignerror
no-extend-nativeerror
no-extra-binderror
no-extra-boolean-casterror
no-extra-labelerror
no-fallthrougherror
no-func-assignerror
no-global-assignerror{"exceptions":[]}
no-implied-evalerror
no-import-assignerror
no-inner-declarationserror
no-invalid-regexperror
no-irregular-whitespaceerror
no-iteratorerror
no-label-varerror
no-labelserror{"allowLoop":false,"allowSwitch":false}
no-lone-blockserror
no-lonely-iferror
no-loop-funcerror
no-loss-of-precisionerror
no-misleading-character-classerror
no-multi-assignerror
no-multi-strerror
no-nested-ternaryerror
no-newwarn
no-new-funcerror
no-new-objecterror
no-new-requireerror
no-new-symbolerror
no-new-wrapperserror
no-nonoctal-decimal-escapeerror
no-obj-callserror
no-octalerror
no-octal-escapeerror
no-param-reassignerror{"props":false}
no-path-concaterror
no-pluspluserror
no-promise-executor-returnerror
no-protoerror
no-prototype-builtinserror
no-redeclareerror
no-regex-spaceserror
no-restricted-exportserror{"restrictedNamedExports":["default","then"]}
no-restricted-globalserrorsee Config
no-restricted-propertieserrorsee Config
no-restricted-syntaxerrorsee Config
no-return-assignerror"always"
no-return-awaiterror
no-script-urlerror
no-self-assignerror{"props":true}
no-self-compareerror
no-sequenceserror
no-setter-returnerror
no-shadowerror
no-shadow-restricted-nameserror
no-sparse-arrayserror
no-template-curly-in-stringerror
no-this-before-supererror
no-throw-literalerror
no-undeferror
no-undef-initerror
no-underscore-dangleerrorsee Config
no-unneeded-ternaryerror{"defaultAssignment":false}
no-unreachableerror
no-unreachable-looperror{"ignore":[]}
no-unsafe-finallyerror
no-unsafe-negationerror
no-unsafe-optional-chainingerror{"disallowArithmeticOperators":true}
no-unused-expressionserrorsee Config
no-unused-labelserror
no-unused-varserror{"vars":"all","args":"after-used","ignoreRestSiblings":true}
no-use-before-defineerror{"functions":true,"classes":true,"variables":true}
no-useless-backreferenceerror
no-useless-catcherror
no-useless-computed-keyerror
no-useless-concaterror
no-useless-constructorerror
no-useless-escapeerror
no-useless-renameerror{"ignoreDestructuring":false,"ignoreImport":false,"ignoreExport":false}
no-useless-returnerror
no-voiderror
no-witherror
object-shorthanderror"methods"
one-varerror"never"
operator-assignmenterror"always"
prefer-arrow-callbackerror{"allowNamedFunctions":false,"allowUnboundThis":true}
prefer-consterror{"destructuring":"any","ignoreReadBeforeAssign":true}
prefer-destructuringerrorsee Config
prefer-exponentiation-operatorerror
prefer-numeric-literalserror
prefer-object-spreaderror
prefer-promise-reject-errorserror{"allowEmptyReject":true}
prefer-regex-literalserror{"disallowRedundantWrapping":true}
prefer-rest-paramserror
prefer-spreaderror
radixerror
react-hooks/exhaustive-depserror
react-hooks/rules-of-hookserror
react/button-has-typeerror{"button":true,"submit":true,"reset":false}
react/default-props-match-prop-typeserror{"allowRequiredDefaults":false}
react/destructuring-assignmenterror"always"
react/forbid-foreign-prop-typeswarn{"allowInPropTypes":true}
react/forbid-prop-typeserrorsee Config
react/function-component-definitionerrorsee Config
react/jsx-curly-brace-presenceerror{"props":"never","children":"never"}
react/jsx-filename-extensionerror{"extensions":[".jsx"]}
react/jsx-fragmentserror"syntax"
react/jsx-no-comment-textnodeserror
react/jsx-no-constructed-context-valueserror
react/jsx-no-duplicate-propserror{"ignoreCase":true}
react/jsx-no-script-urlerror[{"name":"Link","props":["to"]}]
react/jsx-no-target-blankerror{"enforceDynamicLinks":"always","links":true,"forms":false}
react/jsx-no-undeferror
react/jsx-no-useless-fragmenterror
react/jsx-pascal-caseerror{"allowAllCaps":true,"ignore":[]}
react/jsx-props-no-spreadingerrorsee Config
react/jsx-uses-reacterror
react/jsx-uses-varserror
react/no-access-state-in-setstateerror
react/no-array-index-keyerror
react/no-arrow-function-lifecycleerror
react/no-children-properror
react/no-dangerwarn
react/no-danger-with-childrenerror
react/no-deprecatederror
react/no-did-update-set-stateerror
react/no-find-dom-nodeerror
react/no-invalid-html-attributeerror
react/no-is-mountederror
react/no-namespaceerror
react/no-redundant-should-component-updateerror
react/no-render-return-valueerror
react/no-string-refserror
react/no-this-in-sfcerror
react/no-typoserror
react/no-unescaped-entitieserror
react/no-unknown-propertyerror
react/no-unstable-nested-componentserror
react/no-unused-class-component-methodserror
react/no-unused-prop-typeserror{"customValidators":[],"skipShapeProps":true}
react/no-unused-stateerror
react/no-will-update-set-stateerror
react/prefer-exact-propserror
react/prefer-stateless-functionerror{"ignorePureComponents":true}
react/react-in-jsx-scopeerror
react/require-default-propserror{"forbidDefaultForRequired":true}
react/require-render-returnerror
react/self-closing-comperror
react/state-in-constructorerror"always"
react/static-property-placementerror"property assignment"
react/style-prop-objecterror
react/void-dom-elements-no-childrenerror
require-yielderror
spaced-commenterrorsee Config
stricterror"never"
symbol-descriptionerror
unicode-bomerror"never"
use-isnanerror
valid-typeoferror{"requireStringLiterals":true}
vars-on-toperror
yodaerror

Keywords

config

FAQs

Package last updated on 08 Jul 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.