Add `Checker::context` method, deduplicate Unicode checks by ntBre · Pull Request #19609 · astral-sh/ruff

@ntBre added the internal

An internal refactor or improvement

label

Jul 29, 2025

MichaReiser

Base automatically changed from brent/lint-context-settings to main

July 29, 2025 12:13
Summary
--

This PR is stacked on #19608 and of more dubious value. It bothered me to see
that `Candidate::into_diagnostic` and `Candidate::report_diagnostic` were
essentially the same, differing only in taking a `LintContext` instead of a
`Checker`. This was also the only reason we needed to collect a `Vec` of
`Candidate`s in `ambiguous_unicode_character` instead of reporting them
directly.

This PR fixes those two concerns, but at the cost of introducing a trait
implemented by `LintContext` and `Checker`. I'm leaning towards it not being
worth it, unless we think the trait will be useful elsewhere.

If we do want to keep the trait, we could obviously move `report_diagnostic`
into it and move the actual implementations into the trait impls. I held off
doing that for now to avoid a big import diff, especially if we didn't want this
change at all.

Test Plan
--

Existing tests

@ntBre

@ntBre ntBre changed the title Add DiagnosticReporter trait, deduplicate Unicode checks Add Checker::context method, deduplicate Unicode checks

Jul 29, 2025

@ntBre ntBre marked this pull request as ready for review

July 29, 2025 19:22

MichaReiser

@ntBre ntBre deleted the brent/ambiguous-unicode-characters branch

July 29, 2025 20:07

dcreager added a commit that referenced this pull request

Aug 1, 2025
* main: (24 commits)
  Add `Checker::context` method, deduplicate Unicode checks (#19609)
  [`flake8-pyi`] Preserve inline comment in ellipsis removal (`PYI013`) (#19399)
  [ty] Add flow diagram for import resolution
  [ty] Add comments to some core resolver functions
  [ty] Add missing ticks and use consistent quoting
  [ty] Reflow some long lines
  [ty] Unexport helper function
  [ty] Remove offset from `CompletionTargetTokens::Unknown`
  [`pyupgrade`] Fix `UP030` to avoid modifying double curly braces in format strings (#19378)
  [ty] fix a typo  (#19621)
  [ty] synthesize `__replace__` for dataclasses (>=3.13) (#19545)
  [ty] Discard `Definition`s when normalizing `Signature`s (#19615)
  [ty] Fix empty spans following a line terminator and unprintable character spans in diagnostics (#19535)
  Add `LinterContext::settings` to avoid passing separate settings (#19608)
  Support `.pyi` files in ruff analyze graph (#19611)
  [ty] Sync vendored typeshed stubs (#19607)
  [ty] Bump docstring-adder pin (#19606)
  [`perflint`] Ignore rule if target is `global` or `nonlocal` (`PERF401`) (#19539)
  Add license classifier back to pyproject.toml (#19599)
  [ty] Add stub mapping support to signature help (#19570)
  ...