Skip to content

Enhancement: [ban-types] Split into default-less no-restricted-types and more targeted type ban rule(s) #8978

@JoshuaKGoldberg

Description

@JoshuaKGoldberg

Overview

Splitting out of #8700: ban-types has long been a kind of mirror to the core ESLint rule no-restricted-syntax. But, ban-types also comes with some default settings. That means the rule really has two areas of responsibility:

  • Banning confusing built-in types
  • Giving users the ability to ban types of their choosing

That dual-responsibility has led to the rule being more convoluted to configure than average. It's the only rule of ours right now that has to include an extendDefaults option.

/**
* Rules that do funky things with their defaults and require special code
* rather than just JSON.stringify-ing their defaults blob
*/
const SPECIAL_CASE_DEFAULTS = new Map([
['ban-types', '[{ /* See below for default options */ }]'],
]);

Once #8977 is in, the defaults for ban-types will exclusively target the uppercase aliases of primitive types (Boolean, Number, ...) and the general Function and Object types. I think the v8 breaking changes are a good opportunity to further simplify the rule. Proposal: let's...

  • Remove the remaining default options for ban-types, rename it to no-restricted-types (to mirror no-restricted-syntax), and remove it from recommended
  • Add 1-3 new rule(s) in recommended that ban those previous default types
    • Starting proposal: a single no-uppercase-alias-types rule?

This would be a breaking change in that it would change the defaults for ban-types. Note that the stuff linted against by default in ban-types would still be linted against - just by different rule(s).

Metadata

Metadata

Labels

breaking changeThis change will require a new major version to be releasedlocked due to agePlease open a new issue if you'd like to say more. See https://typescript-eslint.io/contributing.package: eslint-pluginIssues related to @typescript-eslint/eslint-pluginteam assignedA member of the typescript-eslint team should work on this.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy