1 #![allow(deprecated)] 2 3 mod argument { 4 use pin_project::{pin_project, project}; 5 6 #[pin_project] 7 struct A(#[pin] ()); 8 9 #[project] unexpected_local1()10 fn unexpected_local1() { 11 let mut x = A(()); 12 #[project()] //~ ERROR unexpected token 13 let A(_) = Pin::new(&mut x).project(); 14 } 15 16 #[project] unexpected_local1()17 fn unexpected_local1() { 18 let mut x = A(()); 19 #[project(foo)] //~ ERROR unexpected token 20 let A(_) = Pin::new(&mut x).project(); 21 } 22 23 #[project] unexpected_expr1()24 fn unexpected_expr1() { 25 let mut x = A(()); 26 #[project()] //~ ERROR unexpected token 27 match Pin::new(&mut x).project() { 28 A(_) => {} 29 } 30 } 31 32 #[project] unexpected_expr1()33 fn unexpected_expr1() { 34 let mut x = A(()); 35 #[project(foo)] //~ ERROR unexpected token 36 match Pin::new(&mut x).project() { 37 A(_) => {} 38 } 39 } 40 41 #[project()] // Ok unexpected_item1()42 fn unexpected_item1() {} 43 44 #[project(foo)] //~ ERROR unexpected token unexpected_item2()45 fn unexpected_item2() {} 46 } 47 48 mod attribute { 49 use pin_project::{pin_project, project, project_ref, project_replace}; 50 51 #[pin_project(project_replace)] 52 struct A(#[pin] ()); 53 54 #[project] duplicate_stmt_project()55 fn duplicate_stmt_project() { 56 let mut x = A(()); 57 #[project] 58 #[project] //~ ERROR duplicate #[project] attribute 59 let A(_) = Pin::new(&mut x).project(); 60 } 61 62 #[project_ref] duplicate_stmt_project_ref()63 fn duplicate_stmt_project_ref() { 64 let mut x = A(()); 65 #[project_ref] 66 #[project_ref] //~ ERROR duplicate #[project_ref] attribute 67 let A(_) = Pin::new(&mut x).project(); 68 } 69 70 #[project_replace] duplicate_stmt_project_replace()71 fn duplicate_stmt_project_replace() { 72 let mut x = A(()); 73 #[project_replace] 74 #[project_replace] //~ ERROR duplicate #[project_replace] attribute 75 let A(_) = Pin::new(&mut x).project(); 76 } 77 78 #[project] combine_stmt_project1()79 fn combine_stmt_project1() { 80 let mut x = A(()); 81 #[project] 82 #[project_ref] //~ ERROR are mutually exclusive 83 let A(_) = Pin::new(&mut x).project(); 84 } 85 86 #[project] combine_stmt_project2()87 fn combine_stmt_project2() { 88 let mut x = A(()); 89 #[project] 90 #[project_replace] //~ ERROR are mutually exclusive 91 let A(_) = Pin::new(&mut x).project(); 92 } 93 94 #[project] combine_stmt_project3()95 fn combine_stmt_project3() { 96 let mut x = A(()); 97 #[project_ref] 98 #[project_replace] //~ ERROR are mutually exclusive 99 let A(_) = Pin::new(&mut x).project(); 100 } 101 102 #[project_ref] combine_stmt_project_ref1()103 fn combine_stmt_project_ref1() { 104 let mut x = A(()); 105 #[project] 106 #[project_ref] //~ ERROR are mutually exclusive 107 let A(_) = Pin::new(&mut x).project(); 108 } 109 110 #[project_ref] combine_stmt_project_ref2()111 fn combine_stmt_project_ref2() { 112 let mut x = A(()); 113 #[project] 114 #[project_replace] //~ ERROR are mutually exclusive 115 let A(_) = Pin::new(&mut x).project(); 116 } 117 118 #[project_ref] combine_stmt_project_ref3()119 fn combine_stmt_project_ref3() { 120 let mut x = A(()); 121 #[project_ref] 122 #[project_replace] //~ ERROR are mutually exclusive 123 let A(_) = Pin::new(&mut x).project(); 124 } 125 126 #[project_replace] combine_stmt_project_replace1()127 fn combine_stmt_project_replace1() { 128 let mut x = A(()); 129 #[project] 130 #[project_ref] //~ ERROR are mutually exclusive 131 let A(_) = Pin::new(&mut x).project(); 132 } 133 134 #[project_replace] combine_stmt_project_replace2()135 fn combine_stmt_project_replace2() { 136 let mut x = A(()); 137 #[project] 138 #[project_replace] //~ ERROR are mutually exclusive 139 let A(_) = Pin::new(&mut x).project(); 140 } 141 142 #[project_replace] combine_stmt_project_replace3()143 fn combine_stmt_project_replace3() { 144 let mut x = A(()); 145 #[project_ref] 146 #[project_replace] //~ ERROR are mutually exclusive 147 let A(_) = Pin::new(&mut x).project(); 148 } 149 150 #[project] 151 #[project] //~ ERROR duplicate #[project] attribute duplicate_fn_project()152 fn duplicate_fn_project() {} 153 154 #[project_ref] 155 #[project_ref] //~ ERROR duplicate #[project_ref] attribute duplicate_fn_project_ref()156 fn duplicate_fn_project_ref() {} 157 158 #[project_replace] 159 #[project_replace] //~ ERROR duplicate #[project_replace] attribute duplicate_fn_project_replace()160 fn duplicate_fn_project_replace() {} 161 162 #[project] 163 #[project] //~ ERROR duplicate #[project] attribute 164 impl A {} 165 166 #[project_ref] 167 #[project_ref] //~ ERROR duplicate #[project_ref] attribute 168 impl A {} 169 170 #[project_replace] 171 #[project_replace] //~ ERROR duplicate #[project_replace] attribute 172 impl A {} 173 174 #[allow(unused_imports)] 175 mod use_ { 176 use pin_project::{project, project_ref, project_replace}; 177 178 #[project] 179 #[project] //~ ERROR duplicate #[project] attribute 180 use super::A; 181 182 #[project_ref] 183 #[project_ref] //~ ERROR duplicate #[project_ref] attribute 184 use super::A; 185 186 #[project_replace] 187 #[project_replace] //~ ERROR duplicate #[project_replace] attribute 188 use super::A; 189 } 190 } 191 main()192fn main() {} 193