Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(eslint-plugin): Add BigInt object type to default ban-types list #4970

Merged
merged 3 commits into from May 14, 2022

Conversation

tduyduc
Copy link
Contributor

@tduyduc tduyduc commented May 13, 2022

PR Checklist

  • Addresses an existing open issue: fixes #000 No issues have been created about this feature
  • That issue was marked as accepting prs No issues have been created about this feature
  • Steps in CONTRIBUTING.md were taken

Overview

The pull request title says it all: to add BigInt type to the default list of banned types, given that bigint is a primitive type (just like boolean, string, number, and symbol).

The ban-types rule source code and the rule documentation have been changed.

@nx-cloud
Copy link

nx-cloud bot commented May 13, 2022

☁️ Nx Cloud Report

CI is running/has finished running commands for commit bb7f97a. As they complete they will appear below. Click to see the status, the terminal output, and the build insights.

📂 See all runs for this branch


✅ Successfully ran 43 targets

Sent with 💌 from NxCloud.

@typescript-eslint
Copy link
Contributor

Thanks for the PR, @tduyduc!

typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community.

The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately.

Thanks again!


🙏 Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on https://opencollective.com/typescript-eslint. As a thank you, your profile/company logo will be added to our main README which receives thousands of unique visitors per day.

@netlify
Copy link

netlify bot commented May 13, 2022

Deploy Preview for typescript-eslint ready!

Name Link
🔨 Latest commit bb7f97a
🔍 Latest deploy log https://app.netlify.com/sites/typescript-eslint/deploys/627fcbd6368afd0008584987
😎 Deploy Preview https://deploy-preview-4970--typescript-eslint.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

@codecov
Copy link

codecov bot commented May 13, 2022

Codecov Report

Merging #4970 (bb7f97a) into main (77e15a9) will increase coverage by 1.61%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main    #4970      +/-   ##
==========================================
+ Coverage   92.64%   94.25%   +1.61%     
==========================================
  Files         190      153      -37     
  Lines       10251     8305    -1946     
  Branches     3249     2702     -547     
==========================================
- Hits         9497     7828    -1669     
+ Misses        502      263     -239     
+ Partials      252      214      -38     
Flag Coverage Δ
unittest 94.25% <ø> (+1.61%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
packages/eslint-plugin/src/rules/array-type.ts 97.18% <ø> (ø)
packages/eslint-plugin/src/rules/ban-types.ts 100.00% <ø> (ø)
packages/type-utils/src/getTypeName.ts
...escript-estree/src/semantic-or-syntactic-errors.ts
packages/type-utils/src/getSourceFileOfNode.ts
packages/typescript-estree/src/simple-traverse.ts
packages/typescript-estree/src/ast-converter.ts
packages/typescript-estree/src/node-utils.ts
...internal/src/rules/no-typescript-default-import.ts
...ges/type-utils/src/getConstrainedTypeAtLocation.ts
... and 29 more

@Josh-Cena
Copy link
Member

It is impossible to construct a wrapper object of type BigInt, so BigInt and bigint are literally the same type, contrary to number or boolean.

@bradzacher
Copy link
Member

bradzacher commented May 14, 2022

99.99999% of the time you don't want the capital version of the type, nor should you be constructing a wrapper object. Which is why the rule points people at using the lowercase type for the primitives.

@bradzacher bradzacher added the enhancement New feature or request label May 14, 2022
@Josh-Cena
Copy link
Member

Ugh, I see we ban Symbol as well, even when there's no danger. I see the reasoning.

Copy link
Member

@JoshuaKGoldberg JoshuaKGoldberg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup this makes sense, thanks!

@tduyduc
Copy link
Contributor Author

tduyduc commented May 14, 2022

It is impossible to construct a wrapper object of type BigInt, so BigInt and bigint are literally the same type, contrary to number or boolean.

Boxed objects of symbols and bigints cannot be instantiated via new Symbol() or new BigInt(1n), but can via Object(Symbol()) and Object(1n) explicitly. Of course we won't need them generally all the time.

99.99999% of the time you don't want the capital version of the type, nor should you be constructing a wrapper object. Which is why the rule points people at using the lowercase type for the primitives.

It is also worth noting that the boxed primitive types can screw up TypeScript type guards. This can be a problem should we face bigger unions of types.

declare var x: BigInt | bigint | undefined;
if (x instanceof Object) {
  x; // is BigInt (object)
} else if (typeof x === 'bigint') {
  x; // is bigint (primitive)
}

@Josh-Cena
Copy link
Member

Oh I wasn't aware of the narrowing issue. It makes much more sense then 👍

@JoshuaKGoldberg JoshuaKGoldberg enabled auto-merge (squash) May 14, 2022 15:33
@JoshuaKGoldberg JoshuaKGoldberg merged commit 1867728 into typescript-eslint:main May 14, 2022
crapStone pushed a commit to Calciumdibromid/CaBr2 that referenced this pull request May 19, 2022
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint) | devDependencies | minor | [`5.23.0` -> `5.25.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/5.23.0/5.25.0) |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint) | devDependencies | minor | [`5.23.0` -> `5.25.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/5.23.0/5.25.0) |

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/eslint-plugin)</summary>

