Skip to content

Fix suppressions after nested multiline f-strings#4175

Open
loulanyue wants to merge 1 commit into
facebook:mainfrom
loulanyue:fix/4118-nested-fstring-suppressions
Open

Fix suppressions after nested multiline f-strings#4175
loulanyue wants to merge 1 commit into
facebook:mainfrom
loulanyue:fix/4118-nested-fstring-suppressions

Conversation

@loulanyue

Copy link
Copy Markdown

Summary

  • detect suppression-like text hidden by the lightweight multiline-string scanner
  • use Ruff's existing parser tokens only for that rare ambiguous case
  • preserve the lightweight fast path for normal modules
  • cover Pyrefly/Pyre suppressions and ensure string contents remain ignored

The lightweight scanner loses the surrounding single-quoted f-string context across physical lines. For a nested multiline string, its closing triple quotes can therefore be mistaken for a new top-level string opener, hiding a valid suppression on a later line. The scoped token fallback uses Python's actual lexical structure without parsing every module twice.

Fixes #4118.

Verification

  • cargo test -p pyrefly_python: 71 passed, 0 failed
  • cargo test -p pyrefly_python ignore: 8 passed, 0 failed
  • cargo clippy -p pyrefly_python --all-targets -- -D warnings: passed
  • python3 test.py --no-test --no-tensor-shapes --no-conformance --no-jsonschema: passed; existing unrelated warnings remain on Rust 1.97.1
  • cargo run -p pyrefly -- check /tmp/pyrefly-4118-repro.py: 0 errors (1 suppressed)
  • git diff --check: passed

AI disclosure

This contribution was prepared and reviewed with Codex acting as an AI coding agent. The issue reproduction, fallback scope, negative test, end-to-end behavior, formatting, tests, and lint results were explicitly verified before submission.

@meta-cla

meta-cla Bot commented Jul 17, 2026

Copy link
Copy Markdown

Hi @loulanyue!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pyrefly ignores suppressions after multi-line nested strings in f-strings

1 participant