195 lines
3.8 KiB
Rust
195 lines
3.8 KiB
Rust
//@aux-build:macro_rules.rs
|
|
#![rustfmt::skip]
|
|
#![feature(custom_inner_attributes)]
|
|
#![allow(unused)]
|
|
#![allow(clippy::let_and_return)]
|
|
#![allow(clippy::redundant_closure_call)]
|
|
#![allow(clippy::no_effect)]
|
|
#![allow(clippy::unnecessary_operation)]
|
|
#![allow(clippy::never_loop)]
|
|
#![warn(clippy::excessive_nesting)]
|
|
#![allow(clippy::collapsible_if)]
|
|
|
|
mod auxiliary;
|
|
|
|
#[macro_use]
|
|
extern crate macro_rules;
|
|
|
|
static X: u32 = {
|
|
let x = {
|
|
let y = {
|
|
let z = {
|
|
let w = { 3 };
|
|
w
|
|
};
|
|
z
|
|
};
|
|
y
|
|
};
|
|
x
|
|
};
|
|
|
|
macro_rules! xx {
|
|
() => {{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
println!("ehe"); // should not lint
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}};
|
|
}
|
|
|
|
struct A;
|
|
|
|
impl A {
|
|
pub fn a(&self, v: u32) {
|
|
struct B;
|
|
|
|
impl B {
|
|
pub fn b() {
|
|
struct C;
|
|
|
|
impl C {
|
|
pub fn c() {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct D { d: u32 }
|
|
|
|
trait Lol {
|
|
fn lmao() {
|
|
fn bb() {
|
|
fn cc() {
|
|
let x = { 1 }; // not a warning, but cc is
|
|
}
|
|
|
|
let x = { 1 }; // warning
|
|
}
|
|
}
|
|
}
|
|
|
|
use a::{b::{c::{d::{e::{f::{}}}}}}; // should not lint
|
|
|
|
pub mod a {
|
|
pub mod b {
|
|
pub mod c {
|
|
pub mod d {
|
|
pub mod e {
|
|
pub mod f {}
|
|
} // not here
|
|
} // only warning should be here
|
|
}
|
|
}
|
|
}
|
|
|
|
fn a_but_not(v: u32) {}
|
|
|
|
fn main() {
|
|
let a = A;
|
|
|
|
a_but_not({{{{{{{{0}}}}}}}});
|
|
a.a({{{{{{{{{0}}}}}}}}});
|
|
(0, {{{{{{{1}}}}}}});
|
|
|
|
if true {
|
|
if true {
|
|
if true {
|
|
if true {
|
|
if true {
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let y = (|| {
|
|
let x = (|| {
|
|
let y = (|| {
|
|
let z = (|| {
|
|
let w = { 3 };
|
|
w
|
|
})();
|
|
z
|
|
})();
|
|
y
|
|
})();
|
|
x
|
|
})();
|
|
|
|
excessive_nesting!(); // ensure this isn't linted in external macros
|
|
xx!(); // ensure this is never linted
|
|
let boo = true;
|
|
!{boo as u32 + !{boo as u32 + !{boo as u32}}};
|
|
|
|
// this is a mess, but that's intentional
|
|
let mut y = 1;
|
|
y += {{{{{5}}}}};
|
|
let z = y + {{{{{{{{{5}}}}}}}}};
|
|
[0, {{{{{{{{{{0}}}}}}}}}}];
|
|
let mut xx = [0; {{{{{{{{100}}}}}}}}];
|
|
xx[{{{{{{{{{{{{{{{{{{{{{{{{3}}}}}}}}}}}}}}}}}}}}}}}}];
|
|
&mut {{{{{{{{{{y}}}}}}}}}};
|
|
|
|
for i in {{{{xx}}}} {{{{{{{{}}}}}}}}
|
|
|
|
while let Some(i) = {{{{{{Some(1)}}}}}} {{{{{{{}}}}}}}
|
|
|
|
while {{{{{{{{true}}}}}}}} {{{{{{{{{}}}}}}}}}
|
|
|
|
let d = D { d: {{{{{{{{{{{{{{{{{{{{{{{3}}}}}}}}}}}}}}}}}}}}}}} };
|
|
|
|
{{{{1;}}}}..{{{{{{3}}}}}};
|
|
{{{{1;}}}}..={{{{{{{{{{{{{{{{{{{{{{{{{{6}}}}}}}}}}}}}}}}}}}}}}}}}};
|
|
..{{{{{{{5}}}}}}};
|
|
..={{{{{3}}}}};
|
|
{{{{{1;}}}}}..;
|
|
|
|
loop { break {{{{1}}}} };
|
|
loop {{{{{{}}}}}}
|
|
|
|
match {{{{{{true}}}}}} {
|
|
true => {{{{}}}},
|
|
false => {{{{}}}},
|
|
}
|
|
|
|
{
|
|
{
|
|
{
|
|
{
|
|
println!("warning! :)");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
async fn b() -> u32 {
|
|
async fn c() -> u32 {{{{{{{0}}}}}}}
|
|
|
|
c().await
|
|
}
|
|
|
|
async fn a() {
|
|
{{{{b().await}}}};
|
|
}
|