Skip to content

Commit

Permalink
AA-13801 Create no-declare rule to prevent using declare keyword
Browse files Browse the repository at this point in the history
  • Loading branch information
norbertprocak committed Aug 4, 2022
1 parent 4867d70 commit e9bb868
Show file tree
Hide file tree
Showing 9 changed files with 9,419 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
coverage
dist
node_modules
134 changes: 134 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# Liniting rules plugin for TypeScript ESLint by LiveChat

A package of linting rules used in TypeScript ESLint.

## Quick-start


### Installation

```bash
$ npm i --save-dev @livechat/eslint-plugin
```


### Usage example

```json
{
"plugins": ["@livechat"],
"rules": {
"@livechat/no-declare": "error"
}
}
```


## Linting rules list

| Name | Description |
| -------------------------------------------------------------- | --------------------------------------------- |
| [`@livechat/no-declare`](#no-declare) | Forbids using 'declare' keyword |


## no-declare

Using 'declare' keyword may be forbidden for all or selected identifiers. You can use it for example to force another methods of declaring global variables, e.g. using 'import' forms.


### Options

```ts
type Options = {
onlyIdentifiers?: string[];
excludeIdentifiers?: string[];
};

const defaultOptions: Options = {
onlyIdentifiers: [];
excludeIdentifiers: [];
};
```

The rule accepts options with the following properties:

- `onlyIdentifiers` (optional) - If used, only the provided identifiers will be reported. All other identifiers declared with `declare` keyword will be ignored.
- `excludeIdentifiers` (optional) - If used, all identifiers will be reported except those provided in the array. If `onlyIdentifiers` is used, this option is ignored.


### default options

Don't use 'declare' keyword.

<!--tabs-->

#### ❌ Incorrect

```ts
declare const someConst: any;
declare const window: { location };
declare const x, y, z: number;
```

#### ✅ Correct

```ts
import someConst from 'some-lib';
import { window } from 'utils/global-declarations';
const { x, y, z } = window;
```


### onlyIdentifiers

Don't use 'declare' keyword for the provided identifiers.

```json
{
"@livechat/no-declare": [ "error", { "onlyIdentifiers": [ "window" ] } ]
}
```

<!--tabs-->

#### ❌ Incorrect

```ts
declare const window: any;
declare const window: { location };
```

#### ✅ Correct

```ts
import { window } from 'utils/global-declarations';
declare const someConst: any;
declare const x, y, z: number;
```


### excludeIdentifiers

Don't use 'declare' keyword except for the provided identifiers. If `onlyIdentifiers` is used, this option is ignored.

```json
{
"@livechat/no-declare": [ "error", { "excludeIdentifiers": [ "someConst" ] } ]
}
```

<!--tabs-->

#### ❌ Incorrect

```ts
declare const window: any;
declare const x, y, z: number;
```

#### ✅ Correct

```ts
import { window } from 'utils/global-declarations';
declare const someConst: any;
```
4 changes: 4 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
testEnvironment: 'node',
transform: { '^.+\\.tsx?$': 'ts-jest' }
};
Loading

0 comments on commit e9bb868

Please sign in to comment.