Describe the Bug
When you write a # pyrefly: ignore comment above a multi-line implicit string concatenation, only the first error is covered, even though this is a single construct.
# lol.py
x = (
# pyrefly: ignore [bad-index]
f"{d['foo']}\n"
f"{d['bar']}"
)
In pyrefly@0.60.0, this results in an error in pyrefly check, even though the LSP does not error:
❯ uv run pyrefly check lol.py
ERROR Cannot index into `Literal['str']` [bad-index]
--> lol.py:6:8
|
6 | f"{d['bar']}"
| ^^^^^^^^
|
No matching overload found for function `str.__getitem__` called with arguments: (Literal['bar'])
Possible overloads:
(key: SupportsIndex | slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | Unknown | None], /) -> LiteralString [closest match]
(key: SupportsIndex | slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | Unknown | None], /) -> str
INFO 1 error (1 suppressed)
I would expect one of the following:
- The multiline string is treated as a single construct,
- When running
uv run pyrefly suppress lol.py, each component of the multiline string receive their own suppressions. However, this does not happen.
❯ uv run pyrefly suppress lol.py
INFO 1 error (1 suppressed)
INFO Inserting error suppressions...
INFO Finished suppressing errors in 1/1 files
❯ cat lol.py
─────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: lol.py
─────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ d = "str"
2 │
3 │ x = (
│
4 │ # pyrefly: ignore [bad-index]
5 │ f"{d['foo']}\n"
6 │ f"{d['bar']}"
7 │ )
─────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────
Sandbox Link
No response
(Only applicable for extension issues) IDE Information
No response
Describe the Bug
When you write a
# pyrefly: ignorecomment above a multi-line implicit string concatenation, only the first error is covered, even though this is a single construct.In
pyrefly@0.60.0, this results in an error inpyrefly check, even though the LSP does not error:I would expect one of the following:
uv run pyrefly suppress lol.py, each component of the multiline string receive their own suppressions. However, this does not happen.Sandbox Link
No response
(Only applicable for extension issues) IDE Information
No response