Skip to content

Conversation

@ntBre
Copy link
Contributor

@ntBre ntBre commented Jul 29, 2025

Summary

This PR adds a Checker::context method that returns the underlying LintContext to unify Candidate::into_diagnostic and Candidate::report_diagnostic in our ambiguous Unicode character checks. This avoids some duplication and also avoids collecting a Vec of Candidates only to iterate over it later.

Test Plan

Existing tests

@ntBre ntBre added the internal An internal refactor or improvement label Jul 29, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Jul 29, 2025

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

Copy link
Member

@MichaReiser MichaReiser left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems to me that the only problem is that you can't go from Checker to LintContext but I don't see a reason why that should be, given that Checker stores a LintContext. Is there something that prevents us from adding a context() method to Checker that returns the LintContext?

@ntBre
Copy link
Contributor Author

ntBre commented Jul 29, 2025

I think we previously wanted to avoid providing two paths to report_diagnostic (and now settings), at least that's what I remember somewhat vaguely. That's definitely simpler if we don't mind adding the method, though!

Base automatically changed from brent/lint-context-settings to main July 29, 2025 12:13
ntBre added 2 commits July 29, 2025 15:17
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 force-pushed the brent/ambiguous-unicode-characters branch from 497d425 to 49c5d57 Compare July 29, 2025 19:18
@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
Copy link
Member

@MichaReiser MichaReiser left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice

@ntBre ntBre merged commit 864196b into main Jul 29, 2025
35 checks passed
@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)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal An internal refactor or improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants