@itwin/eslint-plugin

5.2.1 • Public • Published

@itwin/eslint-plugin

ESLint plugin with default configuration and custom rules for iTwin.js projects. For best results, use with Typescript 4.1+

Installation

You'll first need to install ESLint and @itwin/eslint-plugin:

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

Using with VSCode

In order for VSCode to use the config file as it is set up, add the following setting to the the VSCode settings (in .vscode/settings.json):

"eslint.useFlatConfig": true,

Usage

Create an eslint.config.js file at the root of your project. To set up the file, import @itwin/eslint-plugin. Then set the file to export an array of configuration files. This will be done differently depending on whether your project uses ESM or CJS.

ESM

import iTwinPlugin from "@itwin/eslint-plugin";

export default [
  {
    files: ["**/*.{ts,tsx}"],
    ...iTwinPlugin.configs.iTwinjsRecommendedConfig,
  },
  {
    files: ["**/*.{ts,tsx}"],
    ...iTwinPlugin.configs.jsdocConfig,
  },
];

CJS

const iTwinPlugin = require("@itwin/eslint-plugin");

module.exports = [
  {
    files: ["**/*.{ts,tsx}"],
    ...iTwinPlugin.configs.iTwinjsRecommendedConfig,
  },
  {
    files: ["**/*.{ts,tsx}"],
    ...iTwinPlugin.configs.jsdocConfig,
  }
];

Then configure the rules you want to override, add a section with rules to be overriden and their severity.

const iTwinPlugin = require("@itwin/eslint-plugin");

module.exports = [
  {
    files: ["**/*.{ts,tsx}"],
    ...iTwinPlugin.configs.iTwinjsRecommendedConfig,
  },
  {
    files: ["**/*.{ts,tsx}"],
    ...iTwinPlugin.configs.jsdocConfig,
  },
  {
    rules: {
      "@typescript-eslint/no-explicit-any": "error",
    }
  }
];

Rules not in recommended configs

To add rules not set in the recommended configurations, add a plugins section with the @itwin/eslint-plugin that was imported. Then, add a rules section with the rule that needs to be added and the severity of error for the rule.

If a configuration that defines the language parsing options is not used, add a languageOptions object. Below is an example of using the @itwin/no-internal rule where we define the language options to parse typescript.

no-internal - prevents use of internal/alpha APIs. Example configurations

// custom config
const iTwinPlugin = require("@itwin/eslint-plugin");

module.exports = [
  {
    languageOptions: {
      sourceType: "module",
      parser: require("@typescript-eslint/parser"),
      parserOptions: {
        project: "tsconfig.json",
        ecmaVersion: "latest",
        ecmaFeatures: {
          jsx: true,
          modules: true
        },
      },
    },
    plugins: {
      "@itwin": iTwinPlugin
    },
    files: ["**/*.{ts,tsx}"],
    rules: {
      "@itwin/no-internal": "error",
    }
  }
];
// default config
rules: {
  "@itwin/no-internal": "error"
}
// tag is set to ["internal", "alpha"] by default

The rule has some options:

  • tag - List of tags where the rule will report on usages of APIs documented as them. Allowed tags: internal, alpha, beta, public.
    • Default: internal, alpha
  • checkedPackagePatterns - List of regex patterns where the rule will only be enforced for APIs that are from a package whose name matches a pattern in the list.
    • Default: ^@itwin/, ^@bentley/
  • dontAllowWorkspaceInternal - Flag that if set to true, the rule will be enforced on usages of APIs from packages that are part of the same workspace/monorepo. If set to false, usages of APIs from workspace dependencies will not report an error.
    • Default: false

Helper commands

no-internal-report - Runs eslint with the @itwin/no-internal rule turned on ("error") using a custom formatter that summarizes the output

This can be run using npx or from the scripts section of package.json:

  "scripts": {
    "no-internal-report": "no-internal-report \"src/**/*.ts*\""
  },

