fb99b0df0e
The former prevents unintended errors in regexes. The latter is something I ran into a couple of times before editors had proper support for syntax highlighting in template literals, and it's an easy mistake to make, especially when converting older code to use template literals. Nowadays most editors display template literals in different colors, but nevertheless it seems like a good idea to enable this rule. Fortunately both rules don't require any code changes, so it's more for prevention.
223 lines
6.4 KiB
Plaintext
223 lines
6.4 KiB
Plaintext
{
|
|
"parserOptions": {
|
|
"ecmaVersion": 2021,
|
|
"sourceType": "module",
|
|
},
|
|
|
|
"plugins": [
|
|
"import",
|
|
"json",
|
|
"mozilla",
|
|
"no-unsanitized",
|
|
"sort-exports",
|
|
"unicorn",
|
|
],
|
|
|
|
"extends": [
|
|
"plugin:json/recommended",
|
|
"plugin:prettier/recommended"
|
|
],
|
|
|
|
"env": {
|
|
"browser": true,
|
|
"es2021": true,
|
|
"worker": true,
|
|
"amd": true,
|
|
},
|
|
|
|
"globals": {
|
|
"PDFJSDev": false,
|
|
"exports": false,
|
|
"SystemJS": false,
|
|
},
|
|
|
|
"rules": {
|
|
// Plugins
|
|
"import/extensions": ["error", "always", { "ignorePackages": true, }],
|
|
"import/no-unresolved": ["error", {
|
|
"ignore": ["pdfjs", "pdfjs-lib", "pdfjs-web"]
|
|
}],
|
|
"mozilla/avoid-removeChild": "error",
|
|
"mozilla/use-includes-instead-of-indexOf": "error",
|
|
"no-unsanitized/method": "error",
|
|
"no-unsanitized/property": "error",
|
|
"sort-exports/sort-exports": ["error", {
|
|
"ignoreCase": true,
|
|
}],
|
|
"unicorn/no-abusive-eslint-disable": "error",
|
|
"unicorn/no-array-push-push": "error",
|
|
"unicorn/no-instanceof-array": "error",
|
|
"unicorn/prefer-string-starts-ends-with": "error",
|
|
|
|
// Possible errors
|
|
"for-direction": "error",
|
|
"getter-return": "error",
|
|
"no-async-promise-executor": "error",
|
|
"no-cond-assign": ["error", "except-parens"],
|
|
"no-constant-condition": ["error", { "checkLoops": false, }],
|
|
"no-debugger": "error",
|
|
"no-dupe-args": "error",
|
|
"no-dupe-else-if": "error",
|
|
"no-dupe-keys": "error",
|
|
"no-duplicate-case": "error",
|
|
"no-empty": ["error", { "allowEmptyCatch": true, }],
|
|
"no-empty-character-class": "error",
|
|
"no-ex-assign": "error",
|
|
"no-extra-boolean-cast": "error",
|
|
"no-func-assign": "error",
|
|
"no-inner-declarations": ["error", "functions"],
|
|
"no-invalid-regexp": "error",
|
|
"no-irregular-whitespace": "error",
|
|
"no-obj-calls": "error",
|
|
"no-promise-executor-return": "error",
|
|
"no-regex-spaces": "error",
|
|
"no-setter-return": "error",
|
|
"no-sparse-arrays": "error",
|
|
"no-template-curly-in-string": "error",
|
|
"no-unexpected-multiline": "error",
|
|
"no-unreachable": "error",
|
|
"no-unsafe-finally": "error",
|
|
"no-unsafe-negation": "error",
|
|
"no-unsafe-optional-chaining": ["error", { "disallowArithmeticOperators": true }],
|
|
"use-isnan": ["error", { "enforceForIndexOf": true, }],
|
|
"valid-typeof": ["error", { "requireStringLiterals": true, }],
|
|
|
|
// Best Practices
|
|
"accessor-pairs": ["error", {
|
|
"setWithoutGet": true,
|
|
"enforceForClassMembers": true,
|
|
}],
|
|
"consistent-return": "error",
|
|
"curly": ["error", "all"],
|
|
"default-case-last": "error",
|
|
"dot-notation": "error",
|
|
"eqeqeq": ["error", "always"],
|
|
"grouped-accessor-pairs": ["error", "getBeforeSet"],
|
|
"no-alert": "error",
|
|
"no-caller": "error",
|
|
"no-else-return": "error",
|
|
"no-empty-pattern": "error",
|
|
"no-eval": "error",
|
|
"no-extend-native": "error",
|
|
"no-extra-bind": "error",
|
|
"no-extra-label": "error",
|
|
"no-fallthrough": "error",
|
|
"no-floating-decimal": "error",
|
|
"no-global-assign": "error",
|
|
"no-implied-eval": "error",
|
|
"no-iterator": "error",
|
|
"no-lone-blocks": "error",
|
|
"no-multi-str": "error",
|
|
"no-new-func": "error",
|
|
"no-new-wrappers": "error",
|
|
"no-new": "error",
|
|
"no-octal-escape": "error",
|
|
"no-octal": "error",
|
|
"no-redeclare": "error",
|
|
"no-return-await": "error",
|
|
"no-self-assign": "error",
|
|
"no-self-compare": "error",
|
|
"no-throw-literal": "error",
|
|
"no-unused-expressions": "error",
|
|
"no-unused-labels": "error",
|
|
"no-useless-call": "error",
|
|
"no-useless-catch": "error",
|
|
"no-useless-concat": "error",
|
|
"no-useless-escape": "error",
|
|
"no-useless-return": "error",
|
|
"prefer-promise-reject-errors": "error",
|
|
"wrap-iife": ["error", "any"],
|
|
"yoda": ["error", "never", {
|
|
"exceptRange": true,
|
|
}],
|
|
|
|
// Strict Mode
|
|
"strict": ["off", "global"],
|
|
|
|
// Variables
|
|
"no-catch-shadow": "error",
|
|
"no-delete-var": "error",
|
|
"no-label-var": "error",
|
|
"no-shadow": "error",
|
|
"no-shadow-restricted-names": "error",
|
|
"no-undef-init": "error",
|
|
"no-undef": ["error", { "typeof": true, }],
|
|
"no-unused-vars": ["error", {
|
|
"vars": "local",
|
|
"args": "none",
|
|
}],
|
|
"no-use-before-define": ["error", {
|
|
"functions": false,
|
|
"classes": false,
|
|
"variables": false,
|
|
}],
|
|
|
|
// Node.js and CommonJS
|
|
"no-buffer-constructor": "error",
|
|
|
|
// Stylistic Issues
|
|
"lines-between-class-members": ["error", "always"],
|
|
"max-len": ["error", {
|
|
"code": 1000,
|
|
"comments": 80,
|
|
"ignoreUrls": true
|
|
}],
|
|
"new-cap": ["error", { "newIsCap": true, "capIsNew": false, }],
|
|
"no-array-constructor": "error",
|
|
"no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0, "maxBOF": 1, }],
|
|
"no-nested-ternary": "error",
|
|
"no-new-object": "error",
|
|
"no-restricted-syntax": ["error",
|
|
{
|
|
"selector": "BinaryExpression[operator='instanceof'][right.name='Object']",
|
|
"message": "Use `typeof` rather than `instanceof Object`.",
|
|
},
|
|
{
|
|
"selector": "CallExpression[callee.name='assert'][arguments.length!=2]",
|
|
"message": "`assert()` must always be invoked with two arguments.",
|
|
},
|
|
{
|
|
"selector": "NewExpression[callee.name='Cmd']",
|
|
"message": "Use `Cmd.get()` rather than `new Cmd()`.",
|
|
},
|
|
{
|
|
"selector": "NewExpression[callee.name='Name']",
|
|
"message": "Use `Name.get()` rather than `new Name()`.",
|
|
},
|
|
{
|
|
"selector": "NewExpression[callee.name='Ref']",
|
|
"message": "Use `Ref.get()` rather than `new Ref()`.",
|
|
},
|
|
],
|
|
"no-unneeded-ternary": "error",
|
|
"operator-assignment": "error",
|
|
"prefer-exponentiation-operator": "error",
|
|
"spaced-comment": ["error", "always", {
|
|
"block": {
|
|
"balanced": true,
|
|
}
|
|
}],
|
|
|
|
// ECMAScript 6
|
|
"constructor-super": "error",
|
|
"no-class-assign": "error",
|
|
"no-confusing-arrow": "error",
|
|
"no-const-assign": "error",
|
|
"no-dupe-class-members": "error",
|
|
"no-duplicate-imports": "error",
|
|
"no-this-before-super": "error",
|
|
"no-useless-computed-key": "error",
|
|
"no-useless-constructor": "error",
|
|
"no-useless-rename": "error",
|
|
"no-var": "error",
|
|
"object-shorthand": ["error", "always", {
|
|
"avoidQuotes": true,
|
|
}],
|
|
"prefer-const": "error",
|
|
"sort-imports": ["error", {
|
|
"ignoreCase": true,
|
|
}],
|
|
"template-curly-spacing": ["error", "never"],
|
|
},
|
|
}
|