1 // SPDX-License-Identifier: Apache-2.0 OR MIT 2 3 /*! 4 <!-- tidy:crate-doc:start --> 5 Providing the features between "full" and "derive" of syn. 6 7 This crate provides the following two unique data structures. 8 9 - [`syn_mid::ItemFn`] -- A function whose body is not parsed. 10 11 ```text 12 fn process(n: usize) -> Result<()> { ... } 13 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ ^ 14 ``` 15 16 - [`syn_mid::Block`] -- A block whose body is not parsed. 17 18 ```text 19 { ... } 20 ^ ^ 21 ``` 22 23 Other data structures are the same as data structures of [syn]. These are 24 defined in this crate because they cannot be used in [syn] without "full" 25 feature. 26 27 ## Usage 28 29 Add this to your `Cargo.toml`: 30 31 ```toml 32 [dependencies] 33 syn-mid = "0.5" 34 ``` 35 36 *Compiler support: requires rustc 1.56+* 37 38 [**Examples**](https://github.com/taiki-e/syn-mid/tree/HEAD/examples) 39 40 ## Optional features 41 42 - **`clone-impls`** — Clone impls for all syntax tree types. 43 44 [syn]: https://github.com/dtolnay/syn 45 46 <!-- tidy:crate-doc:end --> 47 */ 48 49 #![doc(test( 50 no_crate_inject, 51 attr( 52 deny(warnings, rust_2018_idioms, single_use_lifetimes), 53 allow(dead_code, unused_variables) 54 ) 55 ))] 56 #![forbid(unsafe_code)] 57 #![warn( 58 rust_2018_idioms, 59 single_use_lifetimes, 60 unreachable_pub, 61 clippy::pedantic, 62 // Lints that may help when writing public library. 63 // missing_debug_implementations, 64 // missing_docs, 65 clippy::alloc_instead_of_core, 66 // clippy::exhaustive_enums, // TODO 67 // clippy::exhaustive_structs, // TODO 68 clippy::impl_trait_in_params, 69 // clippy::missing_inline_in_public_items, 70 // clippy::std_instead_of_alloc, 71 clippy::std_instead_of_core, 72 )] 73 #![allow(clippy::missing_errors_doc, clippy::module_name_repetitions)] 74 75 // Many of the code contained in this crate are copies from https://github.com/dtolnay/syn. 76 77 #[cfg(doc)] 78 extern crate self as syn_mid; 79 80 #[macro_use] 81 mod macros; 82 83 mod func; 84 mod pat; 85 mod path; 86 87 #[doc(no_inline)] 88 pub use syn::ExprPath as PatPath; 89 90 pub use crate::{ 91 func::{Block, FnArg, ItemFn, Receiver, Signature, Variadic}, 92 pat::{ 93 FieldPat, Pat, PatIdent, PatReference, PatRest, PatStruct, PatTuple, PatTupleStruct, 94 PatType, PatWild, 95 }, 96 }; 97