Closed
Description
The core problem is that when a linting warning is due to a piece coming from a macro in another crate, things get off.
Following is a minimalist reproducible testcase:
$ cargo new --lib foo
$ cd foo
$ cat <<'EOF' > src/bar.rs
#[macro_export]
macro_rules! bar {
($macro:ident !) => ( $macro! {
a
bbbbb
cccccccccccccccccc
}
)
}
EOF
$ cat <<'EOF' > src/lib.rs
#[macro_use]
mod bar;
macro_rules! foo {
($($name:ident)+) => {
pub enum Foo {$($name,)+ }
};
}
bar!(foo!);
EOF
The compiler output is:
warning: variant `a` should have a camel case name such as `A`
--> src/lib.rs:6:25
|
4 | | macro_rules! foo {
| |___________^
5 | ($($name:ident)+) => {
6 | pub enum Foo {$($name,)+ }
| _________________________^
...
10 | bar!(foo!);
| ----------- in this macro invocation
|
= note: #[warn(non_camel_case_types)] on by default
warning: variant `bbbbb` should have a camel case name such as `Bbbbb`
--> src/lib.rs:6:25
|
5 | | ($($name:ident)+) => {
| |_______________^
6 | pub enum Foo {$($name,)+ }
| _________________________^
...
10 | bar!(foo!);
| ----------- in this macro invocation
warning: variant `cccccccccccccccccc` should have a camel case name such as `Cccccccccccccccccc`
--> src/lib.rs:6:25
|
6 | pub enum Foo {$($name,)+ }
| ^^^^
...
10 | bar!(foo!);
| ----------- in this macro invocation
Several things of note:
- Line numbers are progressing, but depending on the contents of the bar macro, they sometimes don't: even when all items are on different lines, sometimes the reported lines for some variants are the same as other variants.
- Columns vary depending on the length of the items in the bar macro, but don't seem to actually match.
- When putting everything in the same file, the errors look fine:
#[macro_use]
mod bar {
#[macro_export]
macro_rules! bar {
($macro:ident !) => ( $macro! {
a
bbbbb
cccccccccccccccccc
}
)
}
}
macro_rules! foo {
($($name:ident)+) => {
pub enum Foo {$($name,)+ }
};
}
bar!(foo!);
warning: variant `a` should have a camel case name such as `A`
--> src/lib.rs:6:8
|
6 | a
| ___________^
7 | | bbbbb
8 | | cccccccccccccccccc
9 | | }
... |
15 | | ($($name:ident)+) => {
16 | | pub enum Foo {$($name,)+ }
| |_____________________________^
...
20 | bar!(foo!);
| ----------- in this macro invocation
|
= note: #[warn(non_camel_case_types)] on by default
warning: variant `bbbbb` should have a camel case name such as `Bbbbb`
--> src/lib.rs:7:8
|
7 | bbbbb
| ___________^
8 | | cccccccccccccccccc
9 | | }
10 | | )
... |
15 | | ($($name:ident)+) => {
16 | | pub enum Foo {$($name,)+ }
| |_____________________________^
...
20 | bar!(foo!);
| ----------- in this macro invocation
warning: variant `cccccccccccccccccc` should have a camel case name such as `Cccccccccccccccccc`
--> src/lib.rs:8:8
|
8 | cccccccccccccccccc
| ___________^
9 | | }
10 | | )
11 | | }
... |
15 | | ($($name:ident)+) => {
16 | | pub enum Foo {$($name,)+ }
| |_____________________________^
...
20 | bar!(foo!);
| ----------- in this macro invocation