### [`v5.25.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#&#8203;5250-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5240v5250-2022-05-17)

[Compare Source](typescript-eslint/typescript-eslint@v5.24.0...v5.25.0)

##### Bug Fixes

-   **eslint-plugin:** \[typedef] stop enforcing rule for assignment expressions ([#&#8203;4958](typescript-eslint/typescript-eslint#4958)) ([04a216c](typescript-eslint/typescript-eslint@04a216c))
-   **eslint-plugin:** strict config should not extend recommended ([#&#8203;5005](typescript-eslint/typescript-eslint#5005)) ([05d71c2](typescript-eslint/typescript-eslint@05d71c2))
-   **website:** correct Presets link to be Configs ([#&#8203;5004](typescript-eslint/typescript-eslint#5004)) ([e18e91c](typescript-eslint/typescript-eslint@e18e91c))

##### Features

-   **eslint-plugin:** \[no-empty-function] new allow option overrideMethods ([#&#8203;4923](typescript-eslint/typescript-eslint#4923)) ([13c05ae](typescript-eslint/typescript-eslint@13c05ae))
-   **eslint-plugin:** deprecate `no-duplicate-imports` in favour of `import/no-duplicates` ([#&#8203;4973](typescript-eslint/typescript-eslint#4973)) ([1d2e41a](typescript-eslint/typescript-eslint@1d2e41a))
-   update to TypeScript 4.7-rc ([#&#8203;4829](typescript-eslint/typescript-eslint#4829)) ([6fe783c](typescript-eslint/typescript-eslint@6fe783c))

### [`v5.24.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#&#8203;5240-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5230v5240-2022-05-16)

[Compare Source](typescript-eslint/typescript-eslint@v5.23.0...v5.24.0)

##### Bug Fixes

-   **eslint-plugin:** \[array-type] in fixer add missing parens for constructor types [#&#8203;4756](typescript-eslint/typescript-eslint#4756) ([#&#8203;4971](typescript-eslint/typescript-eslint#4971)) ([0377070](typescript-eslint/typescript-eslint@0377070))

##### Features

-   **eslint-plugin:** Add BigInt object type to default ban-types list ([#&#8203;4970](typescript-eslint/typescript-eslint#4970)) ([1867728](typescript-eslint/typescript-eslint@1867728))
-   **eslint-plugin:** add new 'strict' config ([#&#8203;4706](typescript-eslint/typescript-eslint#4706)) ([4a500b2](typescript-eslint/typescript-eslint@4a500b2))

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v5.25.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#&#8203;5250-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5240v5250-2022-05-17)

[Compare Source](typescript-eslint/typescript-eslint@v5.24.0...v5.25.0)

**Note:** Version bump only for package [@&#8203;typescript-eslint/parser](https://github.com/typescript-eslint/parser)

### [`v5.24.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#&#8203;5240-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5230v5240-2022-05-16)

[Compare Source](typescript-eslint/typescript-eslint@v5.23.0...v5.24.0)

**Note:** Version bump only for package [@&#8203;typescript-eslint/parser](https://github.com/typescript-eslint/parser)

</details>

---

### Configuration

📅 **Schedule**: At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).

Co-authored-by: cabr2-bot <cabr2.help@gmail.com>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1357
Reviewed-by: 6543 <6543@noreply.codeberg.org>
Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 14, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants