2.0.0-fork.2 • Published 5 years ago

@octogonz/eslint-plugin v2.0.0-fork.2

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

Installation

Make sure you have TypeScript and @typescript-eslint/parser installed, then install the plugin:

npm i @typescript-eslint/eslint-plugin --save-dev

It is important that you use the same version number for @typescript-eslint/parser and @typescript-eslint/eslint-plugin.

Note: If you installed ESLint globally (using the -g flag) then you must also install @typescript-eslint/eslint-plugin globally.

Usage

Add @typescript-eslint/parser to the parser field and @typescript-eslint to the plugins section of your .eslintrc configuration file:

{
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"]
}

Then configure the rules you want to use under the rules section.

{
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"],
  "rules": {
    "@typescript-eslint/rule-name": "error"
  }
}

You can also enable all the recommended rules for our plugin. Add plugin:@typescript-eslint/recommended in extends:

{
  "extends": ["plugin:@typescript-eslint/recommended"]
}

You can also use eslint:recommended with this plugin. Add both eslint:recommended and plugin:@typescript-eslint/eslint-recommended:

{
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended"
  ]
}

If you want to use rules which require type information, you will need to specify a path to your tsconfig.json file in the "project" property of "parserOptions".

{
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json"
  },
  "plugins": ["@typescript-eslint"],
  "rules": {
    "@typescript-eslint/restrict-plus-operands": "error"
  }
}

See @typescript-eslint/parser's README.md for more information on the available "parserOptions".

Note: Make sure to use eslint --ext .js,.ts since by default eslint will only search for .js files.

Usage with Prettier

Install eslint-config-prettier to disable our code formatting related rules:

{
  "extends": [
    "plugin:@typescript-eslint/recommended",
    "prettier",
    "prettier/@typescript-eslint"
  ]
}

Note: Make sure you have eslint-config-prettier@4.0.0 or newer.

Usage with Airbnb

Airbnb has two configs, a base one eslint-config-airbnb-base and one that includes rules for React eslint-config-airbnb.

First you'll need to install the config according to the instructions in one of the links above. npx install-peerdeps --dev eslint-config-airbnb or npx install-peerdeps --dev eslint-config-airbnb-base should work if you are using npm 5+.

Then you should add airbnb (or airbnb-base) to your extends section of .eslintrc. You might also want to turn on plugin:@typescript-eslint/recommended as well to enable all of the recommended rules.

{
  "extends": ["airbnb-base", "plugin:@typescript-eslint/recommended"]
}

Note: You can use Airbnb's rules alongside Prettier, see Usage with Prettier

Supported Rules

Key: :heavy_check_mark: = recommended, :wrench: = fixable, :thought_balloon: = requires type information

