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

Support inner doc comments in proc_macro #49656

Closed
dtolnay opened this issue Apr 4, 2018 · 1 comment
Closed

Support inner doc comments in proc_macro #49656

dtolnay opened this issue Apr 4, 2018 · 1 comment
Assignees
Labels
A-macros-2.0 Area: Declarative macros 2.0 (#39412) C-bug Category: This is a bug.

Comments

@dtolnay
Copy link
Member

dtolnay commented Apr 4, 2018

An inner doc comment //! doc currently incorrectly tokenizes as an outer attribute, #[doc = "//! doc"]. It should be an inner attribute, #![doc = " doc"]. You can see the correct behavior in macro_rules:

macro_rules! tokens {
    (#![doc = $tt:tt]) => {
        println!("{:?}", $tt);
    }
}

fn main() {
    tokens! {
        //! doc
    }
}

Repro script

#!/bin/sh

cargo new --lib repro_macro
cargo new --lib repro

echo >repro_macro/src/lib.rs '
#![feature(proc_macro)]

extern crate proc_macro;
use proc_macro::TokenStream;

#[proc_macro]
pub fn repro(_input: TokenStream) -> TokenStream {
    let mut tts = "//! doc\n".parse::<TokenStream>().unwrap().into_iter();
    println!("{}", tts.next().unwrap());
    println!("{}", tts.next().unwrap());
    TokenStream::empty()
}
'

echo >>repro_macro/Cargo.toml '
[lib]
proc-macro = true
'

echo >repro/src/lib.rs '
#![feature(proc_macro)]

extern crate repro_macro;
repro_macro::repro!();
'

echo >>repro/Cargo.toml '
repro_macro = { path = "../repro_macro" }
'

cargo build --manifest-path repro/Cargo.toml
#
[ doc = "//! doc" ]

@alexcrichton

@alexcrichton
Copy link
Member

I've added a fix for this in #49597

@pietroalbini pietroalbini added the C-bug Category: This is a bug. label Apr 5, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-macros-2.0 Area: Declarative macros 2.0 (#39412) C-bug Category: This is a bug.
Projects
None yet
Development

No branches or pull requests

3 participants