diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0986c2df8f6c..0cae9596da6e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -43,7 +43,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Build
@@ -86,7 +85,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Build
@@ -173,7 +171,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Build
@@ -217,7 +214,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Build
@@ -257,7 +253,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Build
@@ -340,7 +335,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Build
diff --git a/.github/workflows/manual-release.yml b/.github/workflows/manual-release.yml
index 4f75c3b438e7..327d5947236a 100644
--- a/.github/workflows/manual-release.yml
+++ b/.github/workflows/manual-release.yml
@@ -45,7 +45,6 @@ jobs:
- name: Install dependencies
run: |
yarn --ignore-engines --frozen-lockfile --ignore-scripts
- yarn lerna:init
yarn check:clean-workspace-after-install
- name: Run build
diff --git a/.huskyrc b/.huskyrc
deleted file mode 100644
index 687c2614bf8a..000000000000
--- a/.huskyrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "hooks": {
- "pre-commit": "yarn pre-commit",
- "pre-push": "yarn pre-push",
- "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
- }
-}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1b47e3099906..3d173877642d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,22 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnecessary-type-assertion] handle assignment ([#3133](https://github.com/typescript-eslint/typescript-eslint/issues/3133)) ([cb22561](https://github.com/typescript-eslint/typescript-eslint/commit/cb2256168c67e0383083673a5afe77076de49da5))
+
+
+### Features
+
+* **eslint-plugin:** [strict-bool-expr] add fixes and suggestions ([#2847](https://github.com/typescript-eslint/typescript-eslint/issues/2847)) ([3f9e9a1](https://github.com/typescript-eslint/typescript-eslint/commit/3f9e9a1e9fc3e507bd01d1913ef642cd129de402))
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
diff --git a/lerna.json b/lerna.json
index df984d35e16c..f760626ee5dc 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "4.16.1",
+ "version": "4.17.0",
"npmClient": "yarn",
"useWorkspaces": true,
"stream": true
diff --git a/package.json b/package.json
index a7a9b8fc318c..65d383df6c6c 100644
--- a/package.json
+++ b/package.json
@@ -27,12 +27,11 @@
"cz": "git-cz",
"format": "prettier --write \"./**/*.{ts,js,json,md}\"",
"generate:contributors": "yarn ts-node --transpile-only ./tools/generate-contributors.ts && yarn all-contributors generate",
- "lerna:init": "lerna bootstrap --ignore-scripts && lerna link --force-local",
"lint:fix": "eslint . --ext .js,.ts --fix",
"lint:markdown:fix": "yarn lint:markdown --fix",
"lint:markdown": "markdownlint \"**/*.md\" --config=.markdownlint.json --ignore-path=.markdownlintignore",
"lint": "eslint . --ext .js,.ts",
- "postinstall": "yarn husky install && yarn lerna:init && yarn build",
+ "postinstall": "yarn husky install && yarn build",
"pre-commit": "yarn lint-staged",
"pre-push": "yarn check:format",
"test": "lerna run test --concurrency 1",
@@ -72,9 +71,9 @@
"node": "^10.12.0 || >=12.0.0"
},
"devDependencies": {
- "@commitlint/cli": "^11.0.0",
- "@commitlint/config-conventional": "^11.0.0",
- "@commitlint/config-lerna-scopes": "^11.0.0",
+ "@commitlint/cli": "^12.0.1",
+ "@commitlint/config-conventional": "^12.0.1",
+ "@commitlint/config-lerna-scopes": "^12.0.1",
"@types/babel__code-frame": "^7.0.2",
"@types/debug": "^4.1.5",
"@types/eslint-visitor-keys": "^1.0.0",
diff --git a/packages/eslint-plugin-internal/CHANGELOG.md b/packages/eslint-plugin-internal/CHANGELOG.md
index fbfe59d26529..5f6039b50899 100644
--- a/packages/eslint-plugin-internal/CHANGELOG.md
+++ b/packages/eslint-plugin-internal/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin-internal
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/eslint-plugin-internal
diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json
index 8d6cc10ab338..0c8f39247c1a 100644
--- a/packages/eslint-plugin-internal/package.json
+++ b/packages/eslint-plugin-internal/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/eslint-plugin-internal",
- "version": "4.16.1",
+ "version": "4.17.0",
"private": true,
"main": "dist/index.js",
"scripts": {
@@ -14,7 +14,7 @@
},
"dependencies": {
"@types/prettier": "*",
- "@typescript-eslint/experimental-utils": "4.16.1",
+ "@typescript-eslint/experimental-utils": "4.17.0",
"prettier": "*"
}
}
diff --git a/packages/eslint-plugin-tslint/CHANGELOG.md b/packages/eslint-plugin-tslint/CHANGELOG.md
index 423df7673046..1180462bd2b6 100644
--- a/packages/eslint-plugin-tslint/CHANGELOG.md
+++ b/packages/eslint-plugin-tslint/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/eslint-plugin-tslint
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/eslint-plugin-tslint
diff --git a/packages/eslint-plugin-tslint/package.json b/packages/eslint-plugin-tslint/package.json
index 1deff124a26e..6874c940ed4e 100644
--- a/packages/eslint-plugin-tslint/package.json
+++ b/packages/eslint-plugin-tslint/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/eslint-plugin-tslint",
- "version": "4.16.1",
+ "version": "4.17.0",
"main": "dist/index.js",
"typings": "src/index.ts",
"description": "TSLint wrapper plugin for ESLint",
@@ -38,7 +38,7 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/experimental-utils": "4.16.1",
+ "@typescript-eslint/experimental-utils": "4.17.0",
"lodash": "^4.17.15"
},
"peerDependencies": {
@@ -48,6 +48,6 @@
},
"devDependencies": {
"@types/lodash": "*",
- "@typescript-eslint/parser": "4.16.1"
+ "@typescript-eslint/parser": "4.17.0"
}
}
diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md
index 4b4fda7ee153..717d2a5f215c 100644
--- a/packages/eslint-plugin/CHANGELOG.md
+++ b/packages/eslint-plugin/CHANGELOG.md
@@ -3,6 +3,22 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+
+### Bug Fixes
+
+* **eslint-plugin:** [no-unnecessary-type-assertion] handle assignment ([#3133](https://github.com/typescript-eslint/typescript-eslint/issues/3133)) ([cb22561](https://github.com/typescript-eslint/typescript-eslint/commit/cb2256168c67e0383083673a5afe77076de49da5))
+
+
+### Features
+
+* **eslint-plugin:** [strict-bool-expr] add fixes and suggestions ([#2847](https://github.com/typescript-eslint/typescript-eslint/issues/2847)) ([3f9e9a1](https://github.com/typescript-eslint/typescript-eslint/commit/3f9e9a1e9fc3e507bd01d1913ef642cd129de402))
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/eslint-plugin
diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md
index 3a504fe7d83a..69ea06c23082 100644
--- a/packages/eslint-plugin/README.md
+++ b/packages/eslint-plugin/README.md
@@ -169,7 +169,7 @@ Pro Tip: For larger codebases you may want to consider splitting our linting int
| [`@typescript-eslint/restrict-plus-operands`](./docs/rules/restrict-plus-operands.md) | When adding two variables, operands must both be of type number or of type string | :heavy_check_mark: | | :thought_balloon: |
| [`@typescript-eslint/restrict-template-expressions`](./docs/rules/restrict-template-expressions.md) | Enforce template literal expressions to be of string type | :heavy_check_mark: | | :thought_balloon: |
| [`@typescript-eslint/sort-type-union-intersection-members`](./docs/rules/sort-type-union-intersection-members.md) | Enforces that members of a type union/intersection are sorted alphabetically | | :wrench: | |
-| [`@typescript-eslint/strict-boolean-expressions`](./docs/rules/strict-boolean-expressions.md) | Restricts the types allowed in boolean expressions | | | :thought_balloon: |
+| [`@typescript-eslint/strict-boolean-expressions`](./docs/rules/strict-boolean-expressions.md) | Restricts the types allowed in boolean expressions | | :wrench: | :thought_balloon: |
| [`@typescript-eslint/switch-exhaustiveness-check`](./docs/rules/switch-exhaustiveness-check.md) | Exhaustiveness checking in switch with union type | | | :thought_balloon: |
| [`@typescript-eslint/triple-slash-reference`](./docs/rules/triple-slash-reference.md) | Sets preference level for triple slash directives versus ES6-style import declarations | :heavy_check_mark: | | |
| [`@typescript-eslint/type-annotation-spacing`](./docs/rules/type-annotation-spacing.md) | Require consistent spacing around type annotations | | :wrench: | |
diff --git a/packages/eslint-plugin/docs/rules/consistent-type-imports.md b/packages/eslint-plugin/docs/rules/consistent-type-imports.md
index c30e59b40b99..a5808b455788 100644
--- a/packages/eslint-plugin/docs/rules/consistent-type-imports.md
+++ b/packages/eslint-plugin/docs/rules/consistent-type-imports.md
@@ -61,6 +61,6 @@ const x: import('Bar') = 1;
## When Not To Use It
- If you are not using TypeScript 3.8 (or greater), then you will not be able to use this rule, as type-only imports are not allowed.
-- Certain libraries use the non-inlined imports to infer information about the variables. For example, for dependency injection.
+- Certain libraries use the non-inlined imports to infer information about the variables. For example, for dependency injection.
type-only imports cannot be used with these libraries. See [#2559](https://github.com/typescript-eslint/typescript-eslint/issues/2559#issuecomment-692780580)
- If you specifically want to use both import kinds for stylistic reasons, you can disable this rule.
diff --git a/packages/eslint-plugin/docs/rules/no-magic-numbers.md b/packages/eslint-plugin/docs/rules/no-magic-numbers.md
index f41204c132bf..8149ad6ddd6b 100644
--- a/packages/eslint-plugin/docs/rules/no-magic-numbers.md
+++ b/packages/eslint-plugin/docs/rules/no-magic-numbers.md
@@ -53,8 +53,8 @@ Examples of **incorrect** code for the `{ "ignoreEnums": false }` option:
```ts
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreEnums": false }]*/
-enum foo = {
- SECOND = 1000,
+enum foo {
+ SECOND = 1000,
}
```
@@ -63,8 +63,8 @@ Examples of **correct** code for the `{ "ignoreEnums": true }` option:
```ts
/*eslint @typescript-eslint/no-magic-numbers: ["error", { "ignoreEnums": true }]*/
-enum foo = {
- SECOND = 1000,
+enum foo {
+ SECOND = 1000,
}
```
diff --git a/packages/eslint-plugin/docs/rules/strict-boolean-expressions.md b/packages/eslint-plugin/docs/rules/strict-boolean-expressions.md
index 9eb5712ab482..b1ad94d8b340 100644
--- a/packages/eslint-plugin/docs/rules/strict-boolean-expressions.md
+++ b/packages/eslint-plugin/docs/rules/strict-boolean-expressions.md
@@ -155,6 +155,38 @@ You should be using `strictNullChecks` to ensure complete type-safety in your co
If for some reason you cannot turn on `strictNullChecks`, but still want to use this rule - you can use this option to allow it - but know that the behavior of this rule is _undefined_ with the compiler option turned off. We will not accept bug reports if you are using this option.
+## Fixes and suggestions
+
+This rule provides following fixes and suggestions for particular types in boolean context:
+
+- `boolean` - Always allowed - no fix needed.
+- `string` - (when `allowString` is `false`) - Provides following suggestions:
+ - Change condition to check string's length (`str` → `str.length > 0`)
+ - Change condition to check for empty string (`str` → `str !== ""`)
+ - Explicitly cast value to a boolean (`str` → `Boolean(str)`)
+- `number` - (when `allowNumber` is `false`):
+ - For `array.length` - Provides **autofix**:
+ - Change condition to check for 0 (`array.length` → `array.length > 0`)
+ - For other number values - Provides following suggestions:
+ - Change condition to check for 0 (`num` → `num !== 0`)
+ - Change condition to check for NaN (`num` → `!Number.isNaN(num)`)
+ - Explicitly cast value to a boolean (`num` → `Boolean(num)`)
+- `object | null | undefined` - (when `allowNullableObject` is `false`) - Provides **autofix**:
+ - Change condition to check for null/undefined (`maybeObj` → `maybeObj != null`)
+- `boolean | null | undefined` - Provides following suggestions:
+ - Explicitly treat nullish value the same as false (`maybeBool` → `maybeBool ?? false`)
+ - Change condition to check for true/false (`maybeBool` → `maybeBool === true`)
+- `string | null | undefined` - Provides following suggestions:
+ - Change condition to check for null/undefined (`maybeStr` → `maybeStr != null`)
+ - Explicitly treat nullish value the same as an empty string (`maybeStr` → `maybeStr ?? ""`)
+ - Explicitly cast value to a boolean (`maybeStr` → `Boolean(maybeStr)`)
+- `number | null | undefined` - Provides following suggestions:
+ - Change condition to check for null/undefined (`maybeNum` → `maybeNum != null`)
+ - Explicitly treat nullish value the same as 0 (`maybeNum` → `maybeNum ?? 0`)
+ - Explicitly cast value to a boolean (`maybeNum` → `Boolean(maybeNum)`)
+- `any` and `unknown` - Provides following suggestions:
+ - Explicitly cast value to a boolean (`value` → `Boolean(value)`)
+
## Related To
- TSLint: [strict-boolean-expressions](https://palantir.github.io/tslint/rules/strict-boolean-expressions)
diff --git a/packages/eslint-plugin/docs/rules/triple-slash-reference.md b/packages/eslint-plugin/docs/rules/triple-slash-reference.md
index af9e5498b6d4..9eb463a3c790 100644
--- a/packages/eslint-plugin/docs/rules/triple-slash-reference.md
+++ b/packages/eslint-plugin/docs/rules/triple-slash-reference.md
@@ -2,8 +2,6 @@
Use of triple-slash reference type directives is discouraged in favor of the newer `import` style. This rule allows you to ban use of `/// `, `/// `, or `/// ` directives.
-Consider using this rule in place of [`no-triple-slash-reference`](./no-triple-slash-reference.md) which has been deprecated.
-
## Rule Details
With `{ "path": "never", "types": "never", "lib": "never" }` options set, the following will all be **incorrect** usage:
diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json
index 8391c2b25500..87cfd4ab8001 100644
--- a/packages/eslint-plugin/package.json
+++ b/packages/eslint-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/eslint-plugin",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "TypeScript plugin for ESLint",
"keywords": [
"eslint",
@@ -42,8 +42,8 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/experimental-utils": "4.16.1",
- "@typescript-eslint/scope-manager": "4.16.1",
+ "@typescript-eslint/experimental-utils": "4.17.0",
+ "@typescript-eslint/scope-manager": "4.17.0",
"debug": "^4.1.1",
"functional-red-black-tree": "^1.0.1",
"lodash": "^4.17.15",
diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts b/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts
index 634d8b890ce1..5ae12f5a33d6 100644
--- a/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts
+++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts
@@ -135,7 +135,26 @@ export default util.createRule({
return {
TSNonNullExpression(node): void {
+ if (
+ node.parent?.type === AST_NODE_TYPES.AssignmentExpression &&
+ node.parent?.operator === '=' &&
+ node.parent.left === node
+ ) {
+ context.report({
+ node,
+ messageId: 'contextuallyUnnecessary',
+ fix(fixer) {
+ return fixer.removeRange([
+ node.expression.range[1],
+ node.range[1],
+ ]);
+ },
+ });
+ return;
+ }
+
const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+
const type = util.getConstrainedTypeAtLocation(
checker,
originalNode.expression,
diff --git a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts
index 51265feb1368..b8e25d4542a3 100644
--- a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts
+++ b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts
@@ -1,9 +1,10 @@
import {
- TSESTree,
AST_NODE_TYPES,
+ ParserServices,
+ TSESTree,
} from '@typescript-eslint/experimental-utils';
-import * as ts from 'typescript';
import * as tsutils from 'tsutils';
+import * as ts from 'typescript';
import * as util from '../util';
export type Options = [
@@ -30,12 +31,24 @@ export type MessageId =
| 'conditionErrorNullableNumber'
| 'conditionErrorObject'
| 'conditionErrorNullableObject'
- | 'noStrictNullCheck';
+ | 'noStrictNullCheck'
+ | 'conditionFixDefaultFalse'
+ | 'conditionFixDefaultEmptyString'
+ | 'conditionFixDefaultZero'
+ | 'conditionFixCompareNullish'
+ | 'conditionFixCastBoolean'
+ | 'conditionFixCompareTrue'
+ | 'conditionFixCompareFalse'
+ | 'conditionFixCompareStringLength'
+ | 'conditionFixCompareEmptyString'
+ | 'conditionFixCompareZero'
+ | 'conditionFixCompareNaN';
export default util.createRule({
name: 'strict-boolean-expressions',
meta: {
type: 'suggestion',
+ fixable: 'code',
docs: {
description: 'Restricts the types allowed in boolean expressions',
category: 'Best Practices',
@@ -93,6 +106,29 @@ export default util.createRule({
'An explicit null check is required.',
noStrictNullCheck:
'This rule requires the `strictNullChecks` compiler option to be turned on to function correctly.',
+
+ conditionFixDefaultFalse:
+ 'Explicitly treat nullish value the same as false (`value ?? false`)',
+ conditionFixDefaultEmptyString:
+ 'Explicitly treat nullish value the same as an empty string (`value ?? ""`)',
+ conditionFixDefaultZero:
+ 'Explicitly treat nullish value the same as 0 (`value ?? 0`)',
+ conditionFixCompareNullish:
+ 'Change condition to check for null/undefined (`value != null`)',
+ conditionFixCastBoolean:
+ 'Explicitly cast value to a boolean (`Boolean(value)`)',
+ conditionFixCompareTrue:
+ 'Change condition to check if true (`value === true`)',
+ conditionFixCompareFalse:
+ 'Change condition to check if false (`value === false`)',
+ conditionFixCompareStringLength:
+ "Change condition to check string's length (`value.length !== 0`)",
+ conditionFixCompareEmptyString:
+ 'Change condition to check for empty string (`value !== ""`)',
+ conditionFixCompareZero:
+ 'Change condition to check for 0 (`value !== 0`)',
+ conditionFixCompareNaN:
+ 'Change condition to check for NaN (`!Number.isNaN(value)`)',
},
},
defaultOptions: [
@@ -108,9 +144,10 @@ export default util.createRule({
},
],
create(context, [options]) {
- const service = util.getParserServices(context);
- const checker = service.program.getTypeChecker();
- const compilerOptions = service.program.getCompilerOptions();
+ const parserServices = util.getParserServices(context);
+ const typeChecker = parserServices.program.getTypeChecker();
+ const compilerOptions = parserServices.program.getCompilerOptions();
+ const sourceCode = context.getSourceCode();
const isStrictNullChecks = tsutils.isStrictCompilerOptionEnabled(
compilerOptions,
'strictNullChecks',
@@ -187,8 +224,8 @@ export default util.createRule({
return;
}
- const tsNode = service.esTreeNodeToTSNodeMap.get(node);
- const type = util.getConstrainedTypeAtLocation(checker, tsNode);
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
+ const type = util.getConstrainedTypeAtLocation(typeChecker, tsNode);
const types = inspectVariantTypes(tsutils.unionTypeParts(type));
const is = (...wantedTypes: readonly VariantType[]): boolean =>
@@ -217,7 +254,56 @@ export default util.createRule({
// nullable boolean
if (is('nullish', 'boolean')) {
if (!options.allowNullableBoolean) {
- context.report({ node, messageId: 'conditionErrorNullableBoolean' });
+ if (isLogicalNegationExpression(node.parent!)) {
+ // if (!nullableBoolean)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableBoolean',
+ suggest: [
+ {
+ messageId: 'conditionFixDefaultFalse',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} ?? false`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCompareFalse',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code} === false`,
+ }),
+ },
+ ],
+ });
+ } else {
+ // if (nullableBoolean)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableBoolean',
+ suggest: [
+ {
+ messageId: 'conditionFixDefaultFalse',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} ?? false`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCompareTrue',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} === true`,
+ }),
+ },
+ ],
+ });
+ }
}
return;
}
@@ -225,7 +311,74 @@ export default util.createRule({
// string
if (is('string')) {
if (!options.allowString) {
- context.report({ node, messageId: 'conditionErrorString' });
+ if (isLogicalNegationExpression(node.parent!)) {
+ // if (!string)
+ context.report({
+ node,
+ messageId: 'conditionErrorString',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code}.length === 0`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code} === ""`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `!Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ } else {
+ // if (string)
+ context.report({
+ node,
+ messageId: 'conditionErrorString',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code}.length > 0`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} !== ""`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ }
}
return;
}
@@ -233,7 +386,73 @@ export default util.createRule({
// nullable string
if (is('nullish', 'string')) {
if (!options.allowNullableString) {
- context.report({ node, messageId: 'conditionErrorNullableString' });
+ if (isLogicalNegationExpression(node.parent!)) {
+ // if (!nullableString)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableString',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code} == null`,
+ }),
+ },
+ {
+ messageId: 'conditionFixDefaultEmptyString',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} ?? ""`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `!Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ } else {
+ // if (nullableString)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableString',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} != null`,
+ }),
+ },
+ {
+ messageId: 'conditionFixDefaultEmptyString',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} ?? ""`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ }
}
return;
}
@@ -241,7 +460,101 @@ export default util.createRule({
// number
if (is('number')) {
if (!options.allowNumber) {
- context.report({ node, messageId: 'conditionErrorNumber' });
+ if (isArrayLengthExpression(node, typeChecker, parserServices)) {
+ if (isLogicalNegationExpression(node.parent!)) {
+ // if (!array.length)
+ context.report({
+ node,
+ messageId: 'conditionErrorNumber',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code} === 0`,
+ }),
+ });
+ } else {
+ // if (array.length)
+ context.report({
+ node,
+ messageId: 'conditionErrorNumber',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} > 0`,
+ }),
+ });
+ }
+ } else if (isLogicalNegationExpression(node.parent!)) {
+ // if (!number)
+ context.report({
+ node,
+ messageId: 'conditionErrorNumber',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareZero',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ // TODO: we have to compare to 0n if the type is bigint
+ wrap: code => `${code} === 0`,
+ }),
+ },
+ {
+ // TODO: don't suggest this for bigint because it can't be NaN
+ messageId: 'conditionFixCompareNaN',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `Number.isNaN(${code})`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `!Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ } else {
+ // if (number)
+ context.report({
+ node,
+ messageId: 'conditionErrorNumber',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareZero',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} !== 0`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `!Number.isNaN(${code})`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ }
}
return;
}
@@ -249,7 +562,73 @@ export default util.createRule({
// nullable number
if (is('nullish', 'number')) {
if (!options.allowNullableNumber) {
- context.report({ node, messageId: 'conditionErrorNullableNumber' });
+ if (isLogicalNegationExpression(node.parent!)) {
+ // if (!nullableNumber)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableNumber',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code} == null`,
+ }),
+ },
+ {
+ messageId: 'conditionFixDefaultZero',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} ?? 0`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `!Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ } else {
+ // if (nullableNumber)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableNumber',
+ suggest: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} != null`,
+ }),
+ },
+ {
+ messageId: 'conditionFixDefaultZero',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} ?? 0`,
+ }),
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `Boolean(${code})`,
+ }),
+ },
+ ],
+ });
+ }
}
return;
}
@@ -264,7 +643,30 @@ export default util.createRule({
// nullable object
if (is('nullish', 'object')) {
if (!options.allowNullableObject) {
- context.report({ node, messageId: 'conditionErrorNullableObject' });
+ if (isLogicalNegationExpression(node.parent!)) {
+ // if (!nullableObject)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableObject',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node: node.parent,
+ innerNode: node,
+ wrap: code => `${code} == null`,
+ }),
+ });
+ } else {
+ // if (nullableObject)
+ context.report({
+ node,
+ messageId: 'conditionErrorNullableObject',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `${code} != null`,
+ }),
+ });
+ }
}
return;
}
@@ -272,7 +674,20 @@ export default util.createRule({
// any
if (is('any')) {
if (!options.allowAny) {
- context.report({ node, messageId: 'conditionErrorAny' });
+ context.report({
+ node,
+ messageId: 'conditionErrorAny',
+ suggest: [
+ {
+ messageId: 'conditionFixCastBoolean',
+ fix: util.getWrappingFixer({
+ sourceCode,
+ node,
+ wrap: code => `Boolean(${code})`,
+ }),
+ },
+ ],
+ });
}
return;
}
@@ -370,3 +785,31 @@ export default util.createRule({
}
},
});
+
+function isLogicalNegationExpression(
+ node: TSESTree.Node,
+): node is TSESTree.UnaryExpression {
+ return node.type === AST_NODE_TYPES.UnaryExpression && node.operator === '!';
+}
+
+function isArrayLengthExpression(
+ node: TSESTree.Node,
+ typeChecker: ts.TypeChecker,
+ parserServices: ParserServices,
+): node is TSESTree.MemberExpressionNonComputedName {
+ if (node.type !== AST_NODE_TYPES.MemberExpression) {
+ return false;
+ }
+ if (node.computed) {
+ return false;
+ }
+ if (node.property.name !== 'length') {
+ return false;
+ }
+ const objectTsNode = parserServices.esTreeNodeToTSNodeMap.get(node.object);
+ const objectType = util.getConstrainedTypeAtLocation(
+ typeChecker,
+ objectTsNode,
+ );
+ return util.isTypeArrayTypeOrUnionOfArrayTypes(objectType, typeChecker);
+}
diff --git a/packages/eslint-plugin/src/util/getWrappingFixer.ts b/packages/eslint-plugin/src/util/getWrappingFixer.ts
new file mode 100644
index 000000000000..4a9edcfcc98b
--- /dev/null
+++ b/packages/eslint-plugin/src/util/getWrappingFixer.ts
@@ -0,0 +1,109 @@
+import {
+ AST_NODE_TYPES,
+ TSESLint,
+ TSESTree,
+} from '@typescript-eslint/experimental-utils';
+import * as util from '../util';
+
+interface WrappingFixerParams {
+ /** Source code. */
+ sourceCode: Readonly;
+ /** The node we want to modify. */
+ node: TSESTree.Node;
+ /**
+ * Descendant of `node` we want to preserve.
+ * Use this to replace some code with another.
+ * By default it's the node we are modifying (so nothing is removed).
+ */
+ innerNode?: TSESTree.Node;
+ /**
+ * The function which gets the code of the `innerNode` and returns some code around it.
+ * E.g. ``code => `${code} != null` ``
+ */
+ wrap: (code: string) => string;
+}
+
+/**
+ * Wraps node with some code. Adds parenthesis as necessary.
+ * @returns Fixer which adds the specified code and parens if necessary.
+ */
+export function getWrappingFixer(
+ params: WrappingFixerParams,
+): TSESLint.ReportFixFunction {
+ const { sourceCode, node, innerNode = node, wrap } = params;
+ return (fixer): TSESLint.RuleFix => {
+ let code = sourceCode.getText(innerNode);
+
+ // check the inner expression's precedence
+ if (
+ innerNode.type !== AST_NODE_TYPES.Literal &&
+ innerNode.type !== AST_NODE_TYPES.Identifier &&
+ innerNode.type !== AST_NODE_TYPES.MemberExpression &&
+ innerNode.type !== AST_NODE_TYPES.CallExpression
+ ) {
+ // we are wrapping something else than a simple variable or function call
+ // the code we are adding might have stronger precedence than our wrapped node
+ // let's wrap our node in parens in case it has a weaker precedence than the code we are wrapping it in
+ code = `(${code})`;
+ }
+
+ // do the wrapping
+ code = wrap(code);
+
+ let parent = util.nullThrows(
+ node.parent,
+ util.NullThrowsReasons.MissingParent,
+ );
+
+ // check the outer expression's precedence
+ if (
+ parent.type !== AST_NODE_TYPES.IfStatement &&
+ parent.type !== AST_NODE_TYPES.ForStatement &&
+ parent.type !== AST_NODE_TYPES.WhileStatement &&
+ parent.type !== AST_NODE_TYPES.DoWhileStatement
+ ) {
+ // the whole expression's parent is something else than condition of if/for/while
+ // we wrapped the node in some expression which very likely has a different precedence than original wrapped node
+ // let's wrap the whole expression in parens just in case
+ if (!util.isParenthesized(node, sourceCode)) {
+ code = `(${code})`;
+ }
+ }
+
+ // check if we need to insert semicolon
+ for (;;) {
+ const prevParent = parent;
+ parent = parent.parent!;
+ if (
+ parent.type === AST_NODE_TYPES.LogicalExpression ||
+ parent.type === AST_NODE_TYPES.BinaryExpression
+ ) {
+ if (parent.left === prevParent) {
+ // the next parent is a binary expression and current node is on the left
+ continue;
+ }
+ }
+ if (parent.type === AST_NODE_TYPES.ExpressionStatement) {
+ const block = parent.parent!;
+ if (
+ block.type === AST_NODE_TYPES.Program ||
+ block.type === AST_NODE_TYPES.BlockStatement
+ ) {
+ // the next parent is an expression in a block
+ const statementIndex = block.body.indexOf(parent);
+ const previousStatement = block.body[statementIndex - 1];
+ if (
+ statementIndex > 0 &&
+ sourceCode.getLastToken(previousStatement)!.value !== ';'
+ ) {
+ // the previous statement in a block doesn't end with a semicolon
+ code = `;${code}`;
+ }
+ }
+ }
+ break;
+ }
+
+ return fixer.replaceText(node, code);
+ };
+}
diff --git a/packages/eslint-plugin/src/util/index.ts b/packages/eslint-plugin/src/util/index.ts
index fc5346f73466..e7bb53547fc8 100644
--- a/packages/eslint-plugin/src/util/index.ts
+++ b/packages/eslint-plugin/src/util/index.ts
@@ -4,6 +4,7 @@ export * from './astUtils';
export * from './collectUnusedVariables';
export * from './createRule';
export * from './getFunctionHeadLoc';
+export * from './getWrappingFixer';
export * from './isTypeReadonly';
export * from './misc';
export * from './nullThrows';
diff --git a/packages/eslint-plugin/src/util/types.ts b/packages/eslint-plugin/src/util/types.ts
index d29349f812fc..920ce66de02f 100644
--- a/packages/eslint-plugin/src/util/types.ts
+++ b/packages/eslint-plugin/src/util/types.ts
@@ -11,6 +11,7 @@ import {
isVariableDeclaration,
unionTypeParts,
isPropertyAssignment,
+ isBinaryExpression,
} from 'tsutils';
import * as ts from 'typescript';
@@ -498,6 +499,13 @@ export function getContextualType(
return checker.getContextualType(parent);
} else if (isPropertyAssignment(parent) && isIdentifier(node)) {
return checker.getContextualType(node);
+ } else if (
+ isBinaryExpression(parent) &&
+ parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
+ parent.right === node
+ ) {
+ // is RHS of assignment
+ return checker.getTypeAtLocation(parent.left);
} else if (
![ts.SyntaxKind.TemplateSpan, ts.SyntaxKind.JsxExpression].includes(
parent.kind,
diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts
index f5671dd5d6b9..65d0874dd3af 100644
--- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts
+++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts
@@ -186,6 +186,22 @@ const c = [...a, ...b];
{
code: "const a = { foo: 'foo' };",
},
+ {
+ code: `
+let a: number | undefined;
+let b: number | undefined;
+let c: number;
+a = b;
+c = b!;
+a! -= 1;
+ `,
+ },
+ {
+ code: `
+let a: { b?: string } | undefined;
+a!.b = '';
+ `,
+ },
],
invalid: [
@@ -451,5 +467,29 @@ function Test(props: { id?: string | number }) {
],
filename: 'react.tsx',
},
+ {
+ code: `
+let x: number | undefined;
+let y: number | undefined;
+y = x!;
+y! = 0;
+ `,
+ output: `
+let x: number | undefined;
+let y: number | undefined;
+y = x;
+y = 0;
+ `,
+ errors: [
+ {
+ messageId: 'contextuallyUnnecessary',
+ line: 4,
+ },
+ {
+ messageId: 'contextuallyUnnecessary',
+ line: 5,
+ },
+ ],
+ },
],
});
diff --git a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts
index 0d697ebb905d..d24de92ac65f 100644
--- a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts
+++ b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts
@@ -1,13 +1,13 @@
import * as path from 'path';
import rule, {
- Options,
MessageId,
+ Options,
} from '../../src/rules/strict-boolean-expressions';
import {
batchedSingleLineTests,
getFixturesRootDir,
- RuleTester,
noFormat,
+ RuleTester,
} from '../RuleTester';
const rootPath = getFixturesRootDir();
@@ -142,13 +142,49 @@ if (x) {
{ allowString: false, allowNumber: false, allowNullableObject: false },
],
code: noFormat`
- if (true && 1) {}
- while (false || "a") {}
+ if (true && (1 + 1)) {}
+ while (false || "a" + "b") {}
(x: object) => true || false || x ? true : false;
`,
errors: [
- { messageId: 'conditionErrorNumber', line: 2, column: 13 },
- { messageId: 'conditionErrorString', line: 3, column: 25 },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 2,
+ column: 14,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: 'if (true && ((1 + 1) !== 0)) {}',
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: 'if (true && (!Number.isNaN((1 + 1)))) {}',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: 'if (true && (Boolean((1 + 1)))) {}',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorString',
+ line: 3,
+ column: 25,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: ' while (false || (("a" + "b").length > 0)) {}',
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: ' while (false || (("a" + "b") !== "")) {}',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ' while (false || (Boolean(("a" + "b")))) {}',
+ },
+ ],
+ },
{ messageId: 'conditionErrorObject', line: 4, column: 41 },
],
}),
@@ -158,15 +194,48 @@ if (x) {
options: [
{ allowString: false, allowNumber: false, allowNullableObject: false },
],
- code: `
- if (('' && {}) || (0 && void 0)) {
- }
- `,
+ code: noFormat`if (('' && {}) || (0 && void 0)) { }`,
errors: [
- { messageId: 'conditionErrorString', line: 2, column: 14 },
- { messageId: 'conditionErrorObject', line: 2, column: 20 },
- { messageId: 'conditionErrorNumber', line: 2, column: 28 },
- { messageId: 'conditionErrorNullish', line: 2, column: 33 },
+ {
+ messageId: 'conditionErrorString',
+ line: 1,
+ column: 6,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: noFormat`if (((''.length > 0) && {}) || (0 && void 0)) { }`,
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: noFormat`if ((('' !== "") && {}) || (0 && void 0)) { }`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: noFormat`if (((Boolean('')) && {}) || (0 && void 0)) { }`,
+ },
+ ],
+ },
+ { messageId: 'conditionErrorObject', line: 1, column: 12 },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 1,
+ column: 20,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: noFormat`if (('' && {}) || ((0 !== 0) && void 0)) { }`,
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: noFormat`if (('' && {}) || ((!Number.isNaN(0)) && void 0)) { }`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: noFormat`if (('' && {}) || ((Boolean(0)) && void 0)) { }`,
+ },
+ ],
+ },
+ { messageId: 'conditionErrorNullish', line: 1, column: 25 },
],
},
@@ -213,15 +282,105 @@ if (x) {
while ("") {}
for (; "foo";) {}
declare const x: string; if (x) {}
- (x: string) => !x;
+ (x: string) => (!x);
(x: T) => x ? 1 : 0;
`,
errors: [
- { messageId: 'conditionErrorString', line: 2, column: 8 },
- { messageId: 'conditionErrorString', line: 3, column: 16 },
- { messageId: 'conditionErrorString', line: 4, column: 38 },
- { messageId: 'conditionErrorString', line: 5, column: 25 },
- { messageId: 'conditionErrorString', line: 6, column: 37 },
+ {
+ messageId: 'conditionErrorString',
+ line: 2,
+ column: 8,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: `while ("".length > 0) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: `while ("" !== "") {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: `while (Boolean("")) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorString',
+ line: 3,
+ column: 16,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: ` for (; "foo".length > 0;) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: ` for (; "foo" !== "";) {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` for (; Boolean("foo");) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorString',
+ line: 4,
+ column: 38,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: ` declare const x: string; if (x.length > 0) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: ` declare const x: string; if (x !== "") {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` declare const x: string; if (Boolean(x)) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorString',
+ line: 5,
+ column: 26,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: ` (x: string) => (x.length === 0);`,
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: ` (x: string) => (x === "");`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` (x: string) => (!Boolean(x));`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorString',
+ line: 6,
+ column: 37,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareStringLength',
+ output: ` (x: T) => (x.length > 0) ? 1 : 0;`,
+ },
+ {
+ messageId: 'conditionFixCompareEmptyString',
+ output: ` (x: T) => (x !== "") ? 1 : 0;`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` (x: T) => (Boolean(x)) ? 1 : 0;`,
+ },
+ ],
+ },
],
}),
@@ -233,15 +392,169 @@ if (x) {
for (; 123;) {}
declare const x: number; if (x) {}
(x: bigint) => !x;
- (x: T) => x ? 1 : 0;
+ (x: T) => (x) ? 1 : 0;
+ ![]["length"]; // doesn't count as array.length when computed
+ declare const a: any[] & { notLength: number }; if (a.notLength) {}
+ `,
+ errors: [
+ {
+ messageId: 'conditionErrorNumber',
+ line: 2,
+ column: 8,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ // TODO: fix compare zero suggestion for bigint
+ output: `while (0n !== 0) {}`,
+ },
+ {
+ // TODO: remove check NaN suggestion for bigint
+ messageId: 'conditionFixCompareNaN',
+ output: `while (!Number.isNaN(0n)) {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: `while (Boolean(0n)) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 3,
+ column: 16,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: ` for (; 123 !== 0;) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: ` for (; !Number.isNaN(123);) {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` for (; Boolean(123);) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 4,
+ column: 38,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: ` declare const x: number; if (x !== 0) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: ` declare const x: number; if (!Number.isNaN(x)) {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` declare const x: number; if (Boolean(x)) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 5,
+ column: 25,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ // TODO: fix compare zero suggestion for bigint
+ output: ` (x: bigint) => (x === 0);`,
+ },
+ {
+ // TODO: remove check NaN suggestion for bigint
+ messageId: 'conditionFixCompareNaN',
+ output: ` (x: bigint) => (Number.isNaN(x));`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` (x: bigint) => (!Boolean(x));`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 6,
+ column: 38,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: ` (x: T) => (x !== 0) ? 1 : 0;`,
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: ` (x: T) => (!Number.isNaN(x)) ? 1 : 0;`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` (x: T) => (Boolean(x)) ? 1 : 0;`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 7,
+ column: 10,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: ` ([]["length"] === 0); // doesn't count as array.length when computed`,
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: ` (Number.isNaN([]["length"])); // doesn't count as array.length when computed`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` (!Boolean([]["length"])); // doesn't count as array.length when computed`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNumber',
+ line: 8,
+ column: 61,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareZero',
+ output: ` declare const a: any[] & { notLength: number }; if (a.notLength !== 0) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareNaN',
+ output: ` declare const a: any[] & { notLength: number }; if (!Number.isNaN(a.notLength)) {}`,
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ` declare const a: any[] & { notLength: number }; if (Boolean(a.notLength)) {}`,
+ },
+ ],
+ },
+ ],
+ }),
+
+ // number (array.length) in boolean context
+ ...batchedSingleLineTests({
+ options: [{ allowNumber: false }],
+ code: noFormat`
+ if (![].length) {}
+ (a: number[]) => a.length && "..."
+ (...a: T) => a.length || "empty";
`,
errors: [
- { messageId: 'conditionErrorNumber', line: 2, column: 8 },
- { messageId: 'conditionErrorNumber', line: 3, column: 16 },
- { messageId: 'conditionErrorNumber', line: 4, column: 38 },
- { messageId: 'conditionErrorNumber', line: 5, column: 25 },
- { messageId: 'conditionErrorNumber', line: 6, column: 37 },
+ { messageId: 'conditionErrorNumber', line: 2, column: 6 },
+ { messageId: 'conditionErrorNumber', line: 3, column: 26 },
+ { messageId: 'conditionErrorNumber', line: 4, column: 43 },
],
+ output: noFormat`
+ if ([].length === 0) {}
+ (a: number[]) => (a.length > 0) && "..."
+ (...a: T) => (a.length > 0) || "empty";
+ `,
}),
// mixed `string | number` value in boolean context
@@ -268,9 +581,51 @@ if (x) {
(x: T) => x ? 1 : 0;
`,
errors: [
- { messageId: 'conditionErrorNullableBoolean', line: 2, column: 38 },
- { messageId: 'conditionErrorNullableBoolean', line: 3, column: 27 },
- { messageId: 'conditionErrorNullableBoolean', line: 4, column: 57 },
+ {
+ messageId: 'conditionErrorNullableBoolean',
+ line: 2,
+ column: 38,
+ suggestions: [
+ {
+ messageId: 'conditionFixDefaultFalse',
+ output: `declare const x: boolean | null; if (x ?? false) {}`,
+ },
+ {
+ messageId: 'conditionFixCompareTrue',
+ output: `declare const x: boolean | null; if (x === true) {}`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNullableBoolean',
+ line: 3,
+ column: 27,
+ suggestions: [
+ {
+ messageId: 'conditionFixDefaultFalse',
+ output: ` (x?: boolean) => !(x ?? false);`,
+ },
+ {
+ messageId: 'conditionFixCompareFalse',
+ output: ` (x?: boolean) => (x === false);`,
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNullableBoolean',
+ line: 4,
+ column: 57,
+ suggestions: [
+ {
+ messageId: 'conditionFixDefaultFalse',
+ output: ` (x: T) => (x ?? false) ? 1 : 0;`,
+ },
+ {
+ messageId: 'conditionFixCompareTrue',
+ output: ` (x: T) => (x === true) ? 1 : 0;`,
+ },
+ ],
+ },
],
}),
@@ -287,6 +642,11 @@ if (x) {
{ messageId: 'conditionErrorNullableObject', line: 3, column: 33 },
{ messageId: 'conditionErrorNullableObject', line: 4, column: 52 },
],
+ output: noFormat`
+ declare const x: object | null; if (x != null) {}
+ (x?: { a: number }) => (x == null);
+ (x: T) => (x != null) ? 1 : 0;
+ `,
}),
// nullable string in boolean context
@@ -297,9 +657,66 @@ if (x) {
(x: T) => x ? 1 : 0;
`,
errors: [
- { messageId: 'conditionErrorNullableString', line: 2, column: 37 },
- { messageId: 'conditionErrorNullableString', line: 3, column: 26 },
- { messageId: 'conditionErrorNullableString', line: 4, column: 56 },
+ {
+ messageId: 'conditionErrorNullableString',
+ line: 2,
+ column: 37,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ output: 'declare const x: string | null; if (x != null) {}',
+ },
+ {
+ messageId: 'conditionFixDefaultEmptyString',
+ output: 'declare const x: string | null; if (x ?? "") {}',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: 'declare const x: string | null; if (Boolean(x)) {}',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNullableString',
+ line: 3,
+ column: 26,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ output: ' (x?: string) => (x == null);',
+ },
+ {
+ messageId: 'conditionFixDefaultEmptyString',
+ output: ' (x?: string) => !(x ?? "");',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ' (x?: string) => (!Boolean(x));',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNullableString',
+ line: 4,
+ column: 56,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ output:
+ ' (x: T) => (x != null) ? 1 : 0;',
+ },
+ {
+ messageId: 'conditionFixDefaultEmptyString',
+ output:
+ ' (x: T) => (x ?? "") ? 1 : 0;',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output:
+ ' (x: T) => (Boolean(x)) ? 1 : 0;',
+ },
+ ],
+ },
],
}),
@@ -311,9 +728,66 @@ if (x) {
(x: T) => x ? 1 : 0;
`,
errors: [
- { messageId: 'conditionErrorNullableNumber', line: 2, column: 37 },
- { messageId: 'conditionErrorNullableNumber', line: 3, column: 26 },
- { messageId: 'conditionErrorNullableNumber', line: 4, column: 56 },
+ {
+ messageId: 'conditionErrorNullableNumber',
+ line: 2,
+ column: 37,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ output: 'declare const x: number | null; if (x != null) {}',
+ },
+ {
+ messageId: 'conditionFixDefaultZero',
+ output: 'declare const x: number | null; if (x ?? 0) {}',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: 'declare const x: number | null; if (Boolean(x)) {}',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNullableNumber',
+ line: 3,
+ column: 26,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ output: ' (x?: number) => (x == null);',
+ },
+ {
+ messageId: 'conditionFixDefaultZero',
+ output: ' (x?: number) => !(x ?? 0);',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ' (x?: number) => (!Boolean(x));',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorNullableNumber',
+ line: 4,
+ column: 56,
+ suggestions: [
+ {
+ messageId: 'conditionFixCompareNullish',
+ output:
+ ' (x: T) => (x != null) ? 1 : 0;',
+ },
+ {
+ messageId: 'conditionFixDefaultZero',
+ output:
+ ' (x: T) => (x ?? 0) ? 1 : 0;',
+ },
+ {
+ messageId: 'conditionFixCastBoolean',
+ output:
+ ' (x: T) => (Boolean(x)) ? 1 : 0;',
+ },
+ ],
+ },
],
}),
@@ -326,11 +800,43 @@ if (x) {
(x: T) => x ? 1 : 0;
`,
errors: [
- { messageId: 'conditionErrorAny', line: 2, column: 5 },
- { messageId: 'conditionErrorAny', line: 3, column: 15 },
- { messageId: 'conditionErrorAny', line: 4, column: 34 },
+ {
+ messageId: 'conditionErrorAny',
+ line: 2,
+ column: 5,
+ suggestions: [
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: 'if (Boolean(x)) {}',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorAny',
+ line: 3,
+ column: 15,
+ suggestions: [
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ' x => !(Boolean(x));',
+ },
+ ],
+ },
+ {
+ messageId: 'conditionErrorAny',
+ line: 4,
+ column: 34,
+ suggestions: [
+ {
+ messageId: 'conditionFixCastBoolean',
+ output: ' (x: T) => (Boolean(x)) ? 1 : 0;',
+ },
+ ],
+ },
],
}),
+
+ // noStrictNullCheck
{
code: `
declare const x: string[] | null;
@@ -353,5 +859,27 @@ if (x) {
tsconfigRootDir: path.join(rootPath, 'unstrict'),
},
},
+
+ // automatic semicolon insertion test
+ {
+ options: [{ allowNullableObject: false }],
+ code: noFormat`
+ declare const obj: { x: number } | null;
+ !obj
+ obj || 0
+ obj && 1 || 0
+ `,
+ errors: [
+ { messageId: 'conditionErrorNullableObject', line: 3, column: 10 },
+ { messageId: 'conditionErrorNullableObject', line: 4, column: 9 },
+ { messageId: 'conditionErrorNullableObject', line: 5, column: 9 },
+ ],
+ output: noFormat`
+ declare const obj: { x: number } | null;
+ (obj == null)
+ ;(obj != null) || 0
+ ;(obj != null) && 1 || 0
+ `,
+ },
],
});
diff --git a/packages/experimental-utils/CHANGELOG.md b/packages/experimental-utils/CHANGELOG.md
index 2776535130f6..cee45cb853b2 100644
--- a/packages/experimental-utils/CHANGELOG.md
+++ b/packages/experimental-utils/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/experimental-utils
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/experimental-utils
diff --git a/packages/experimental-utils/package.json b/packages/experimental-utils/package.json
index cb9baec6ed67..214b518e8eb6 100644
--- a/packages/experimental-utils/package.json
+++ b/packages/experimental-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/experimental-utils",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "(Experimental) Utilities for working with TypeScript + ESLint together",
"keywords": [
"eslint",
@@ -40,9 +40,9 @@
},
"dependencies": {
"@types/json-schema": "^7.0.3",
- "@typescript-eslint/scope-manager": "4.16.1",
- "@typescript-eslint/types": "4.16.1",
- "@typescript-eslint/typescript-estree": "4.16.1",
+ "@typescript-eslint/scope-manager": "4.17.0",
+ "@typescript-eslint/types": "4.17.0",
+ "@typescript-eslint/typescript-estree": "4.17.0",
"eslint-scope": "^5.0.0",
"eslint-utils": "^2.0.0"
},
diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md
index fc98f1371930..c28cec93ad18 100644
--- a/packages/parser/CHANGELOG.md
+++ b/packages/parser/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/parser
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/parser
diff --git a/packages/parser/package.json b/packages/parser/package.json
index 4f306dd88b10..c1d8e83cae9c 100644
--- a/packages/parser/package.json
+++ b/packages/parser/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/parser",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "An ESLint custom parser which leverages TypeScript ESTree",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -44,14 +44,14 @@
"eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
},
"dependencies": {
- "@typescript-eslint/scope-manager": "4.16.1",
- "@typescript-eslint/types": "4.16.1",
- "@typescript-eslint/typescript-estree": "4.16.1",
+ "@typescript-eslint/scope-manager": "4.17.0",
+ "@typescript-eslint/types": "4.17.0",
+ "@typescript-eslint/typescript-estree": "4.17.0",
"debug": "^4.1.1"
},
"devDependencies": {
"@types/glob": "*",
- "@typescript-eslint/experimental-utils": "4.16.1",
+ "@typescript-eslint/experimental-utils": "4.17.0",
"glob": "*",
"typescript": "*"
},
diff --git a/packages/scope-manager/CHANGELOG.md b/packages/scope-manager/CHANGELOG.md
index f3cfeed1d185..dceda0dbd9de 100644
--- a/packages/scope-manager/CHANGELOG.md
+++ b/packages/scope-manager/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/scope-manager
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/scope-manager
diff --git a/packages/scope-manager/package.json b/packages/scope-manager/package.json
index c38f88ed26cb..f3347a3f541b 100644
--- a/packages/scope-manager/package.json
+++ b/packages/scope-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/scope-manager",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "TypeScript scope analyser for ESLint",
"keywords": [
"eslint",
@@ -39,12 +39,12 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "4.16.1",
- "@typescript-eslint/visitor-keys": "4.16.1"
+ "@typescript-eslint/types": "4.17.0",
+ "@typescript-eslint/visitor-keys": "4.17.0"
},
"devDependencies": {
"@types/glob": "*",
- "@typescript-eslint/typescript-estree": "4.16.1",
+ "@typescript-eslint/typescript-estree": "4.17.0",
"glob": "*",
"jest-specific-snapshot": "*",
"make-dir": "*",
diff --git a/packages/shared-fixtures/CHANGELOG.md b/packages/shared-fixtures/CHANGELOG.md
index 04637206ddeb..499029da5326 100644
--- a/packages/shared-fixtures/CHANGELOG.md
+++ b/packages/shared-fixtures/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/shared-fixtures
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/shared-fixtures
diff --git a/packages/shared-fixtures/package.json b/packages/shared-fixtures/package.json
index f5558a30eb3f..3a4897315d2d 100644
--- a/packages/shared-fixtures/package.json
+++ b/packages/shared-fixtures/package.json
@@ -1,5 +1,5 @@
{
"name": "@typescript-eslint/shared-fixtures",
- "version": "4.16.1",
+ "version": "4.17.0",
"private": true
}
diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md
index 627e088a3f67..2206d4d67a50 100644
--- a/packages/types/CHANGELOG.md
+++ b/packages/types/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/types
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/types
diff --git a/packages/types/package.json b/packages/types/package.json
index 0d04bd8296f9..c6fcd11037e9 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/types",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "Types for the TypeScript-ESTree AST spec",
"keywords": [
"eslint",
diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md
index 5cee167088c2..3df66ed1e9ba 100644
--- a/packages/typescript-estree/CHANGELOG.md
+++ b/packages/typescript-estree/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/typescript-estree
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json
index 784d2b788a9a..fa0db38da5d3 100644
--- a/packages/typescript-estree/package.json
+++ b/packages/typescript-estree/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/typescript-estree",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "A parser that converts TypeScript source code into an ESTree compatible form",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -41,8 +41,8 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "4.16.1",
- "@typescript-eslint/visitor-keys": "4.16.1",
+ "@typescript-eslint/types": "4.17.0",
+ "@typescript-eslint/visitor-keys": "4.17.0",
"debug": "^4.1.1",
"globby": "^11.0.1",
"is-glob": "^4.0.1",
@@ -59,7 +59,7 @@
"@types/is-glob": "*",
"@types/semver": "*",
"@types/tmp": "*",
- "@typescript-eslint/shared-fixtures": "4.16.1",
+ "@typescript-eslint/shared-fixtures": "4.17.0",
"glob": "*",
"jest-specific-snapshot": "*",
"make-dir": "*",
diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md
index e0ecce16f417..c3f97732be62 100644
--- a/packages/visitor-keys/CHANGELOG.md
+++ b/packages/visitor-keys/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [4.17.0](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0) (2021-03-08)
+
+**Note:** Version bump only for package @typescript-eslint/visitor-keys
+
+
+
+
+
## [4.16.1](https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1) (2021-03-01)
**Note:** Version bump only for package @typescript-eslint/visitor-keys
diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json
index 4287d36b0c8f..78f382dcbd72 100644
--- a/packages/visitor-keys/package.json
+++ b/packages/visitor-keys/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/visitor-keys",
- "version": "4.16.1",
+ "version": "4.17.0",
"description": "Visitor keys used to help traverse the TypeScript-ESTree AST",
"keywords": [
"eslint",
@@ -38,7 +38,7 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "4.16.1",
+ "@typescript-eslint/types": "4.17.0",
"eslint-visitor-keys": "^2.0.0"
},
"devDependencies": {
diff --git a/yarn.lock b/yarn.lock
index 7391d1c4c005..815a73208c88 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -260,7 +260,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.12.13"
-"@babel/runtime@^7.11.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.7.6":
+"@babel/runtime@^7.11.0", "@babel/runtime@^7.7.6":
version "7.13.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.6.tgz#86e0fad6cbb46a680e21c1aa4748717a058d345a"
integrity sha512-Y/DEVhSQ91u27rxq7D0EH/sewS6+x06p/MgO1VppbDHMzYXLZrAR5cFjCom78e9RUw1BQAq6qJg6fXc/ep7glA==
@@ -313,159 +313,163 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
-"@commitlint/cli@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-11.0.0.tgz#698199bc52afed50aa28169237758fa14a67b5d3"
- integrity sha512-YWZWg1DuqqO5Zjh7vUOeSX76vm0FFyz4y0cpGMFhrhvUi5unc4IVfCXZ6337R9zxuBtmveiRuuhQqnRRer+13g==
- dependencies:
- "@babel/runtime" "^7.11.2"
- "@commitlint/format" "^11.0.0"
- "@commitlint/lint" "^11.0.0"
- "@commitlint/load" "^11.0.0"
- "@commitlint/read" "^11.0.0"
- chalk "4.1.0"
- core-js "^3.6.1"
+"@commitlint/cli@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.0.1.tgz#8960e34e8f1aed8b2ea50f223ee817fdf2264ffb"
+ integrity sha512-V+cMYNHJOr40XT9Kvz3Vrz1Eh7QE1rjQrUbifawDAqcOrBJFuoXwU2SAcRtYFCSqFy9EhbreQGhZFs8dYb90KA==
+ dependencies:
+ "@commitlint/format" "^12.0.1"
+ "@commitlint/lint" "^12.0.1"
+ "@commitlint/load" "^12.0.1"
+ "@commitlint/read" "^12.0.1"
+ "@commitlint/types" "^12.0.1"
get-stdin "8.0.0"
lodash "^4.17.19"
resolve-from "5.0.0"
resolve-global "1.0.0"
- yargs "^15.1.0"
+ yargs "^16.2.0"
-"@commitlint/config-conventional@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-11.0.0.tgz#3fa300a1b639273946de3c3f15e1cda518333422"
- integrity sha512-SNDRsb5gLuDd2PL83yCOQX6pE7gevC79UPFx+GLbLfw6jGnnbO9/tlL76MLD8MOViqGbo7ZicjChO9Gn+7tHhA==
+"@commitlint/config-conventional@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-12.0.1.tgz#7bf3bbf68bda967c5165135ebe8f2055decf1a83"
+ integrity sha512-1ZhB135lh47zVmf1orwcjxuKuam11fJIH/bdVxW9XiQv8XPwC6iIp19knfl8FcOT78AVBnes1z6EVxgUeP2/4Q==
dependencies:
conventional-changelog-conventionalcommits "^4.3.1"
-"@commitlint/config-lerna-scopes@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/config-lerna-scopes/-/config-lerna-scopes-11.0.0.tgz#4152287c5d13ea844160507523b2f98b015adf4a"
- integrity sha512-/PjLKefMlnG+Sk27MY3MZo+T/9/PrgDcLk1YCSPVHNkXibXiS2Hb5NEMuNHzPxwts4IvJo0WIOb0YOBx5GBsdA==
+"@commitlint/config-lerna-scopes@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-lerna-scopes/-/config-lerna-scopes-12.0.1.tgz#3ae4fe71efbecc49dc92a4c801ea66c00f397f1d"
+ integrity sha512-k3xT6ey3nyGYFl3xGlzivmuE+/rLJEBWg7wn+3XPRVLdovwxgA3fCqSrK17mJRCKcjcJbto70Uwmj27VDG0Kng==
dependencies:
+ globby "^11.0.1"
import-from "3.0.0"
resolve-pkg "2.0.0"
- semver "7.3.2"
+ semver "7.3.4"
-"@commitlint/ensure@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-11.0.0.tgz#3e796b968ab5b72bc6f8a6040076406306c987fb"
- integrity sha512-/T4tjseSwlirKZdnx4AuICMNNlFvRyPQimbZIOYujp9DSO6XRtOy9NrmvWujwHsq9F5Wb80QWi4WMW6HMaENug==
+"@commitlint/ensure@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-12.0.1.tgz#0ed5e997026db25eb080559b6e67f55a21eea080"
+ integrity sha512-XdBq+q1YBBDxWIAEjE3Y1YMbzhUnUuSLAEWD8SU1xsvEpQXWRYwDlMBRkjO7funNWTdL0ZQSkZDzme70imYjbw==
dependencies:
- "@commitlint/types" "^11.0.0"
+ "@commitlint/types" "^12.0.1"
lodash "^4.17.19"
-"@commitlint/execute-rule@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz#3ed60ab7a33019e58d90e2d891b75d7df77b4b4d"
- integrity sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==
+"@commitlint/execute-rule@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.0.1.tgz#5bb2eba929270cafb2bd8191799d8b451de7fb7e"
+ integrity sha512-JzyweYfZlFLtXpgP+btzSY3YAkGPg61TqUSYQqBr4+5IaVf1FruMm5v4D5eLu9dAJuNKUfHbM3AEfuEPiZ79pg==
-"@commitlint/format@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-11.0.0.tgz#ac47b0b9ca46540c0082c721b290794e67bdc51b"
- integrity sha512-bpBLWmG0wfZH/svzqD1hsGTpm79TKJWcf6EXZllh2J/LSSYKxGlv967lpw0hNojme0sZd4a/97R3qA2QHWWSLg==
+"@commitlint/format@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-12.0.1.tgz#5164e5a9e8592c1983482cbd71e7ea86a645ff1b"
+ integrity sha512-rF79ipAxR8yFzPzG5tRoEZ//MRkyxCXj4JhpEjtdaCMBAXMssI8uazn3e5D8z4UFgSDe9qOnL0OmQvql7HTMoA==
dependencies:
- "@commitlint/types" "^11.0.0"
+ "@commitlint/types" "^12.0.1"
chalk "^4.0.0"
-"@commitlint/is-ignored@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-11.0.0.tgz#7b803eda56276dbe7fec51eb1510676198468f39"
- integrity sha512-VLHOUBN+sOlkYC4tGuzE41yNPO2w09sQnOpfS+pSPnBFkNUUHawEuA44PLHtDvQgVuYrMAmSWFQpWabMoP5/Xg==
- dependencies:
- "@commitlint/types" "^11.0.0"
- semver "7.3.2"
-
-"@commitlint/lint@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-11.0.0.tgz#01e062cd1b0e7c3d756aa2c246462e0b6a3348a4"
- integrity sha512-Q8IIqGIHfwKr8ecVZyYh6NtXFmKw4YSEWEr2GJTB/fTZXgaOGtGFZDWOesCZllQ63f1s/oWJYtVv5RAEuwN8BQ==
- dependencies:
- "@commitlint/is-ignored" "^11.0.0"
- "@commitlint/parse" "^11.0.0"
- "@commitlint/rules" "^11.0.0"
- "@commitlint/types" "^11.0.0"
-
-"@commitlint/load@>6.1.1", "@commitlint/load@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-11.0.0.tgz#f736562f0ffa7e773f8808fea93319042ee18211"
- integrity sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==
- dependencies:
- "@commitlint/execute-rule" "^11.0.0"
- "@commitlint/resolve-extends" "^11.0.0"
- "@commitlint/types" "^11.0.0"
- chalk "4.1.0"
+"@commitlint/is-ignored@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.0.1.tgz#0e59b0524e16300b1d9d62f8c138f083f22ebf9a"
+ integrity sha512-AplfLn5mX/kWTIiSolcOhTYcgphuGLX8FUr+HmyHBEqUkO36jt0z9caysH47fqU71ePtH63v1DWm+RYQ5RPDjg==
+ dependencies:
+ "@commitlint/types" "^12.0.1"
+ semver "7.3.4"
+
+"@commitlint/lint@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.0.1.tgz#a88b01c81cb6ca1867bd3d8fd288ba30017c2b7d"
+ integrity sha512-1lKyRCq4ahJrY+Xxo8LsqCbALeJkodtEfpmYHeA5HpPMnK7lRSplLqOLcTCjoPfd4vO+gl6aDEZN+ow3YGQBOg==
+ dependencies:
+ "@commitlint/is-ignored" "^12.0.1"
+ "@commitlint/parse" "^12.0.1"
+ "@commitlint/rules" "^12.0.1"
+ "@commitlint/types" "^12.0.1"
+
+"@commitlint/load@>6.1.1", "@commitlint/load@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.0.1.tgz#4d180fc88e5b4cfcb476a245d899f85154137502"
+ integrity sha512-dX8KdCWn7w0bTkkk3zKQpe9X8vsTRa5EM+1ffF313wCX9b6tGa9vujhEHCkSzKAbbE2tFV64CHZygE7rtlHdIA==
+ dependencies:
+ "@commitlint/execute-rule" "^12.0.1"
+ "@commitlint/resolve-extends" "^12.0.1"
+ "@commitlint/types" "^12.0.1"
+ chalk "^4.0.0"
cosmiconfig "^7.0.0"
lodash "^4.17.19"
resolve-from "^5.0.0"
-"@commitlint/message@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-11.0.0.tgz#83554c3cbbc884fd07b473593bc3e94bcaa3ee05"
- integrity sha512-01ObK/18JL7PEIE3dBRtoMmU6S3ecPYDTQWWhcO+ErA3Ai0KDYqV5VWWEijdcVafNpdeUNrEMigRkxXHQLbyJA==
+"@commitlint/message@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.0.1.tgz#caff6743db78c30a063809501cf4b835c3ce7fa6"
+ integrity sha512-fXuoxRC+NT1wEQi6p8oHfT7wvWIRgTk+udlRJnWTjmMpiYzVnMmmZfasdShirWr4TtxQtMyL+5DVgh7Y98kURw==
-"@commitlint/parse@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-11.0.0.tgz#d18b08cf67c35d02115207d7009306a2e8e7c901"
- integrity sha512-DekKQAIYWAXIcyAZ6/PDBJylWJ1BROTfDIzr9PMVxZRxBPc1gW2TG8fLgjZfBP5mc0cuthPkVi91KQQKGri/7A==
+"@commitlint/parse@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.0.1.tgz#ba8641f53e15b523808ba2eaa48c1bf0129c91c4"
+ integrity sha512-7oEGASmzBnHir5jSIR7KephXrKh7rIi9a6RpH1tOT+CIENYvhe8EDtIy29qMt+RLa2LlaPF7YrAgaJRfzG0YDQ==
dependencies:
- conventional-changelog-angular "^5.0.0"
+ "@commitlint/types" "^12.0.1"
+ conventional-changelog-angular "^5.0.11"
conventional-commits-parser "^3.0.0"
-"@commitlint/read@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-11.0.0.tgz#f24240548c63587bba139fa5a364cab926077016"
- integrity sha512-37V0V91GSv0aDzMzJioKpCoZw6l0shk7+tRG8RkW1GfZzUIytdg3XqJmM+IaIYpaop0m6BbZtfq+idzUwJnw7g==
+"@commitlint/read@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.0.1.tgz#41f3295ed9f451d4c65223cd37ddd59ef714bddb"
+ integrity sha512-baa0YeD4QOctEuthLpExQSi9xPiw0kDPfUVHqp8I88iuIXJECeS8S1+1GBiz89e8dLN9zmEE+sN9vtJHdAp9YA==
dependencies:
- "@commitlint/top-level" "^11.0.0"
+ "@commitlint/top-level" "^12.0.1"
+ "@commitlint/types" "^12.0.1"
fs-extra "^9.0.0"
git-raw-commits "^2.0.0"
-"@commitlint/resolve-extends@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz#158ecbe27d4a2a51d426111a01478e216fbb1036"
- integrity sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==
+"@commitlint/resolve-extends@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.0.1.tgz#77509f386e08bd30262ec9a75c783d8f4f028fd2"
+ integrity sha512-Mvg0GDi/68Cqw893ha8uhxE8myHfPmiSSSi7d1x4VJNR4hoS37lBdX89kyx4i9NPmLfviY2cUJKTyK8ZrFznZw==
dependencies:
import-fresh "^3.0.0"
lodash "^4.17.19"
resolve-from "^5.0.0"
resolve-global "^1.0.0"
-"@commitlint/rules@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-11.0.0.tgz#bdb310cc6fc55c9f8d7d917a22b69055c535c375"
- integrity sha512-2hD9y9Ep5ZfoNxDDPkQadd2jJeocrwC4vJ98I0g8pNYn/W8hS9+/FuNpolREHN8PhmexXbkjrwyQrWbuC0DVaA==
+"@commitlint/rules@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.0.1.tgz#1c81345f468597656141338a493d5e426e44dab9"
+ integrity sha512-A5O0ubNGugZR9WWxk5IVOLo07lpdUwhG5WkAW2lYpgZ7Z/2U4PLob9b4Ih1eHbQu+gnVeFr91k7F0DrpM7B8EQ==
dependencies:
- "@commitlint/ensure" "^11.0.0"
- "@commitlint/message" "^11.0.0"
- "@commitlint/to-lines" "^11.0.0"
- "@commitlint/types" "^11.0.0"
+ "@commitlint/ensure" "^12.0.1"
+ "@commitlint/message" "^12.0.1"
+ "@commitlint/to-lines" "^12.0.1"
+ "@commitlint/types" "^12.0.1"
-"@commitlint/to-lines@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-11.0.0.tgz#86dea151c10eea41e39ea96fa4de07839258a7fe"
- integrity sha512-TIDTB0Y23jlCNubDROUVokbJk6860idYB5cZkLWcRS9tlb6YSoeLn1NLafPlrhhkkkZzTYnlKYzCVrBNVes1iw==
+"@commitlint/to-lines@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-12.0.1.tgz#586d89b9f9ff99ef93b3c8aa3d77faffbe3ffedc"
+ integrity sha512-XwcJ1jY7x2fhudzbGMpNQkTSMVrxWrI8bRMbVe3Abuu7RfYpFf7VXAlhtnLfxBoagaK7RxjC2+eRidp/3txQBg==
-"@commitlint/top-level@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-11.0.0.tgz#bb2d1b6e5ed3be56874633b59e1f7de118c32783"
- integrity sha512-O0nFU8o+Ws+py5pfMQIuyxOtfR/kwtr5ybqTvR+C2lUPer2x6lnQU+OnfD7hPM+A+COIUZWx10mYQvkR3MmtAA==
+"@commitlint/top-level@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-12.0.1.tgz#9c7efd319a4f8d29001f011ba8b0e21fad6044f6"
+ integrity sha512-rHdgt7U24GEau2/9i2vEAbksxkBRiVjHj5ECFL5dd0AJOIvaK++vMg4EF/ME0X/1yd9qVTHTNOl2Q4tTFK7VBQ==
dependencies:
find-up "^5.0.0"
-"@commitlint/types@^11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe"
- integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==
+"@commitlint/types@^12.0.1":
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.0.1.tgz#04a0cbb8aa56b7c004f8939c2d1ef8892ec68327"
+ integrity sha512-FsNDMV0W7D19/ZbR412klpqAilXASx75Neqh7jPtK278IEwdukOg3vth1r5kTm+BjDScM7wMUEOwIW3NNfAtwg==
+ dependencies:
+ chalk "^4.0.0"
-"@cspell/cspell-bundled-dicts@^5.2.4":
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.2.4.tgz#dd0e161bb2203f19a2dd9358c3eb9daaffb7a336"
- integrity sha512-IVoTVdFIWnWmJYBwjbsYtFyH6fD8bClDZrFpUa/a84vXVopcH1ZjpwotDsHO+P3O1GCFTacT1Z2Lyh56xowmxw==
+"@cspell/cspell-bundled-dicts@^5.3.4":
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.3.4.tgz#8fa6c783788fec59c042290b5fedce64cbca6d55"
+ integrity sha512-Gx3ceqTxocxhSF/jgb6GkAQMHiycO7+R9c9KXwgk+HYG7Qs6NWYc4bcChn07d19x8wuM4a++gA65FxUh7lC+Yg==
dependencies:
+ "@cspell/dict-ada" "^1.1.1"
"@cspell/dict-aws" "^1.0.13"
"@cspell/dict-bash" "^1.0.11"
- "@cspell/dict-companies" "^1.0.35"
+ "@cspell/dict-companies" "^1.0.36"
"@cspell/dict-cpp" "^1.1.37"
"@cspell/dict-cryptocurrencies" "^1.0.10"
"@cspell/dict-csharp" "^1.0.10"
@@ -479,8 +483,8 @@
"@cspell/dict-fonts" "^1.0.14"
"@cspell/dict-fullstack" "^1.0.36"
"@cspell/dict-golang" "^1.1.24"
- "@cspell/dict-haskell" "^1.0.12"
- "@cspell/dict-html" "^1.1.5"
+ "@cspell/dict-haskell" "^1.0.13"
+ "@cspell/dict-html" "^1.1.6"
"@cspell/dict-html-symbol-entities" "^1.0.23"
"@cspell/dict-java" "^1.0.22"
"@cspell/dict-latex" "^1.0.23"
@@ -491,16 +495,21 @@
"@cspell/dict-php" "^1.0.23"
"@cspell/dict-powershell" "^1.0.14"
"@cspell/dict-python" "^1.0.33"
- "@cspell/dict-ruby" "^1.0.12"
+ "@cspell/dict-ruby" "^1.0.13"
"@cspell/dict-rust" "^1.0.22"
"@cspell/dict-scala" "^1.0.21"
- "@cspell/dict-software-terms" "^1.0.25"
+ "@cspell/dict-software-terms" "^1.0.26"
"@cspell/dict-typescript" "^1.0.16"
-"@cspell/cspell-types@^5.2.4":
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-5.2.4.tgz#361fdc6c008b82a5c0dfd6c1fd2bee2cb7255b4b"
- integrity sha512-luv2hzoKdDrNs2LPDHuS+r9hOniZlYiJJU8og8ftGyuwjytnSaTUvtY8SzFqquKQJ4+rty6AF2RS/foQ69s/2Q==
+"@cspell/cspell-types@^5.3.4":
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-5.3.4.tgz#20aafa6debdd58fa825ebf4159016f3f57106be2"
+ integrity sha512-dM5sblEPqgrCUc53FSzJxrObEqYzVg70iqGMcGrawXy3wk5BiiO7caXWaRuhe0Wy5ooytI5nJK3oRELS8A501g==
+
+"@cspell/dict-ada@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-1.1.1.tgz#52b636f1728100a493dcc83e82035c371898f39c"
+ integrity sha512-/tpeKe182ymfKutyVcF3YHVNYnoZPdri3vsUU1v7iyA0WzTu9djb6B78r3QTQVCeizAruBsbSogxMPHBquF/zA==
"@cspell/dict-aws@^1.0.13":
version "1.0.13"
@@ -512,10 +521,10 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-1.0.11.tgz#5ba56250e467d2c2ed3f2795081f4934af0c9afc"
integrity sha512-DTOugbPacEFIav5s+VniByouu4apD1SKS5inwiBndw0TH3Pkm4MFTPUwfT1y7Ki4HEIyfRI2ughig2045SBqRw==
-"@cspell/dict-companies@^1.0.35":
- version "1.0.35"
- resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-1.0.35.tgz#3f244e005afa533cdec8896ceaf866c82d77251a"
- integrity sha512-lFoXFqXgAUjj14t7VJm+D/j9jU9kn4Eud+Q2gVQTKs6+oMivJ0hROpqZv/CEYHlm/4MpP5Livp0z0E6ARCE0kQ==
+"@cspell/dict-companies@^1.0.36":
+ version "1.0.36"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-1.0.36.tgz#c85bcc1f23ac991c56dd25eea5623078aaa513c2"
+ integrity sha512-Bk9mMJs9spzrtLxZsxBZIK6ukD9REfQYpuTBNJk/IiTViHVQ6ertHAgw1vRVtJAMxViv8dMLNtDyTpEXeaYm7w==
"@cspell/dict-cpp@^1.1.37":
version "1.1.37"
@@ -582,20 +591,20 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-1.1.24.tgz#3830812aec816eca46a6d793fcc7710c09d4f5b9"
integrity sha512-qq3Cjnx2U1jpeWAGJL1GL0ylEhUMqyaR36Xij6Y6Aq4bViCRp+HRRqk0x5/IHHbOrti45h3yy7ii1itRFo+Xkg==
-"@cspell/dict-haskell@^1.0.12":
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-1.0.12.tgz#cc6ec4d0466b029683e9f861dea3d0e95c514606"
- integrity sha512-JrSSuV2oY8Z1/qYi8j1w5M3eokiFkcpRtCrxpKlHYFXFEvmqTH9D8qvzVbAkrQpefMppy8uIUzknSzhwAc/MQA==
+"@cspell/dict-haskell@^1.0.13":
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-1.0.13.tgz#bd159ef474ef427757dd4bc6a66cda977946c927"
+ integrity sha512-kvl8T84cnYRPpND/P3D86P6WRSqebsbk0FnMfy27zo15L5MLAb3d3MOiT1kW3vEWfQgzUD7uddX/vUiuroQ8TA==
"@cspell/dict-html-symbol-entities@^1.0.23":
version "1.0.23"
resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-1.0.23.tgz#0efbdbc7712c9fbe545e14acac637226ac948f2d"
integrity sha512-PV0UBgcBFbBLf/m1wfkVMM8w96kvfHoiCGLWO6BR3Q9v70IXoE4ae0+T+f0CkxcEkacMqEQk/I7vuE9MzrjaNw==
-"@cspell/dict-html@^1.1.5":
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-1.1.5.tgz#45e7a3e23c27f248b4fab962ce71efdc23a0d9fd"
- integrity sha512-ecwFDcponQgLpC9VJK7SRAbLu3CAlw6KUSlLtVOiN3zxlh27MDCCMp9jCD4UImZGACe0YQ1Zj0DW7PjXkHuKHg==
+"@cspell/dict-html@^1.1.6":
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-1.1.6.tgz#29c40c0ebc51de4cfe2d6041206ba39d74b28b67"
+ integrity sha512-RsZXIrmsnLcUpXfyZdNg7OtO2+e4p7m/qILg03kM6vhSUMY6ryCQNPWKrHqsl8+LBKd54EgFM+O5zcgq6IIsCw==
"@cspell/dict-java@^1.0.22":
version "1.0.22"
@@ -642,10 +651,10 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-1.0.33.tgz#39ddf401f63ee9b0f95e606d70693e61976a073b"
integrity sha512-tRmE4TzHDFPs7sJ1a3XbfyFrvRHwefVz+z1wkm6tkXK9TPrCbIS+rV/T8xhj205q4lpZQ/TkNB3lT40eLB9O8A==
-"@cspell/dict-ruby@^1.0.12":
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-1.0.12.tgz#85af4c0c7e0d03c39115d4a2d1944befe31e04f8"
- integrity sha512-1qGZpVbfWfGLujKFyt2Nd9bc7rNXdkjYIRfpGmn/fwVDhWz/D4Q8GLMQPB2ixocSuF3pjfsRTh1D+rKK17WFjg==
+"@cspell/dict-ruby@^1.0.13":
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-1.0.13.tgz#2cb63b575376de3bd85ec9b862bc31cdabb287b9"
+ integrity sha512-YeN1acY38dgMYlEJ6iWPH+8qXB6seLKHm9BszXxaKT/IzGA9Y9XUWPGobeJFD5E/tC6HjvcqRKxEs8vnvakoLQ==
"@cspell/dict-rust@^1.0.22":
version "1.0.22"
@@ -657,10 +666,10 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-1.0.21.tgz#bfda392329061e2352fbcd33d228617742c93831"
integrity sha512-5V/R7PRbbminTpPS3ywgdAalI9BHzcEjEj9ug4kWYvBIGwSnS7T6QCFCiu+e9LvEGUqQC+NHgLY4zs1NaBj2vA==
-"@cspell/dict-software-terms@^1.0.25":
- version "1.0.25"
- resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-1.0.25.tgz#a42c488ebf0169727386b5ea7981ac2e40212014"
- integrity sha512-GOHfmGT/X7QsKXFKS8riPVXI7jOTfcjSz/mzoUP8t1kOTkp+8qw+hxsQ31Z4Ctz5ZI7sh0xpFFYDNFFzG5XWgw==
+"@cspell/dict-software-terms@^1.0.26":
+ version "1.0.26"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-1.0.26.tgz#ce504130dfa3c6ebef58c5c5e41d30484ab5f7e8"
+ integrity sha512-NN+mv6VnCwxEWzGxOgFG4akDIRvY0j8slHmgxtoPGKDm+K22zvZITxFwF3/NHGOSxQ4n2hW6sYjqMpxAPGhjCQ==
"@cspell/dict-typescript@^1.0.16":
version "1.0.16"
@@ -2672,14 +2681,6 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
- integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
chalk@^2.0.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -2689,6 +2690,14 @@ chalk@^2.0.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
+chalk@^4.0.0, chalk@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
char-regex@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -2779,6 +2788,15 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
clone-deep@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
@@ -2870,10 +2888,10 @@ commander@^6.2.0, commander@~6.2.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
-commander@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.0.0.tgz#3e2bbfd8bb6724760980988fb5b22b7ee6b71ab2"
- integrity sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==
+commander@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff"
+ integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==
comment-json@^4.1.0:
version "4.1.0"
@@ -2974,7 +2992,15 @@ contains-path@^0.1.0:
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
-conventional-changelog-angular@^5.0.0, conventional-changelog-angular@^5.0.3:
+conventional-changelog-angular@^5.0.11:
+ version "5.0.12"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9"
+ integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==
+ dependencies:
+ compare-func "^2.0.0"
+ q "^1.5.1"
+
+conventional-changelog-angular@^5.0.3:
version "5.0.11"
resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb"
integrity sha512-nSLypht/1yEflhuTogC03i7DX7sOrXGsRn14g131Potqi6cbGbGEE9PSDEHKldabB6N76HiSyw9Ph+kLmC04Qw==
@@ -3095,11 +3121,6 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-js@^3.6.1:
- version "3.6.5"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
- integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
-
core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -3156,62 +3177,62 @@ crypto-random-string@^2.0.0:
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
-cspell-glob@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-5.2.0.tgz#19bf774562254d5bccd5491d2a904357c6f4a683"
- integrity sha512-Zc80PsQ86Sfsl04+PjoImfrUnFcPJh78Beg/gFjeJ9+7oUk3oBlAcAczat0ZdfOAdQ3x/rWCH30SoefuaEfsiw==
+cspell-glob@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-5.3.4.tgz#656188388467f8be7e115924e7b43ba85c234fa4"
+ integrity sha512-SrtfNUP7CqFstTzuRscGI5IFYu1j3ay5a9ioFTx2CoaFqp2BXqFpE8z9NE6Lao+7z7Fg4hiPgvsCd1gn3J/P8A==
dependencies:
micromatch "^4.0.2"
-cspell-io@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-5.2.0.tgz#a482cdaa165872445fdb0a68b973ff6dbe09efb0"
- integrity sha512-8GFIa31vFtFleJ2ZC4Nb3QmG426aEglKu9OD3lcufNWSnFL1A6tbJJ0zGhuiYDpnyVRMKVkur/vh1FVNNvR83w==
+cspell-io@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-5.3.4.tgz#b468ae8d92de863a5aad5d6d4a542e4ebe63b63d"
+ integrity sha512-1IHuU8Y4zxGj/nyH6DawKwQevRNYiSjPqoLjqyJFeMtd3Nix0mVHf0UxotPiHhuZkuuMgQkxA4EeavGDS5jOng==
dependencies:
iconv-lite "^0.6.2"
iterable-to-stream "^1.0.1"
-cspell-lib@^5.2.4:
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-5.2.4.tgz#8296c5045fa7c4072dcd8b8995e1ae83949c5873"
- integrity sha512-DR0ZSNCwurHCobO5QDYyEuCCmkXRutQvfoK18wICuiUElD4WkgksuWPItRr2s5901t/QvImh349U+2UuO9qwCA==
+cspell-lib@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-5.3.4.tgz#039b4ddd3bfbb24038ef362590ab2b3a2dc8c89c"
+ integrity sha512-uA35jAW3CAqJeRZhQdAmhDfoHVCK0kBQcXEAerWO1z4xDThE/JRAJEKMAXirVIQufOu9X2btjQZse9ubg0p7sQ==
dependencies:
- "@cspell/cspell-bundled-dicts" "^5.2.4"
- "@cspell/cspell-types" "^5.2.4"
+ "@cspell/cspell-bundled-dicts" "^5.3.4"
+ "@cspell/cspell-types" "^5.3.4"
comment-json "^4.1.0"
configstore "^5.0.1"
cosmiconfig "^7.0.0"
- cspell-io "^5.2.0"
- cspell-trie-lib "^5.2.2"
+ cspell-glob "^5.3.4"
+ cspell-io "^5.3.4"
+ cspell-trie-lib "^5.3.4"
fs-extra "^9.1.0"
gensequence "^3.1.1"
- minimatch "^3.0.4"
resolve-from "^5.0.0"
resolve-global "^1.0.0"
vscode-uri "^3.0.2"
-cspell-trie-lib@^5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-5.2.2.tgz#5f8878dc09a630ce37a9e6a42f4b5cecaa003ce2"
- integrity sha512-Zs4POqx8xPuNF8Cex3NnSv0Ti8sS5UiL5ruo6tKwQWJbpWvrBZ/FTlypG4l2y0BMEqd+/CqmjOv3GX8dDE2lBg==
+cspell-trie-lib@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-5.3.4.tgz#5e10424a265d6362810e2fd0ad64e4e214f46367"
+ integrity sha512-WaMGBIdbmOwle7pSmrOMQqfY4ndbNIGiQvpU0xuTWAzvcL/sCzgfqiDt7sI8Mr8vnSGnAphRn0xLlNqXzAgn1Q==
dependencies:
fs-extra "^9.1.0"
gensequence "^3.1.1"
cspell@^5.2.4:
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/cspell/-/cspell-5.2.4.tgz#d28b6a6ff93d1824c560a2c6f5e4d9000227a12a"
- integrity sha512-ONMoI2Yf9of662Ac8Azg+EKXWSDxZIjSWGtkg6FNQOCzD0AgO6ZJv2ti9mHuSZ9rovfaPJUocmiTJSl9TncK6g==
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/cspell/-/cspell-5.3.4.tgz#1d79d3bde38a91adcda9fde4b2aa553746ff2f51"
+ integrity sha512-AXiZzeXXBVZIwRsD30bloqOaJEjTF3e/nzXCLHUq3Eyqiy1ySWMnOMm3OXQ1nI7nkjYpx5+Pdx7cDlH0wFrKYQ==
dependencies:
+ "@cspell/cspell-types" "^5.3.4"
chalk "^4.1.0"
- commander "^7.0.0"
+ commander "^7.1.0"
comment-json "^4.1.0"
- cspell-glob "^5.2.0"
- cspell-lib "^5.2.4"
+ cspell-glob "^5.3.4"
+ cspell-lib "^5.3.4"
fs-extra "^9.1.0"
get-stdin "^8.0.0"
glob "^7.1.6"
- minimatch "^3.0.4"
strip-ansi "^6.0.0"
cssom@^0.4.4:
@@ -4280,7 +4301,7 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-get-caller-file@^2.0.1:
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -4686,9 +4707,9 @@ humanize-ms@^1.2.1:
ms "^2.0.0"
husky@^5.0.9:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/husky/-/husky-5.1.1.tgz#8678953fd8deb86f387cbf1ad50bb2f7f96e83f2"
- integrity sha512-80LZ736V0Nr4/st0c2COYaMbEQhHNmAbLMN8J/kLk7/mo0QdUkUGNDjv/7jVkhug377Wh8wfbWyaVXEJ/h2B/Q==
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-5.1.2.tgz#dc6a1f68640455d8d98c28875e073087f86c5081"
+ integrity sha512-lilaRYeDXcAOj8DuRnN9IxUyEMVbYg9rK7yVNkPB5V4hCvxIUxpMeiv9K2h77CE0HzjCnk1Br0oWe1IghXngDQ==
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
@@ -6184,9 +6205,9 @@ markdownlint@~0.22.0:
markdown-it "12.0.2"
marked@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.0.tgz#9662bbcb77ebbded0662a7be66ff929a8611cee5"
- integrity sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.1.tgz#5e7ed7009bfa5c95182e4eb696f85e948cefcee3"
+ integrity sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw==
mdurl@^1.0.1:
version "1.0.1"
@@ -7771,12 +7792,7 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-semver@7.3.2:
- version "7.3.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
- integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
-
-semver@7.x, semver@^7.2.1, semver@^7.3.2:
+semver@7.3.4, semver@7.x, semver@^7.2.1, semver@^7.3.2:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
@@ -8522,9 +8538,9 @@ trim-off-newlines@^1.0.0:
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
ts-jest@^26.5.1:
- version "26.5.1"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.1.tgz#4d53ee4481552f57c1624f0bd3425c8b17996150"
- integrity sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==
+ version "26.5.2"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.2.tgz#5281d6b44c2f94f71205728a389edc3d7995b0c4"
+ integrity sha512-bwyJ2zJieSugf7RB+o8fgkMeoMVMM2KPDE0UklRLuACxjwJsOrZNo6chrcScmK33YavPSwhARffy8dZx5LJdUQ==
dependencies:
"@types/jest" "26.x"
bs-logger "0.x"
@@ -9078,6 +9094,11 @@ y18n@^4.0.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+y18n@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18"
+ integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==
+
yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
@@ -9114,6 +9135,11 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3:
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@^20.2.2:
+ version "20.2.6"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20"
+ integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==
+
yargs@^14.2.2:
version "14.2.3"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
@@ -9131,7 +9157,7 @@ yargs@^14.2.2:
y18n "^4.0.0"
yargs-parser "^15.0.1"
-yargs@^15.0.1, yargs@^15.1.0, yargs@^15.4.1:
+yargs@^15.0.1, yargs@^15.4.1:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
@@ -9148,6 +9174,19 @@ yargs@^15.0.1, yargs@^15.1.0, yargs@^15.4.1:
y18n "^4.0.0"
yargs-parser "^18.1.2"
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"