You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Allen George (Jira)" <ji...@apache.org> on 2021/03/06 15:55:00 UTC

[jira] [Updated] (THRIFT-5364) Remove clippy::box_vec lint override

     [ https://issues.apache.org/jira/browse/THRIFT-5364?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Allen George updated THRIFT-5364:
---------------------------------
    Priority: Minor  (was: Major)

> 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
>            Priority: Minor
>
> 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)