0.5.0 • Published 2 years ago

@stratusgrid/eslint-config-typescript v0.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

StratusGrid ESLint Config - TypeScript

StratusGrid's standard ESLint config for TypeScript projects. This configuration is primarily based on the Airbnb base style guide and it's community supported TypeScript extension eslint-config-airbnb-typescript. All custom rules are commented to provide rationales.

Getting Started

Install the package as a dev dependency:

npm i -D eslint @stratusgrid/eslint-config-typescript

Then set up your eslintrc:

// <project-root>/.eslintrc.js
module.exports = {
  extends: [
    '@stratusgrid/eslint-config-typescript',
    // or for AWS CDK projects:
    // '@stratusgrid/eslint-config-typescript/cdk'
  ],
  parserOptions: {
    project: 'tsconfig.json',
  },
  // ...any other config you wish to set
};

Fine-Tuning Files to Lint

Typically in TypeScript projects, you will want to lint files that are not targeted for compilation by your tsconfig.json. To ensure these files are linted, it is common practice to create an extended tsconfig.json just for use by ESLint.

Example

Include the following file in your project:

// <project-root>/.tsconfig.eslint.json
{
  "extends": "./tsconfig.json", // assumes your tsconfig is in the same directory
  "files": [
    ".eslintrc.js",
    "jest.config.js"
    // ...relative paths to other files you want linted
  ],
  "include": [
    "scripts/**/*",
    "test/**/*"
    // ...other patterns for which you want linting
  ],
  "exclude": [
    "node_modules",
    "coverage",
    "cdk.out"
    // ...other patterns for which you do *not* want linting
  ]
}

Then target it in your .eslintrc.js by setting parserOptions: { project: '.tsconfig.eslint.json' }. This file will be ignored completely by the TypeScript compiler and will not affect your builds.

Helpful package.json scripts

{
  "scripts": {
    "lint": "eslint ./",
    "lint:fix": "eslint --fix ./"
  }
}

Tooling

vscode

{
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}