diff --git a/teloxide-macros/src/attr.rs b/teloxide-macros/src/attr.rs
index 89a5b06e..281baa37 100644
--- a/teloxide-macros/src/attr.rs
+++ b/teloxide-macros/src/attr.rs
@@ -1,5 +1,5 @@
 use syn::parse::{Parse, ParseStream};
-use syn::{Attribute, LitStr, Token};
+use syn::{LitStr, Token};
 
 
 pub enum BotCommandAttribute {
diff --git a/teloxide-macros/src/command.rs b/teloxide-macros/src/command.rs
index 5e55093f..c362faa4 100644
--- a/teloxide-macros/src/command.rs
+++ b/teloxide-macros/src/command.rs
@@ -1,5 +1,4 @@
 use crate::attr::{Attr, BotCommandAttribute};
-use std::convert::TryFrom;
 use crate::rename_rules::rename_by_rule;
 
 pub struct Command {
@@ -47,6 +46,7 @@ fn parse_attrs(attrs: &[Attr]) -> Result<CommandAttrs, String> {
             BotCommandAttribute::Prefix => prefix = Some(attr.value()),
             BotCommandAttribute::Description => description = Some(attr.value()),
             BotCommandAttribute::RenameRule => rename_rule = Some(attr.value()),
+            #[allow(unreachable_patterns)]
             _ => return Err(format!("unexpected attribute")),
         }
     }
diff --git a/teloxide-macros/src/enum_attributes.rs b/teloxide-macros/src/enum_attributes.rs
index 96373210..da290ca7 100644
--- a/teloxide-macros/src/enum_attributes.rs
+++ b/teloxide-macros/src/enum_attributes.rs
@@ -1,6 +1,4 @@
 use crate::attr::{Attr, BotCommandAttribute};
-use std::convert::TryFrom;
-use crate::rename_rules::rename_by_rule;
 
 pub struct CommandEnum {
     pub prefix: Option<String>,
@@ -45,6 +43,7 @@ fn parse_attrs(attrs: &[Attr]) -> Result<CommandAttrs, String> {
             BotCommandAttribute::Prefix => prefix = Some(attr.value()),
             BotCommandAttribute::Description => description = Some(attr.value()),
             BotCommandAttribute::RenameRule => rename_rule = Some(attr.value()),
+            #[allow(unreachable_patterns)]
             _ => return Err(format!("unexpected attribute")),
         }
     }
diff --git a/teloxide-macros/src/lib.rs b/teloxide-macros/src/lib.rs
index b4a822fa..78cba883 100644
--- a/teloxide-macros/src/lib.rs
+++ b/teloxide-macros/src/lib.rs
@@ -7,17 +7,15 @@ extern crate proc_macro;
 extern crate syn;
 use proc_macro::TokenStream;
 use quote::{quote, ToTokens};
-use syn::{DeriveInput, parse_macro_input, Token};
-use syn::parse::{Parse, ParseStream};
+use syn::{DeriveInput, parse_macro_input};
 use crate::command::Command;
-use std::convert::TryFrom;
 use crate::attr::{Attr, VecAttrs};
 use crate::enum_attributes::CommandEnum;
 use crate::rename_rules::rename_by_rule;
 
 macro_rules! get_or_return {
-    ($some:tt) => {
-        match $some {
+    ($($some:tt)*) => {
+        match $($some)* {
             Ok(elem) => elem,
             Err(e) => return e
         };
@@ -30,7 +28,7 @@ pub fn derive_telegram_command_enum(tokens: TokenStream) -> TokenStream {
 
     let data_enum: &syn::DataEnum = get_or_return!(get_enum_data(&input));
 
-    let mut enum_attrs: Vec<Attr> = get_or_return!(parse_attributes(&input.attrs));
+    let enum_attrs: Vec<Attr> = get_or_return!(parse_attributes(&input.attrs));
 
     let command_enum = match CommandEnum::try_from(enum_attrs.as_slice()) {
         Ok(command_enum) => command_enum,
@@ -85,7 +83,7 @@ pub fn derive_telegram_command_enum(tokens: TokenStream) -> TokenStream {
     let variant_str2 = variant_str1.clone();
     let variant_description = variant_infos.iter().map(|info| info.description.as_ref().map(String::as_str).unwrap_or(""));
 
-    let ident = input.ident;
+    let ident = &input.ident;
 
     let expanded = quote! {
         impl BotCommand for #ident {
@@ -117,7 +115,7 @@ fn get_enum_data(input: &DeriveInput) -> Result<&syn::DataEnum, TokenStream> {
 
 fn parse_attributes(input: &Vec<syn::Attribute>) -> Result<Vec<Attr>, TokenStream> {
     let mut enum_attrs = Vec::new();
-    for attr in &input.attrs {
+    for attr in input.iter() {
         match attr.parse_args::<VecAttrs>() {
             Ok(mut attrs_) => {
                 enum_attrs.append(attrs_.data.as_mut());