udoprog / genco

A whitespace-aware quasiquoter for beautiful code generation.
Apache License 2.0
181 stars 11 forks source link

dart all pushed in a single line #41

Closed gnunicorn closed 11 months ago

gnunicorn commented 1 year ago

using genco 0.17.5 the default formatter for dart appears to be broken - it puts everything into a single line. Which in turn breaks dartc when having #[doc = in there.

Take this cargo-play example:

//# genco = "0.17.5"

use genco::prelude::*;

fn main() {
    // Some JSON input data as a &str. Maybe this comes from the user.
    let tokens: dart::Tokens = quote! {
        /// doc comment
        class Api {
            final String lateString;
        }
    };

    assert_eq!(tokens.to_file_vec().unwrap().len(), 4);
}

Rather than 4 lines, to_file_vec wraps it all into one :( .

My cargo: cargo 1.70.0 (ec8a8a0ca 2023-04-25) but nightly doesn't show anything different.

udoprog commented 1 year ago

See #39, which should hopefully be a temporary issue.

And as for the comment, it's expanded as a attribute before it's handed to the macro, so you have to do something like this for verbatim comments:

    let tokens: dart::Tokens = quote! {
        $("/// doc comment")
        class Api {
            final String lateString;
        }
    };

I usually end up writing a helper like this if I'm dealing with comment heavy code generation.

gnunicorn commented 1 year ago

thanks, for the quick feedback @udoprog . Indeed forcing proc-macro to be at 1.0.55 (by using proc-macro2 = "=1.0.55" in my Cargo.toml) fixes the multi-line issue. Your example for docs also works well. Thanks!

feel free to close this as a duplicate of #39 then...

udoprog commented 11 months ago

Fix for #39 is incoming in #43.