/src/tools/clippy/tests/ui/auxiliary/proc_macro_derive.rs

https://gitlab.com/rust-lang/rust · Rust · 74 lines · 62 code · 8 blank · 4 comment · 1 complexity · 3acf6fea01a520f01db023fbe47a9bd7 MD5 · raw file

  1. // compile-flags: --emit=link
  2. // no-prefer-dynamic
  3. #![crate_type = "proc-macro"]
  4. #![feature(repr128, proc_macro_quote)]
  5. #![allow(incomplete_features)]
  6. #![allow(clippy::field_reassign_with_default)]
  7. #![allow(clippy::eq_op)]
  8. extern crate proc_macro;
  9. use proc_macro::{quote, TokenStream};
  10. #[proc_macro_derive(DeriveSomething)]
  11. pub fn derive(_: TokenStream) -> TokenStream {
  12. // Should not trigger `used_underscore_binding`
  13. let _inside_derive = 1;
  14. assert_eq!(_inside_derive, _inside_derive);
  15. let output = quote! {
  16. // Should not trigger `useless_attribute`
  17. #[allow(dead_code)]
  18. extern crate rustc_middle;
  19. };
  20. output
  21. }
  22. #[proc_macro_derive(FieldReassignWithDefault)]
  23. pub fn derive_foo(_input: TokenStream) -> TokenStream {
  24. quote! {
  25. #[derive(Default)]
  26. struct A {
  27. pub i: i32,
  28. pub j: i64,
  29. }
  30. #[automatically_derived]
  31. fn lint() {
  32. let mut a: A = Default::default();
  33. a.i = 42;
  34. a;
  35. }
  36. }
  37. }
  38. #[proc_macro_derive(StructAUseSelf)]
  39. pub fn derive_use_self(_input: TokenStream) -> proc_macro::TokenStream {
  40. quote! {
  41. struct A;
  42. impl A {
  43. fn new() -> A {
  44. A
  45. }
  46. }
  47. }
  48. }
  49. #[proc_macro_derive(ClippyMiniMacroTest)]
  50. pub fn mini_macro(_: TokenStream) -> TokenStream {
  51. quote!(
  52. #[allow(unused)]
  53. fn needless_take_by_value(s: String) {
  54. println!("{}", s.len());
  55. }
  56. #[allow(unused)]
  57. fn needless_loop(items: &[u8]) {
  58. for i in 0..items.len() {
  59. println!("{}", items[i]);
  60. }
  61. }
  62. fn line_wrapper() {
  63. println!("{}", line!());
  64. }
  65. )
  66. }