Rustdoc: formatting to buffers
This should be reviewed commit-by-commit.
I've not attempted to fully flesh out what the end state of this PR could look like yet as I wanted to get it up for some early feedback (I already think this has some wins, too, so we could land it as-is).
The primary idea with `Buffer` is that it internally tracks whether we're printing to HTML or text, and the goal is that eventually instead of branch on `fmt.alternate()` anywhere, we'd call a helper like `buf.nbsp()` which would either return ` ` or ` ` depending on the target we're printing to. Obviously, that's not included in this PR, in part because it was already getting quite big.
This means that callers can pass in a closure like
`|buf| some_function(..., &mut buf)` and pass in arbitrary arguments to
that function without complicating the trait definition. We also keep
the impl for str and String, since it's useful to be able to just pass
in "" or format!("{}"...) results in some cases.
This changes Print's definition to take self, instead of &self, because
otherwise FnOnce cannot be called directly. We could instead take FnMut
or even Fn, but that seems like it'd merely complicate matters -- most
of the time, the FnOnce does not constrain us at all anyway. If it does,
a custom Print impl for &'_ SomeStruct is not all that painful.
Rollup of 5 pull requests
Successful merges:
- #64052 (Rename test locals to work around LLDB bug)
- #64066 (Support "soft" feature-gating using a lint)
- #64177 (resolve: Do not afraid to set current module to enums and traits)
- #64229 (Reduce span to function name in unreachable calls)
- #64255 (Add methods for converting `bool` to `Option<T>`)
Failed merges:
r? @ghost
Reduce span to function name in unreachable calls
As title suggests, this might close#64103. Refer to the updated tests for expected output.
There is potential to further improve usability. In particular, is it favourable that the exact diverging expression/statement be pointed out (not only in this case, but for all unreachable code)? Certainly that would deserve another issue, but I'm interested in the opinions.
resolve: Do not afraid to set current module to enums and traits
After cfbb60bf6d it's ok.
This is likely required for https://github.com/rust-lang/rust/pull/63468 to work correctly, because that PR starts resolving attributes on enum variants.
r? @matthewjasper @c410-f3r
Rename test locals to work around LLDB bug
LLDB's expression parser can't unambiguously resolve local variables in
some cases, as described in #47938. Work around this by using names that
don't shadow direct submodules of `core`.
Closes#64050.
Rollup of 7 pull requests
Successful merges:
- #64023 (libstd fuchsia fixes)
- #64098 (Ensure edition lints and internal lints are enabled with deny-warnings=false)
- #64139 (Migrate internal diagnostic registration to macro_rules)
- #64226 (Aggregation of cosmetic changes made during work on REPL PRs: libsyntax)
- #64227 (Aggregation of cosmetic changes made during work on REPL PRs: librustc)
- #64235 (Upgrade env_logger to 0.6)
- #64258 (compiletest: Match suffixed environments)
Failed merges:
r? @ghost
compiletest: Match suffixed environments
This fixes a case where an `ignore-musl` test was not ignored on
`armv7-unknown-linux-musleabihf` because the environment did not exactly
match. Only enforce that the environment starts with the argument to
`ignore-`.
Ensure edition lints and internal lints are enabled with deny-warnings=false
Previously we only passed the deny command line flags if deny-warnings was enabled, but now we either pass -W... or -D... for each of the flags as appropriate.
This is also a breaking change to x.py as it changes `--warnings=allow` to `--warnings=warn` which is what that flag actually did; we don't have an allow warnings mode.
libstd fuchsia fixes
This fixes two bugs in libstd on Fuchsia:
- `zx_time_t` was changed to an `i64`, but this never made it into libstd
- When spawning processes where any of the stdio were null, libstd attempts to open `/dev/null`, which doesn't exist on Fuchsia
r? @cramertj
This fixes a case where an `ignore-musl` test was not ignored on
`armv7-unknown-linux-musleabihf` because the environment did not exactly
match. Only enforce that the environment starts with the argument to
`ignore-`.
Rollup of 10 pull requests
Successful merges:
- #63919 (Use hygiene for AST passes)
- #63927 (Filter linkcheck spurious failure)
- #64149 (rustc_codegen_llvm: give names to non-alloca variable values.)
- #64192 (Bail out when encountering likely missing turbofish in parser)
- #64231 (Move the HIR CFG to `rustc_ast_borrowck`)
- #64233 (Correct pluralisation of various diagnostic messages)
- #64236 (reduce visibility)
- #64240 (Include compiler-rt in the source tarball)
- #64241 ([doc] Added more prereqs and note about default directory)
- #64243 (Move injection of attributes from command line to `libsyntax_ext`)
Failed merges:
r? @ghost