agiledigital-labs / agiledigital-labs/eslint-plugin-total-functions

[no-unsafe-mutable-readonly-assignment] make exception for array concat parameter `ConcatArray`

Open
#132 0 comments 0 reactions 0 assignees View on GitHub
good first issue help wanted
Dominant language
TypeScript
Stars
92
Forks
5
PR merge metrics
No merged PRs in 30d

Description

_NB this issue is distinct from (but related to) #100. That issue is about the return type, this is about the parameter type._

Concatenating a mutable array to another array is currently flagged by `no-unsafe-mutable-readonly-assignment`:

```ts
const arr: Array = [""];
const foo: Array = arr.concat(arr); // Flagged by no-unsafe-mutable-readonly-assignment
```

This is strictly correct, because `concat` takes a `ConcatArray` type that has **readonly** length and number index properties:

```ts
interface ConcatArray {
readonly length: number;
readonly [n: number]: T;
join(separator?: string): string;
slice(start?: number, end?: number): T[];
}
```

Even though this is correct (at least strictly speaking) it's not useful, because it cannot lead to surprising mutation in any readonly values.

We should treat this as a special case and ignore it in the `no-unsafe-mutable-readonly-assignment` rule.

**Bonus points**: are there any other methods (especially on the array type) that we should ignore for the same reason?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.