Skip to content

Feature suggestion: special case _replace in NamedTuple #3960

Description

@kkom

Describe the Bug

Would you be open to adding special casing for the _replace method in a NamedTuple?

The idea is to statically catch errors like below:

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

Point(1, 2)._replace(z=5)      # not flagged
Point(1, 2)._replace(x="str")  # not flagged

This would help in work with more complex NamedTuples in a safer / more succinct way.

Note: it was quite easy to add support for this to mypy (see python/mypy#17259), but obviously it may be very different given pyrefly's codebase

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN0A5VDRiYAKgFdisADro5AYyio4cOgAVcrBgAohI8VNgBKRHLoW6%2BRJ3QNzl0je1y5m7ToCMAGjoAmY0IAfUoYaVQFGB0ALwBeAFZjS0sAYjp0XH4wZTY2UTctOy9fAODQ8MidfFiZEDgGSlqkujSMrJy8zBBvEDJQ7NJCBlooCjT1Un6oUjo0LDx8OgVcdEg2CUpUBggVwjk0gGUYGDoACwYGYjhEAHobvpgBwl42G5h0G8xcBTgb5dWIOtNtsVjc6GBeHRUAA3VDQVDYWBLFZrDZbHboOi4Ygg9BwPboMgMU4rAC00JglDgGLosTotQAzIRPH5anIANqU6hUgC6cgk6C4PD4olJmAgoQU2wptLoAHJARlQnK5G1SaEAI4SCWigDWMFIpIikVUsrlAHdUJR0Cr0CAAL49CLSmAAMWgMAocxwBBI5HtQA

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions