Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added rust_unpretty_aspect and rust_unpretty rules #2356

Merged
merged 1 commit into from
Dec 27, 2023

Conversation

UebelAndre
Copy link
Collaborator

@UebelAndre UebelAndre commented Dec 25, 2023

Proposal for #1642
Duplicates #1643 (special thanks to @freeformstu)

Summary

Rustc can be used to expand all macros so that you can inspect the generated source files easier.

This feature is enabled via -Zunpretty={mode}. The -Z flag is only available in the nightly
version of rustc (rust-lang/rust#43364).

Unprettying

Build and test your targets normally.

bazel build //:ok_binary   
INFO: Analyzed target //:ok_binary (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //:ok_binary up-to-date:
  bazel-bin/ok_binary
INFO: Elapsed time: 0.081s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action

Use the aspect to generate the expanded files in as a one-off build.

(.bazelrc)

# Enable unpretty for all targets in the workspace
build:unpretty --aspects=@rules_rust//rust:defs.bzl%rust_unpretty_aspect
build:unpretty --output_groups=+rust_unpretty

# `unpretty` requires the nightly toolchain. See tracking issue:
# https://github.com/rust-lang/rust/issues/43364
build:unpretty --@rules_rust//rust/toolchain/channel=nightly
bazel build --config=unpretty //:ok_binary
INFO: Analyzed target //:ok_binary (1 packages loaded, 2 targets configured).
INFO: Found 1 target...
Aspect @rules_rust//rust/private:unpretty.bzl%rust_unpretty_aspect of //:ok_binary up-to-date:
  bazel-bin/ok_binary.expand.rs
INFO: Elapsed time: 0.149s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action

Targeting tests is valid as well.

bazel build --config=unpretty //:ok_test  
INFO: Analyzed target //:ok_test (0 packages loaded, 2 targets configured).
INFO: Found 1 target...
Aspect @rules_rust//rust/private:unpretty.bzl%rust_expand_aspect of //:ok_test up-to-date:
  bazel-bin/test-397521499/ok_test.expand.rs
INFO: Elapsed time: 0.113s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action

Finally, manually wire up a rust_unpretty target explicitly if you want a target to build. This rule is unique compared to the aspect in that it forces a transition to a nightly toolchain so that -Zunpretty can be used.

load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_unpretty")

rust_binary(
    name = "ok_binary",
    srcs = ["src/main.rs"],
    edition = "2021",
)

rust_unpretty(
    name = "ok_binary_expand",
    deps = [":ok_binary"],
)
bazel build //:ok_binary_expand
INFO: Analyzed target //:ok_binary_expand (0 packages loaded, 1 target configured).
INFO: Found 1 target...
Target //:ok_binary_expand up-to-date:
  bazel-bin/ok_binary.expand.rs
INFO: Elapsed time: 0.090s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action

@UebelAndre
Copy link
Collaborator Author

I still think these rules probably belong on @rules_rust//tools/unpretty. Hopefully my reviewers have opinions

Copy link
Collaborator

@illicitonion illicitonion left a comment

Choose a reason for hiding this comment

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

Generally LGTM, I don't have strong opinions on where this lives.

rust/private/unpretty.bzl Outdated Show resolved Hide resolved
rust/private/unpretty.bzl Outdated Show resolved Hide resolved
rust/private/unpretty.bzl Show resolved Hide resolved
rust/private/unpretty.bzl Outdated Show resolved Hide resolved
@UebelAndre UebelAndre enabled auto-merge (squash) December 27, 2023 16:59
@UebelAndre UebelAndre merged commit 828c807 into bazelbuild:main Dec 27, 2023
3 checks passed
@UebelAndre UebelAndre deleted the expand branch December 27, 2023 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants