// rustfmt-normalize_comments: true

fn main() {
    let constellation_chan =
        Constellation::<layout::layout_task::LayoutTask, script::script_task::ScriptTask>::start(
            compositor_proxy,
            resource_task,
            image_cache_task,
            font_cache_task,
            time_profiler_chan,
            mem_profiler_chan,
            devtools_chan,
            storage_task,
            supports_clipboard,
        );

    Quux::<
        ParamOne, // Comment 1
        ParamTwo, // Comment 2
    >::some_func();

    <*mut JSObject>::relocate(entry);

    let x: Foo<A>;
    let x: Foo/*::*/<A>;
}

fn op(foo: Bar, key: &[u8], upd: Fn(Option<&memcache::Item>, Baz) -> Result) -> MapResult {}
