Skip to content

Rule proposal: [prefer-at] Rule to prefer array.at(-1) over array[array.length - 1] #6401

Open
@JoshuaKGoldberg

Description

@JoshuaKGoldberg

Before You File a Proposal Please Confirm You Have Done The Following...

My proposal is suitable for this project

  • My proposal specifically checks TypeScript syntax, or it proposes a check that requires type information to be accurate.
  • My proposal is not a "formatting rule"; meaning it does not just enforce how code is formatted (whitespace, brace placement, etc).
  • I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).

Description

#6211 shows a use of array.at(-1), as a cleaner equivalent to array[array.length - 1]. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/at

Proposal: let's add a typed lint rule that, when it sees something like array[array.length - 1] on an Array-typed value, proposes fixing to array.at(-1)?

Fail Cases

declare const array: string[];

array[array.length - 1];

Pass Cases

declare const array: string[];

array.at(-1);

// [] indices are reasonable
array[0];

// Don't look through functions
const getArray = () => array;
getArray()[getArray().length - 1];

Additional Info

Reference for an existing similar rule: https://typescript-eslint.io/rules/prefer-includes.

I don't think we should enable this in recommended or strict configs until we only support Node versions that include .at. Per #6396 this wouldn't make sense for users who compile to Node 14 and don't include a polyfill.

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issueenhancement: new plugin ruleNew rule request for eslint-pluginpackage: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions