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

Rustfmt cannot format stream! blocks #68

Open
vkgnosis opened this issue Mar 11, 2022 · 2 comments · May be fixed by rust-lang/rustfmt#5538
Open

Rustfmt cannot format stream! blocks #68

vkgnosis opened this issue Mar 11, 2022 · 2 comments · May be fixed by rust-lang/rustfmt#5538

Comments

@vkgnosis
Copy link

Take a simple example like

fn main() {
    let s = async_stream::stream! {
        for i in 0..3 {
            yield i;
        }
    };
}

in a new rust project. Add some spaces to break the indentation somewhere in the macro invocation. Run cargo fmt. See that Rustfmt completely ignores the code inside of the macro.

This already happens in a simple block like

    let s = async_stream::stream! {
         let a = 0u32;
    };

I'm not sure if this is a bug in Rustfmt or something this crate can fix or if there are some Rustfmt options that can be changed to fix this.
My current workaround is to remove the async_stream::stream! part, run Rustfmt, add it back.

@taiki-e
Copy link
Member

taiki-e commented Mar 11, 2022

rustfmt does not format macros that use braces.

A known workaround is to combine parentheses and blocks.

-     let s = async_stream::stream! {
+     let s = async_stream::stream!({
           let a = 0u32;
-     };
+     });

(Note that the formatting will not work anyway if macro-specific syntax such as for await is used.)

@Noah-Kennedy
Copy link

This is an issue with tokio::select! as well.

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 a pull request may close this issue.

3 participants