biomejs / biome

A toolchain for web projects, aimed to provide functionalities to maintain them. Biome offers formatter and linter, usable via CLI and LSP.
https://biomejs.dev
Apache License 2.0
12.43k stars 394 forks source link

`useJsxKeyInIterable` reports a false-positive for objects using a `map` method which is not actually an iterable #2768

Open GuyGooL5 opened 1 month ago

GuyGooL5 commented 1 month ago

Environment information

CLI:
  Version:                      1.7.3
  Color support:                true

Platform:
  CPU Architecture:             x86_64
  OS:                           windows

Environment:
  BIOME_LOG_DIR:                unset
  NO_COLOR:                     unset
  TERM:                         "cygwin"
  JS_RUNTIME_VERSION:           "v20.10.0"
  JS_RUNTIME_NAME:              "node"
  NODE_PACKAGE_MANAGER:         "pnpm/8.15.5"

Biome Configuration:
  Status:                       Loaded successfully
  Formatter disabled:           false
  Linter disabled:              false
  Organize imports disabled:    false
  VCS disabled:                 true

Linter:
  Recommended:                  true
  All:                          false
  Rules:                        a11y/all = true
                                complexity/all = true
                                complexity/noForEach = "off"
                                correctness/all = true
                                nursery/all = true
                                nursery/noUndeclaredDependencies = "off"
                                nursery/useImportRestrictions = "error"
                                nursery/useSortedClasses = "warn"
                                performance/all = true
                                performance/noBarrelFile = "off"
                                security/all = true
                                style/recommended = true
                                style/noNegationElse = "warn"
                                style/useSingleCaseStatement = "warn"

Workspace:
  Open Documents:               0

Rule name

lint/correctness/useJsxKeyInIterable

Playground link

https://biomejs.dev/playground/?code=LwAvACAAVABoAGkAcwAgAGkAcwAgAGEAIABsAGkAdAB0AGwAZQAgAHMAdQBiAHMAZQB0ACAAbwBmACAAdABoAGUAIABpAG0AcABsAGUAbQBlAG4AdABhAHQAaQBvAG4AIABvAGYAIABhACAAYwB1AHMAdABvAG0AIAByAGUAcwB1AGwAdAAgAHcAcgBhAHAAcABlAHIACgBjAGwAYQBzAHMAIABSAGUAcwB1AGwAdAA8AFQALAAgAEUAPgAgAHsACgAgACAAYwBvAG4AcwB0AHIAdQBjAHQAbwByACgAcgBlAGEAZABvAG4AbAB5ACAAdgBhAGwAdQBlADoAIAB7ACAAZABhAHQAYQA6ACAAVAAgAH0AIAB8ACAAewAgAGUAcgByAG8AcgA6ACAARQAgAH0AKQAgAHsAfQAKAAoAIAAgAHAAdQBiAGwAaQBjACAAbQBhAHAAPABVAD4AKABmAG4AOgAgACgAZABhAHQAYQA6ACAAVAApACAAPQA%2BACAAVQApADoAIABSAGUAcwB1AGwAdAA8AFUALAAgAEUAPgAgAHsACgAgACAAIAAgAHIAZQB0AHUAcgBuACAAIgBkAGEAdABhACIAIABpAG4AIAB0AGgAaQBzAC4AdgBhAGwAdQBlAAoAIAAgACAAIAAgACAAPwAgAG4AZQB3ACAAUgBlAHMAdQBsAHQAKAB7ACAAZABhAHQAYQA6ACAAZgBuACgAdABoAGkAcwAuAHYAYQBsAHUAZQAuAGQAYQB0AGEAKQAgAH0AKQAKACAAIAAgACAAIAAgADoAIAAoAHQAaABpAHMAIABhAHMAIAB1AG4AawBuAG8AdwBuACAAYQBzACAAUgBlAHMAdQBsAHQAPABVACwAIABFAD4AKQA7AAoAIAAgAH0ACgAKACAAIABwAHUAYgBsAGkAYwAgAG0AYQBwAHAAZQBkACAAPQAgAG0AYQBwAAoAIAAgAAoAIAAgAHAAdQBiAGwAaQBjACAAbwBrACgAKQA6ACAAVAAgAHwAIABuAHUAbABsACAAewAKACAAIAAgACAAcgBlAHQAdQByAG4AIAAiAGQAYQB0AGEAIgAgAGkAbgAgAHQAaABpAHMALgB2AGEAbAB1AGUAIAA%2FACAAdABoAGkAcwAuAHYAYQBsAHUAZQAuAGQAYQB0AGEAIAA6ACAAbgB1AGwAbAA7AAoAIAAgAH0ACgB9AAoACgBjAG8AbgBzAHQAIAByAGUAcwB1AGwAdAAgAD0AIABuAGUAdwAgAFIAZQBzAHUAbAB0ACgAewAgAGQAYQB0AGEAOgAgACIAaABlAGwAbABvACIAIAB9ACkAOwAKAAoALwAvACAAQgBpAG8AbQBlACAAcgBlAHAAbwByAHQAcwAgAGEAIABmAGEAbABzAGUAIABwAG8AcwBpAHQAaQB2AGUAIABiAGUAYwBhAHUAcwBlACAAbwBmACAAdABoAGUAIAB1AHMAZQAgAG8AZgAgAGAAbQBhAHAAYAAgAGEAcwAgAGEAIABtAGUAdABoAG8AZAAgAG4AYQBtAGUACgBjAG8AbgBzAHQAIABDAG8AbQBwAG8AbgBlAG4AdAAxACAAPQAgACgAKQAgAD0APgAgAHIAZQBzAHUAbAB0AC4AbQBhAHAAKAAoAGQAYQB0AGEAKQAgAD0APgAgADwAcAA%2BAHsAZABhAHQAYQB9ADwALwBwAD4AKQAuAG8AawAoACkAOwAKAGMAbwBuAHMAdAAgAEMAbwBtAHAAbwBuAGUAbgB0ADIAIAA9ACAAKAApACAAPQA%2BACAAcgBlAHMAdQBsAHQALgBtAGEAcABwAGUAZAAoACgAZABhAHQAYQApACAAPQA%2BACAAPABwAD4AewBkAGEAdABhAH0APAAvAHAAPgApAC4AbwBrACgAKQA7AAoA

Expected result

Implementing a map function for an object triggers a false positive for useJsxKeyInIterable when rendering in a JSX, even when the object is not an Iterable.

I've provided a concrete example in the playground link,

Code of Conduct

vohoanglong0107 commented 1 month ago

This is known limitation. Since we currently lack a reliable method to determine whether the type of a variable is an Array or not, all method that might possibly be called on an Array object are considered, including map, filter, ...

Igosuki commented 1 week ago

Came here for this. The flag also fails with react table, where (...getRowProps()) returns a key prop. This rule should not have been added with these obvious false positives and no options to configure it.

vohoanglong0107 commented 1 week ago

@Igosuki Sorry for your poor experience with this rule. Could you describe in detail what false positives you are encountering with react table?

ematipico commented 6 days ago

We plan to demote the rule to nursery in the next minor, we discussed this internally: https://biomejs.dev/internals/versioning/#minor-release

Removal of a non-nursery rule or demoting a rule to the nursery group.