// rustfmt-normalize_comments: true
// rustfmt-wrap_comments: true

//! Doc comment
fn test() {
            /*!
             * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam */

// comment
        // comment2

    code(); /* leave this comment alone!
             * ok? */

        /* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a
         * diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam
         * viverra nec consectetur ante hendrerit. Donec et mollis dolor.
         * Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam
         * tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut
         * libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit
         * amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis
         * felis, pulvinar a semper sed, adipiscing id dolor. */

    // Very looooooooooooooooooooooooooooooooooooooooooooooooooooooooong comment that should be split

                    // println!("{:?}", rewrite_comment(subslice,
                    //                                       false,
                    //                                       comment_width,
                    //                                       self.block_indent,
                    //                                       self.config)
                    //                           .unwrap());

    funk(); //dontchangeme
            // or me

    // #1388
    const EXCEPTION_PATHS: &'static [&'static str] =
        &[// std crates
          "src/libstd/sys/", // Platform-specific code for std lives here.
          "src/bootstrap"];
}

  /// test123
fn doc_comment() {
}

fn chains() {
                foo.bar(|| { 
                let x = 10;
                /* comment */ x })
}

fn issue_1086() {
    /**/
}

/*
 * random comment */

fn main() {/* Test */}

// #1643
fn some_fn() /* some comment */
{
}

fn some_fn1()
// some comment
{
}

fn some_fn2() // some comment
{
}

fn some_fn3() /* some comment some comment some comment some comment some comment some comment so */
{
}

fn some_fn4()
/* some comment some comment some comment some comment some comment some comment some comment */
{
}

// #1603
pub enum Foo {
    A, // `/** **/`
    B, // `/*!`
    C,
}
