rust: doctest: fix incorrect pattern in replacement
PATCH v2 1/2 rust: doctest: fix incorrect pattern in replacement
From: Gary Guo <[email protected]>
The -> Result<(), impl core::fmt::Debug> string is generated by rustdoc and by adding "::" into the string it no longer finds anything, and making the line useless.
Remove the "::" in the pattern. Omit it in the replacement too, for consistency with upstream rustdoc.
--
Changes in v2:
- Update comments too
- Stops using :: in the replacement too to be consistent with upstream rustdoc
--- scripts/rustdoc_test_builder.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
scripts/rustdoc_test_builder.rs +8 -6
@@ -28,7 +28,7 @@ fn main() {// // ``` // fn main() { #[allow(non_snake_case)] fn _doctest_main_rust_kernel_file_rs_28_0() { -// fn main() { #[allow(non_snake_case)] fn _doctest_main_rust_kernel_file_rs_37_0() -> Result<(), impl ::core::fmt::Debug> { +// fn main() { #[allow(non_snake_case)] fn _doctest_main_rust_kernel_file_rs_37_0() -> Result<(), impl core::fmt::Debug> { // ``` // // It should be unlikely that doctest code matches such lines (when code is formatted properly).
@@ -47,12 +47,14 @@ fn main() { }) .expect ("No test function found in `rustdoc`'s output." ); -// Qualify `Result` to avoid the collision with our own `Result` coming from the prelude. +// Replicate rustdoc 1.87+ behaviour by fully qualify `Result` (to avoid the collision with our +// own `Result` coming from the prelude). +// +// TODO: Remove this when MSRV is bumped above 1.87. let body = body.replace ( - &format! ("{rustdoc_function_name}() -> Result<(), impl ::core::fmt::Debug> {{" ), - &format! ( -"{rustdoc_function_name}() -> ::core::result::Result<(), impl ::core::fmt::Debug> {{" - ), + &format! ("{rustdoc_function_name}() -> Result<(), impl core::fmt::Debug> {{" ), +// This intentionally does not use absolute paths to match rustdoc 1.87 behaviour. + &format! ("{rustdoc_function_name}() -> core::result::Result<(), impl core::fmt::Debug> {{" ), );// For tests that get generated with `Result`, like above, `rustdoc` generates an `unwrap()` on
base-commit: c425609d6ac4012c8bbf01ec2e10e801b1923a7b
prerequisite-patch-id: 0000000000000000000000000000000000000000
Signature · 1 line
2.54.0
PATCH v2 2/2 rust: doctest: trim function name for reproducbility
From: Gary Guo <[email protected]>
Currently rustdoc will generate function names like "_doctest_main__home_gary_Projects_linux_rust_kernel_io_rs_824_0" for a doctest located at rust/kernel/io.rs:824, when building with separate outdir using O=. This creates overlong symbol names and is also not reproducible.
Fix it by doing a custom remapping to trim it to something like _doctest_main_rust_kernel_io_rs_824_0.
---
Changes in v2:
- Do an unconditional replacement to cover all cases.
--- scripts/rustdoc_test_builder.rs | 5 +++++ 1 file changed, 5 insertions(+)
scripts/rustdoc_test_builder.rs +5 -0
@@ -70,6 +70,11 @@ fn main() {// Figure out a smaller test name based on the generated function name. let name = rustdoc_function_name.split_once ("_rust_kernel_" ).unwrap ().1 ; +// The rustdoc function name can include the absolute path when building with `O=` which is +// undesireable and create overlong symbol names. Remap it to use relative path. +let trimmed_function_name =format! ("_doctest_main_rust_kernel_{name}" ); +let body = body.replace (&rustdoc_function_name, &trimmed_function_name); +let path =format! ("rust/test/doctests/kernel/{name}" ); std::fs::write (path, body.as_bytes ()).unwrap ();
Signature · 1 line
2.54.0
Miguel Ojeda
AppliedQuoted 10 lines · Gary Guo
The
-> Result<(), impl core::fmt::Debug>string is generated by rustdoc and by adding "::" into the string it no longer finds anything, and making the line useless.Remove the "::" in the pattern. Omit it in the replacement too, for consistency with upstream rustdoc.
Fixes de7cd3e4d638 ("rust: use absolute paths in macros referencing core and kernel")Signed-off-by Gary Guo <[email protected]>
Applied to rust-fixes -- thanks!
[ Improved comments for consistency. Reworded to drop changelog and to
fix typo. - Miguel ]
While it doesn't happen to hurt much at the moment, the change here was not intended and we should be able to easily backport it, so:
Cheers,
Miguel
Quoted 3 lines · Miguel Ojeda
[ Improved comments for consistency. Reworded to drop changelog and to
fix typo. - Miguel ]
Actually, I just added a link to the comment to the upstream rustdoc PR for context.
Cheers,
Miguel