NameDescription:heavy_check_mark::wrench::thought_balloon:
@typescript-eslint/adjacent-overload-signaturesRequire that member overloads be consecutive:heavy_check_mark:
@typescript-eslint/array-typeRequires using either T[] or Array<T> for arrays:heavy_check_mark::wrench:
@typescript-eslint/await-thenableDisallows awaiting a value that is not a Thenable:thought_balloon:
@typescript-eslint/ban-ts-ignoreBans “// @ts-ignore” comments from being used
@typescript-eslint/ban-typesEnforces that types will not to be used:heavy_check_mark::wrench:
@typescript-eslint/camelcaseEnforce camelCase naming convention:heavy_check_mark:
@typescript-eslint/class-name-casingRequire PascalCased class and interface names:heavy_check_mark:
@typescript-eslint/consistent-type-assertionsEnforces consistent usage of type assertions.:heavy_check_mark:
@typescript-eslint/consistent-type-definitionsConsistent with type definition either interface or type:wrench:
@typescript-eslint/explicit-function-return-typeRequire explicit return types on functions and class methods:heavy_check_mark:
@typescript-eslint/explicit-member-accessibilityRequire explicit accessibility modifiers on class properties and methods:heavy_check_mark:
@typescript-eslint/func-call-spacingRequire or disallow spacing between function identifiers and their invocations:wrench:
@typescript-eslint/generic-type-namingEnforces naming of generic type variables
@typescript-eslint/indentEnforce consistent indentation:heavy_check_mark::wrench:
@typescript-eslint/interface-name-prefixRequire that interface names be prefixed with I:heavy_check_mark:
@typescript-eslint/member-delimiter-styleRequire a specific member delimiter style for interfaces and type literals:heavy_check_mark::wrench:
@typescript-eslint/member-namingEnforces naming conventions for class members by visibility
@typescript-eslint/member-orderingRequire a consistent member declaration order
@typescript-eslint/no-array-constructorDisallow generic Array constructors:heavy_check_mark::wrench:
@typescript-eslint/no-empty-functionDisallow empty functions
@typescript-eslint/no-empty-interfaceDisallow the declaration of empty interfaces:heavy_check_mark:
@typescript-eslint/no-explicit-anyDisallow usage of the any type:heavy_check_mark::wrench:
@typescript-eslint/no-extra-parensDisallow unnecessary parentheses:wrench:
@typescript-eslint/no-extraneous-classForbids the use of classes as namespaces
@typescript-eslint/no-floating-promisesRequires Promise-like values to be handled appropriately.:thought_balloon:
@typescript-eslint/no-for-in-arrayDisallow iterating over an array with a for-in loop:thought_balloon:
@typescript-eslint/no-inferrable-typesDisallows explicit type declarations for variables or parameters initialized to a number, string, or boolean:heavy_check_mark::wrench:
@typescript-eslint/no-magic-numbersDisallows magic numbers
@typescript-eslint/no-misused-newEnforce valid definition of new and constructor:heavy_check_mark:
@typescript-eslint/no-misused-promisesAvoid using promises in places not designed to handle them:thought_balloon:
@typescript-eslint/no-namespaceDisallow the use of custom TypeScript modules and namespaces:heavy_check_mark:
@typescript-eslint/no-non-null-assertionDisallows non-null assertions using the ! postfix operator:heavy_check_mark:
@typescript-eslint/no-parameter-propertiesDisallow the use of parameter properties in class constructors:heavy_check_mark:
@typescript-eslint/no-require-importsDisallows invocation of require()
@typescript-eslint/no-this-aliasDisallow aliasing this
@typescript-eslint/no-type-aliasDisallow the use of type aliases
@typescript-eslint/no-unnecessary-qualifierWarns when a namespace qualifier is unnecessary:wrench::thought_balloon:
@typescript-eslint/no-unnecessary-type-argumentsWarns if an explicitly specified type argument is the default for that type parameter:wrench::thought_balloon:
@typescript-eslint/no-unnecessary-type-assertionWarns if a type assertion does not change the type of an expression:wrench::thought_balloon:
@typescript-eslint/no-unused-varsDisallow unused variables:heavy_check_mark:
@typescript-eslint/no-use-before-defineDisallow the use of variables before they are defined:heavy_check_mark:
@typescript-eslint/no-useless-constructorDisallow unnecessary constructors
@typescript-eslint/no-var-requiresDisallows the use of require statements except in import statements:heavy_check_mark:
@typescript-eslint/prefer-for-ofPrefer a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access the array being iterated
@typescript-eslint/prefer-function-typeUse function types instead of interfaces with call signatures:wrench:
@typescript-eslint/prefer-includesEnforce includes method over indexOf method:wrench::thought_balloon:
@typescript-eslint/prefer-namespace-keywordRequire the use of the namespace keyword instead of the module keyword to declare custom TypeScript modules:heavy_check_mark::wrench:
@typescript-eslint/prefer-readonlyRequires that private members are marked as readonly if they're never modified outside of the constructor:wrench::thought_balloon:
@typescript-eslint/prefer-regexp-execPrefer RegExp#exec() over String#match() if no global flag is provided:thought_balloon:
@typescript-eslint/prefer-string-starts-ends-withEnforce the use of String#startsWith and String#endsWith instead of other equivalent methods of checking substrings:wrench::thought_balloon:
@typescript-eslint/promise-function-asyncRequires any function or method that returns a Promise to be marked async:thought_balloon:
@typescript-eslint/require-array-sort-compareEnforce giving compare argument to Array#sort:thought_balloon:
@typescript-eslint/require-awaitDisallow async functions which have no await expression:thought_balloon:
@typescript-eslint/restrict-plus-operandsWhen adding two variables, operands must both be of type number or of type string:thought_balloon:
@typescript-eslint/semiRequire or disallow semicolons instead of ASI:wrench:
@typescript-eslint/strict-boolean-expressionsRestricts the types allowed in boolean expressions:thought_balloon:
@typescript-eslint/triple-slash-referenceSets preference level for triple slash directives versus ES6-style import declarations
@typescript-eslint/type-annotation-spacingRequire consistent spacing around type annotations:heavy_check_mark::wrench:
@typescript-eslint/typedefRequires type annotations to exist
@typescript-eslint/unbound-methodEnforces unbound methods are called with their expected scope:thought_balloon:
@typescript-eslint/unified-signaturesWarns for any two overloads that could be unified into one by using a union or an optional/rest parameter