Skip to content

Don't suggest replacing foreign format specifiers in concat! output - #163371

Open
h-kurashina wants to merge 1 commit into
rust-lang:mainfrom
h-kurashina:fix-format-foreign-concat
Open

h-kurashina wants to merge 1 commit into
rust-lang:mainfrom
h-kurashina:fix-format-foreign-concat

Conversation

@h-kurashina

@h-kurashina h-kurashina commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Found while working on #163368, which fixes the same class of bug for the format string parser's suggestions.

When a format string is not a literal in the source, e.g. when it is
produced by concat!, the offsets of printf- and shell-style
specifiers are relative to the expanded string rather than to the
source. check_foreign! still used them to place a machine-applicable
suggestion, which could rewrite unrelated source text such as turning
concat! into c{}cat!, or ICE when the span landed inside a
multibyte character.

When the format string is not a source literal, explain the
translation in a note instead, e.g. "%d should be written as {}",
and don't emit the suggestion. For specifiers that cannot be
translated, point the note at the whole format string argument
instead of a span computed from those offsets; the output is the same
as before. The output for format strings written as literals is
unchanged.

When a format string is not a literal in the source, e.g. when it is
produced by `concat!`, the offsets of printf- and shell-style
specifiers are relative to the expanded string rather than to the
source. `check_foreign!` still used them to place a machine-applicable
suggestion, which could rewrite unrelated source text such as turning
`concat!` into `c{}cat!`, or ICE when the span landed inside a
multibyte character.

When the format string is not a source literal, explain the
translation in a note instead, e.g. "`%d` should be written as `{}`",
and don't emit the suggestion. For specifiers that cannot be
translated, point the note at the whole format string argument
instead of a span computed from those offsets; the output is the same
as before. The output for format strings written as literals is
unchanged.
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Sep 26, 2026
@rustbot

rustbot commented Sep 26, 2026

Copy link
Copy Markdown
Collaborator

Thanks for the pull request, and welcome! The Rust Project has assigned @jackh726 (or someone else) to review your changes, you should hear from them (or someone else) within the next two weeks.

Please see the contribution instructions and our LLM policy for more information.

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 77 candidates
  • Random selection from 19 candidates

This branch has not been deployed

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

Labels

S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants