Allen George created THRIFT-5364: ------------------------------------ Summary: Remove clippy::box_vec lint override Key: THRIFT-5364 URL: https://issues.apache.org/jira/browse/THRIFT-5364 Project: Thrift Issue Type: Improvement Components: Rust - Compiler Reporter: Allen George
Currently the rust code generator wraps types in a `Box` in two functions: # {{to_rust_type}} # {{render_type_sync_read}} We do this only when a type is a {{typedef}} and {{ttypedef->is_forward_typedef() == true}}. This can result in situations where the following thrift ({{test/Recursive.thrift}}): {noformat} struct RecTree { 1: list<RecTree> children 2: i16 item } {noformat} generates the following rust: {noformat} #[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct RecTree { pub children: Option<Vec<Box<RecTree>>>, pub item: Option<i16>, } {noformat} Clippy trips this code up with the following error: {noformat} /root/.cargo/bin/cargo fmt --all -- --check /root/.cargo/bin/cargo clippy --all -- -D warnings Checking kitchen-sink v0.1.0 (/thrift/src/lib/rs/test) error: `Vec<T>` is already on the heap, the boxing is unnecessary. --> src/recursive.rs:35:24 | 35 | pub children: Option<Vec<Box<RecTree>>>, | ^^^^^^^^^^^^^^^^^ help: try: `Vec<recursive::RecTree>` | = note: `-D clippy::vec-box` implied by `-D warnings` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_box error: aborting due to previous error error: could not compile `kitchen-sink`. {noformat} This happens because all container elements ({{Vec}},{{BTreeSet}},{{BTreeMap}}) are automatically placed on the heap, so a {{Box}} is an additional level of indirection. -- This message was sent by Atlassian Jira (v8.3.4#803005)