This command forwards all arguments to eslint, so it can be further customized as needed. For example, to specify the tags for the no-internal rule:

  "scripts": {
    "no-internal-report": "no-internal-report --tags internal,alpha,beta \"src/**/*.ts*\""
  },

In addition to this we also have a custom formatter that can be used to generate a summary table report of the no-internal violations in your codebase.

It creates a easily readable summary table of all your violations. For example: Summary Table

In addition, this also creates a csv with the same table in the current working directory. You can call it like this:

eslint ./**/*.{ts,tsx} 1>&2 -f ./node_modules/@itwin/eslint-plugin/dist/formatters/no-internal-summary-with-table.js

If you want to import the table creator directly into your code and acquire the string before printing, you can do so by importing the function noInternalSummaryTableCreator from @itwin/eslint-plugin package, then pass in the Message[] type objects or directly pass in the LintResult[] objects you get when calling eslint.lintFiles().

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
3.8.0-dev.10rc
3.8.03,206previous
5.2.12,079latest
5.2.2-dev.249nightly

Version History

VersionDownloads (Last 7 Days)Published
5.2.2-dev.249
5.2.2-dev.17
5.2.2-dev.037
5.2.12,079
5.2.1-dev.012
5.2.05
5.1.1-dev.01
5.1.0293
5.0.1-dev.10
5.0.1-dev.01
5.0.0140
5.0.0-dev.2357
5.0.0-dev.12,889
4.1.1887
4.1.00
4.0.2138
4.0.2-dev.04
4.0.11,433
4.0.00
4.0.0-dev.5218
4.0.0-dev.510
4.0.0-dev.501
4.0.0-dev.491
3.8.03,206
3.8.0-dev.10
3.7.1724
3.7.160
3.7.150
3.7.140
3.7.130
4.0.0-dev.4823
3.7.121
4.0.0-dev.470
4.0.0-dev.460
4.0.0-dev.452
4.0.0-dev.442
3.7.111
4.0.0-dev.431
4.0.0-dev.420
4.0.0-dev.412
4.0.0-dev.400
3.7.9100
4.0.0-dev.390
3.7.8339
3.7.718
3.7.60
3.7.51
4.0.0-dev.3812
4.0.0-dev.370
4.0.0-dev.361
3.7.41
3.7.30
4.0.0-dev.354
4.0.0-dev.340
3.7.20
3.7.115
3.7.08
4.0.0-dev.330
3.7.0-dev.815
3.6.30
3.7.0-dev.71
3.7.0-dev.60
3.7.0-dev.50
4.0.0-dev.320
4.0.0-dev.310
3.7.0-dev.30
3.6.20
3.7.0-dev.20
4.0.0-dev.300
4.0.0-dev.280
3.6.10
3.5.60
4.0.0-dev.241
4.0.0-dev.230
4.0.0-dev.220
4.0.0-dev.211
4.0.0-dev.180
4.0.0-dev.171
3.7.0-dev.11
4.0.0-dev.151
4.0.0-dev.111
3.6.00
4.0.0-dev.100
4.0.0-dev.80
4.0.0-dev.71
4.0.0-dev.60
4.0.0-dev.40
3.6.0-dev.660
4.0.0-dev.20
4.0.0-dev.10
3.6.0-dev.650
3.6.0-dev.620
3.5.50
3.6.0-dev.600
3.6.0-dev.590
3.6.0-dev.550
3.6.0-dev.540
3.6.0-dev.530
3.6.0-dev.521
3.5.40
3.6.0-dev.510
3.6.0-dev.501
3.5.30
3.6.0-dev.470
3.6.0-dev.441
3.5.20
3.6.0-dev.410
3.6.0-dev.401
3.6.0-dev.380
3.6.0-dev.360
3.6.0-dev.350
3.6.0-dev.341
3.6.0-dev.330
3.6.0-dev.321
3.6.0-dev.220
3.6.0-dev.210
3.5.10
3.6.0-dev.140
3.6.0-dev.110
3.6.0-dev.100
3.6.0-dev.80
3.6.0-dev.70
3.5.00
3.5.0-dev.680
3.6.0-dev.51
3.5.0-dev.671
3.6.0-dev.30
3.6.0-dev.10
3.5.0-dev.661
3.5.0-dev.650
3.4.70
3.5.0-dev.631
3.5.0-dev.611
3.5.0-dev.600
3.5.0-dev.590
3.5.0-dev.581
3.5.0-dev.570
3.4.60
3.5.0-dev.530
3.5.0-dev.520
3.4.51
3.5.0-dev.510
3.5.0-dev.490
3.5.0-dev.470
3.5.0-dev.450
3.4.40
3.5.0-dev.430
3.5.0-dev.410
3.5.0-dev.350
3.5.0-dev.341
3.5.0-dev.331
3.5.0-dev.320
3.5.0-dev.311
3.5.0-dev.300
3.4.31
3.5.0-dev.290
3.5.0-dev.280
3.5.0-dev.270
3.5.0-dev.260
3.4.221
3.5.0-dev.250
3.5.0-dev.240
3.5.0-dev.220
3.5.0-dev.210
3.5.0-dev.201
3.5.0-dev.190
3.4.10
3.5.0-dev.181
3.5.0-dev.160
3.4.00
3.4.0-dev.630
3.5.0-dev.140
3.5.0-dev.130
3.4.0-dev.620
3.5.0-dev.120
3.5.0-dev.110
3.5.0-dev.81
3.4.0-dev.610
3.5.0-dev.71
3.4.0-dev.600
3.5.0-dev.50
3.5.0-dev.40
3.4.0-dev.590
3.4.0-dev.580
3.4.0-dev.571
3.4.0-dev.560
3.3.50
3.4.0-dev.551
3.4.0-dev.500
3.4.0-dev.481
3.4.0-dev.471
3.4.0-dev.460
3.4.0-dev.441
3.4.0-dev.430
3.4.0-dev.420
3.4.0-dev.411
3.4.0-dev.401
3.4.0-dev.390
3.4.0-dev.371
3.3.40
3.4.0-dev.361
3.4.0-dev.351
3.3.31
3.4.0-dev.340
3.4.0-dev.331
3.4.0-dev.320
3.4.0-dev.300
3.3.20
3.4.0-dev.290
3.4.0-dev.281
3.4.0-dev.270
3.4.0-dev.260
3.4.0-dev.250
3.4.0-dev.240
3.3.10
3.2.90
3.4.0-dev.230
3.4.0-dev.220
3.4.0-dev.210
3.4.0-dev.200
3.4.0-dev.190
3.4.0-dev.180
3.4.0-dev.160
3.3.00
3.3.0-dev.890
3.4.0-dev.150
3.4.0-dev.140
3.4.0-dev.120
3.4.0-dev.100
3.3.0-dev.880
3.4.0-dev.90
3.3.0-dev.870
3.3.0-dev.860
3.4.0-dev.80
3.4.0-dev.70
3.2.81
3.4.0-dev.31
3.3.0-dev.850
3.4.0-dev.20
3.4.0-dev.11
3.4.0-dev.01
3.3.0-dev.841
3.3.0-dev.830
3.2.73
3.3.0-dev.820
3.3.0-dev.810
3.3.0-dev.800
3.3.0-dev.790
3.3.0-dev.780
3.3.0-dev.770
3.3.0-dev.760
3.3.0-dev.751
3.3.0-dev.720
3.3.0-dev.710
3.3.0-dev.700
3.3.0-dev.690
3.3.0-dev.680
3.3.0-dev.670
3.3.0-dev.660
3.2.69
3.3.0-dev.651
3.3.0-dev.640
3.3.0-dev.630
3.2.50
3.3.0-dev.620
3.3.0-dev.610
3.3.0-dev.600
3.3.0-dev.580
3.3.0-dev.570
3.3.0-dev.560
3.3.0-dev.550
3.3.0-dev.541
3.3.0-dev.530
3.3.0-dev.520
3.3.0-dev.511
3.3.0-dev.500
3.3.0-dev.491
3.3.0-dev.481
3.3.0-dev.470
3.3.0-dev.460
3.3.0-dev.440
3.3.0-dev.430
3.3.0-dev.420
3.2.434
3.3.0-dev.410
3.3.0-dev.401
3.3.0-dev.390
3.3.0-dev.380
3.3.0-dev.370
3.3.0-dev.360
3.2.30
3.3.0-dev.350
3.3.0-dev.340
3.3.0-dev.330
3.3.0-dev.320
3.3.0-dev.310
3.3.0-dev.300
3.3.0-dev.290
3.2.20
3.3.0-dev.280
3.3.0-dev.270
3.3.0-dev.260
3.2.10
3.3.0-dev.250
3.3.0-dev.240
3.3.0-dev.230
3.3.0-dev.221
3.3.0-dev.210
3.3.0-dev.200
3.3.0-dev.190
3.3.0-dev.180
3.3.0-dev.130
3.3.0-dev.110
3.3.0-dev.100
3.3.0-dev.90
3.3.0-dev.81
3.2.00
3.3.0-dev.71
3.3.0-dev.60
3.2.0-dev.770
3.3.0-dev.50
3.2.0-dev.760
3.3.0-dev.40
3.3.0-dev.31
3.3.0-dev.21
3.3.0-dev.11
3.2.0-dev.750
3.2.0-dev.740
3.3.0-dev.00
3.2.0-dev.720
3.2.0-dev.710
3.2.0-dev.700
3.2.0-dev.690
3.2.0-dev.680
3.2.0-dev.670
3.2.0-dev.660
3.2.0-dev.650
3.2.0-dev.640
3.2.0-dev.630
3.2.0-dev.621
3.2.0-dev.610
3.2.0-dev.600
3.2.0-dev.590
3.2.0-dev.580
3.2.0-dev.571
3.2.0-dev.560
3.2.0-dev.550
3.2.0-dev.540
3.2.0-dev.530
3.2.0-dev.520
3.2.0-dev.510
3.2.0-dev.500
3.2.0-dev.490
3.2.0-dev.481
3.2.0-dev.471
3.2.0-dev.460
3.2.0-dev.451
3.1.31
3.2.0-dev.440
3.2.0-dev.430
3.2.0-dev.421
3.2.0-dev.410
3.2.0-dev.400
3.2.0-dev.390
3.2.0-dev.380
3.2.0-dev.371
3.2.0-dev.360
3.1.20
3.2.0-dev.350
3.2.0-dev.340
3.2.0-dev.330
3.2.0-dev.300
3.1.10
3.2.0-dev.290
3.2.0-dev.280
3.1.00
3.2.0-dev.270
3.2.0-dev.261
3.2.0-dev.251
3.2.0-dev.240
3.1.0-dev.480
3.0.30
3.2.0-dev.231
3.2.0-dev.220
3.2.0-dev.210
3.2.0-dev.200
3.1.0-dev.471
3.2.0-dev.190
3.2.0-dev.181
3.2.0-dev.170
3.2.0-dev.160
3.2.0-dev.150
3.2.0-dev.140
3.1.0-dev.460
3.2.0-dev.130
3.2.0-dev.120
3.1.0-dev.450
3.2.0-dev.90
3.0.20
3.2.0-dev.80
3.2.0-dev.70
3.1.0-dev.441
3.2.0-dev.60
3.2.0-dev.50
3.2.0-dev.30
3.2.0-dev.10
3.1.0-dev.420
3.2.0-dev.00
3.1.0-dev.410
3.1.0-dev.400
3.1.0-dev.390
3.1.0-dev.380
3.1.0-dev.370
3.1.0-dev.361
3.0.10
3.1.0-dev.350
3.1.0-dev.340
3.1.0-dev.330
3.1.0-dev.320
3.1.0-dev.310
3.1.0-dev.290
3.1.0-dev.281
3.1.0-dev.270
3.1.0-dev.261
3.1.0-dev.250
3.1.0-dev.241
3.1.0-dev.231
3.1.0-dev.220
3.1.0-dev.210
3.1.0-dev.200
3.1.0-dev.190
3.1.0-dev.150
3.1.0-dev.140
3.1.0-dev.130
3.1.0-dev.120
3.0.019
3.1.0-dev.111
3.1.0-dev.80
3.1.0-dev.70
3.1.0-dev.60
3.1.0-dev.51
3.1.0-dev.11
3.1.0-dev.00
3.0.0-dev.1850
3.0.0-dev.1843
3.0.0-dev.1830
3.0.0-dev.1821
3.0.0-dev.1810
3.0.0-dev.1800
3.0.0-dev.1790
3.0.0-dev.1780
3.0.0-dev.1770
3.0.0-dev.1760
3.0.0-dev.1750
3.0.0-dev.1740
3.0.0-dev.1730
3.0.0-dev.1720
3.0.0-dev.1700
3.0.0-dev.1690
3.0.0-dev.1680
3.0.0-dev.1670
3.0.0-dev.1660
3.0.0-dev.1630
3.0.0-dev.1610
3.0.0-dev.1600
3.0.0-dev.1590
3.0.0-dev.1571
3.0.0-dev.1560
3.0.0-dev.1550
3.0.0-dev.1540
3.0.0-dev.1530
3.0.0-dev.1520
3.0.0-dev.1510
3.0.0-dev.1490
3.0.0-dev.1486
3.0.0-dev.1471
3.0.0-dev.1460
3.0.0-dev.1451
3.0.0-dev.1440
3.0.0-dev.1430
3.0.0-dev.1410
3.0.0-dev.1400
3.0.0-dev.1390
3.0.0-dev.1380
3.0.0-dev.1360
3.0.0-dev.1355
3.0.0-dev.1340
3.0.0-dev.1330
3.0.0-dev.1310
3.0.0-dev.1300
3.0.0-dev.1290
3.0.0-dev.1280
3.0.0-dev.1271
3.0.0-dev.1260
3.0.0-dev.1250
3.0.0-dev.1240
3.0.0-dev.1230
3.0.0-dev.1220
3.0.0-dev.1210
3.0.0-dev.1200
3.0.0-dev.1190
3.0.0-dev.1170
3.0.0-dev.1160
3.0.0-dev.1151
3.0.0-dev.1141
3.0.0-dev.1131
3.0.0-dev.1120
3.0.0-dev.1090
3.0.0-dev.1080
3.0.0-dev.1070
3.0.0-dev.1060
3.0.0-dev.1050
3.0.0-dev.1040
3.0.0-dev.1030
3.0.0-extension.11
3.0.0-dev.1020
3.0.0-dev.1010
3.0.0-dev.1000
3.0.0-dev.990
3.0.0-dev.980
3.0.0-extension.00
3.0.0-dev.970
3.0.0-dev.960
3.0.0-dev.950
3.0.0-dev.940
3.0.0-dev.930
3.0.0-dev.921
3.0.0-dev.910
3.0.0-dev.900
3.0.0-dev.891
3.0.0-dev.880
3.0.0-dev.870
3.0.0-dev.860
3.0.0-dev.850
3.0.0-dev.840
3.0.0-dev.831
3.0.0-dev.820
3.0.0-dev.810
3.0.0-dev.801
3.0.0-dev.791
3.0.0-dev.780
3.0.0-dev.770
3.0.0-dev.760
3.0.0-dev.730
3.0.0-dev.720

Package Sidebar

Install

npm i @itwin/eslint-plugin

Weekly Downloads

12,324

Version

5.2.1

License

MIT

Unpacked Size

107 kB

Total Files

29

Last publish

Collaborators

  • imodeljs
  • colinkerr
  • wgoehrig
  • aruniverse
  • cshafer