Skip to content
Triggered via push January 2, 2024 19:05
Status Success
Total duration 2m 20s
Artifacts

lints-beta.yml

on: push
Clippy (beta)
2m 9s
Clippy (beta)
Fit to window
Zoom out
Zoom in

Annotations

94 warnings
this expression creates a reference which is immediately dereferenced by the compiler: halo2_proofs/src/plonk/prover.rs#L390
warning: this expression creates a reference which is immediately dereferenced by the compiler --> halo2_proofs/src/plonk/prover.rs:390:29 | 390 | ... &domain, | ^^^^^^^ help: change this to: `domain` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `-W clippy::needless-borrow` implied by `-W clippy::all`
replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take`: halo2_proofs/src/plonk/prover.rs#L369
warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` --> halo2_proofs/src/plonk/prover.rs:369:22 | 369 | let advice = std::mem::replace(&mut self.advice, Vec::new()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.advice)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default
replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take`: halo2_proofs/src/plonk/prover.rs#L368
warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` --> halo2_proofs/src/plonk/prover.rs:368:24 | 368 | let instance = std::mem::replace(&mut self.instance, Vec::new()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.instance)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default = note: `-W clippy::mem-replace-with-default` implied by `-W clippy::all`
this `if` has identical blocks: halo2_proofs/src/plonk/prover.rs#L268
warning: this `if` has identical blocks --> halo2_proofs/src/plonk/prover.rs:268:55 | 268 | if column_indices.contains(&column_index) { | _______________________________________________________^ 269 | | // TODO: Check that column_index in witness is Some 270 | | // TODO: Check that the column length is `params.n()` 271 | | } else { | |_____________^ | note: same as this --> halo2_proofs/src/plonk/prover.rs:271:20 | 271 | } else { | ____________________^ 272 | | // TODO: Check that column_index in witness is None 273 | | }; | |_____________^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else = note: `-W clippy::if-same-then-else` implied by `-W clippy::all`
unnecessary `if let` since only the `Some` variant of the iterator element is used: halo2_proofs/src/plonk/prover.rs#L253
warning: unnecessary `if let` since only the `Some` variant of the iterator element is used --> halo2_proofs/src/plonk/prover.rs:253:13 | 253 | for witness_column in witness_circuit { | ^ --------------- help: try: `witness_circuit.iter().flatten()` | _____________| | | 254 | | if let Some(witness_column) = witness_column { 255 | | if witness_column.len() != self.params.n() as usize { 256 | | return Err(Error::Other(format!( ... | 262 | | } 263 | | } | |_____________^ | help: ...and remove the `if let` statement in the for loop --> halo2_proofs/src/plonk/prover.rs:254:17 | 254 | / if let Some(witness_column) = witness_column { 255 | | if witness_column.len() != self.params.n() as usize { 256 | | return Err(Error::Other(format!( 257 | | "unexpected length in witness_column. Got {}, expected {}", ... | 261 | | } 262 | | } | |_________________^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten = note: `-W clippy::manual-flatten` implied by `-W clippy::all`
useless use of `format!`: halo2_proofs/src/plonk/prover.rs#L243
warning: useless use of `format!` --> halo2_proofs/src/plonk/prover.rs:243:37 | 243 | return Err(Error::Other(format!("witness.len() != advice.len()"))); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"witness.len() != advice.len()".to_string()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format = note: `-W clippy::useless-format` implied by `-W clippy::all`
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/src/plonk/prover.rs#L203
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/src/plonk/prover.rs:203:18 | 203 | witness: Vec<Vec<Option<Polynomial<Assigned<Scheme::Scalar>, LagrangeCoeff>>>>, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
returning the result of a `let` binding from a block: halo2_proofs/src/plonk/circuit.rs#L2197
warning: returning the result of a `let` binding from a block --> halo2_proofs/src/plonk/circuit.rs:2197:9 | 2190 | / let queries = Queries { 2191 | | advice: queries.advice.into_iter().collect(), 2192 | | instance: queries.instance.into_iter().collect(), 2193 | | fixed: queries.fixed.into_iter().collect(), 2194 | | num_advice_queries, 2195 | | }; | |__________- unnecessary `let` binding 2196 | // println!("DBG collected queries\n{:#?}", queries); 2197 | queries | ^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return = note: `-W clippy::let-and-return` implied by `-W clippy::all` help: return the expression directly | 2190 ~ 2191 | // println!("DBG collected queries\n{:#?}", queries); 2192 ~ Queries { 2193 + advice: queries.advice.into_iter().collect(), 2194 + instance: queries.instance.into_iter().collect(), 2195 + fixed: queries.fixed.into_iter().collect(), 2196 + num_advice_queries, 2197 + } |
casting to the same type is unnecessary (`usize` -> `usize`): halo2_proofs/src/plonk/circuit.rs#L1984
warning: casting to the same type is unnecessary (`usize` -> `usize`) --> halo2_proofs/src/plonk/circuit.rs:1984:25 | 1984 | usable_rows: 0..n as usize - (cs.blinding_factors() + 1), | ^^^^^^^^^^ help: try: `n` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast
casting to the same type is unnecessary (`usize` -> `usize`): halo2_proofs/src/plonk/circuit.rs#L1983
warning: casting to the same type is unnecessary (`usize` -> `usize`) --> halo2_proofs/src/plonk/circuit.rs:1983:37 | 1983 | selectors: vec![vec![false; n as usize]; cs.num_selectors], | ^^^^^^^^^^ help: try: `n` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast = note: `-W clippy::unnecessary-cast` implied by `-W clippy::all`
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/src/plonk/circuit.rs#L1959
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/src/plonk/circuit.rs:1959:6 | 1959 | ) -> Result< | ______^ 1960 | | ( 1961 | | CompiledCircuitV2<F>, 1962 | | ConcreteCircuit::Config, ... | 1965 | | Error, 1966 | | > { | |_^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/src/plonk/circuit.rs#L1887
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/src/plonk/circuit.rs:1887:10 | 1887 | ) -> Result<Vec<Option<Polynomial<Assigned<F>, LagrangeCoeff>>>, Error> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity = note: `-W clippy::type-complexity` implied by `-W clippy::all`
an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true: halo2_proofs/src/plonk/circuit.rs#L892
warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true --> halo2_proofs/src/plonk/circuit.rs:892:1 | 892 | impl<F> Into<ExpressionMid<F>> for Expression<F> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: replace the `Into` implentation with `From<plonk::circuit::Expression<F>>` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into = note: `-W clippy::from-over-into` implied by `-W clippy::all`
fields `name`, `input_expressions` and `shuffle_expressions` are never read: halo2_proofs/src/plonk/shuffle.rs#L10
warning: fields `name`, `input_expressions` and `shuffle_expressions` are never read --> halo2_proofs/src/plonk/shuffle.rs:10:16 | 9 | pub struct ArgumentV2<F: Field> { | ---------- fields in this struct 10 | pub(crate) name: String, | ^^^^ 11 | pub(crate) input_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^ 12 | pub(crate) shuffle_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^^^ | = note: `ArgumentV2` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
fields `name`, `input_expressions` and `table_expressions` are never read: halo2_proofs/src/plonk/lookup.rs#L10
warning: fields `name`, `input_expressions` and `table_expressions` are never read --> halo2_proofs/src/plonk/lookup.rs:10:16 | 9 | pub struct ArgumentV2<F: Field> { | ---------- fields in this struct 10 | pub(crate) name: String, | ^^^^ 11 | pub(crate) input_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^ 12 | pub(crate) table_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^ | = note: `ArgumentV2` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
associated function `collect_queries` is never used: halo2_proofs/src/plonk/circuit.rs#L2141
warning: associated function `collect_queries` is never used --> halo2_proofs/src/plonk/circuit.rs:2141:19 | 2141 | pub(crate) fn collect_queries(&self) -> Queries { | ^^^^^^^^^^^^^^^
associated function `phases` is never used: halo2_proofs/src/plonk/circuit.rs#L2131
warning: associated function `phases` is never used --> halo2_proofs/src/plonk/circuit.rs:2131:19 | 2131 | pub(crate) fn phases(&self) -> Vec<u8> { | ^^^^^^
multiple fields are never read: halo2_proofs/src/plonk/circuit.rs#L1803
warning: multiple fields are never read --> halo2_proofs/src/plonk/circuit.rs:1803:16 | 1802 | pub struct ConstraintSystemV2Backend<F: Field> { | ------------------------- fields in this struct 1803 | pub(crate) num_fixed_columns: usize, | ^^^^^^^^^^^^^^^^^ 1804 | pub(crate) num_advice_columns: usize, | ^^^^^^^^^^^^^^^^^^ 1805 | pub(crate) num_instance_columns: usize, | ^^^^^^^^^^^^^^^^^^^^ 1806 | // pub(crate) num_selectors: usize, 1807 | pub(crate) num_challenges: usize, | ^^^^^^^^^^^^^^ ... 1810 | pub(crate) unblinded_advice_columns: Vec<usize>, | ^^^^^^^^^^^^^^^^^^^^^^^^ ... 1813 | pub(crate) advice_column_phase: Vec<u8>, | ^^^^^^^^^^^^^^^^^^^ 1814 | /// Contains the phase for each challenge. Should have same length as num_challenges. 1815 | pub(crate) challenge_phase: Vec<u8>, | ^^^^^^^^^^^^^^^ ... 1821 | pub(crate) gates: Vec<GateV2Backend<F>>, | ^^^^^ ... 1831 | pub(crate) lookups: Vec<lookup::ArgumentV2<F>>, | ^^^^^^^ ... 1835 | pub(crate) shuffles: Vec<shuffle::ArgumentV2<F>>, | ^^^^^^^^ ... 1838 | pub(crate) general_column_annotations: HashMap<metadata::Column, String>, | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `ConstraintSystemV2Backend` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
function `collect_queries` is never used: halo2_proofs/src/plonk/circuit.rs#L1713
warning: function `collect_queries` is never used --> halo2_proofs/src/plonk/circuit.rs:1713:4 | 1713 | fn collect_queries<F: Field>(expr: &ExpressionMid<F>, queries: &mut QueriesSet) { | ^^^^^^^^^^^^^^^
struct `QueriesSet` is never constructed: halo2_proofs/src/plonk/circuit.rs#L1707
warning: struct `QueriesSet` is never constructed --> halo2_proofs/src/plonk/circuit.rs:1707:8 | 1707 | struct QueriesSet { | ^^^^^^^^^^
associated function `get_any_query_index` is never used: halo2_proofs/src/plonk.rs#L133
warning: associated function `get_any_query_index` is never used --> halo2_proofs/src/plonk.rs:133:19 | 133 | pub(crate) fn get_any_query_index(&self, column: Column<Any>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^
associated function `get_instance_query_index` is never used: halo2_proofs/src/plonk.rs#L123
warning: associated function `get_instance_query_index` is never used --> halo2_proofs/src/plonk.rs:123:19 | 123 | pub(crate) fn get_instance_query_index(&self, column: Column<Instance>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^^^^^^
associated function `get_fixed_query_index` is never used: halo2_proofs/src/plonk.rs#L113
warning: associated function `get_fixed_query_index` is never used --> halo2_proofs/src/plonk.rs:113:19 | 113 | pub(crate) fn get_fixed_query_index(&self, column: Column<Fixed>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^^^
associated function `get_advice_query_index` is never used: halo2_proofs/src/plonk.rs#L103
warning: associated function `get_advice_query_index` is never used --> halo2_proofs/src/plonk.rs:103:19 | 103 | pub(crate) fn get_advice_query_index(&self, column: Column<Advice>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default
variable does not need to be mutable: halo2_proofs/src/plonk.rs#L408
warning: variable does not need to be mutable --> halo2_proofs/src/plonk.rs:408:13 | 408 | let mut vk = Self { | ----^^ | | | help: remove this `mut`
variable does not need to be mutable: halo2_proofs/src/plonk.rs#L178
warning: variable does not need to be mutable --> halo2_proofs/src/plonk.rs:178:13 | 178 | let mut vk = Self { | ----^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
unused variable: `advice_column`: halo2_proofs/src/plonk/prover.rs#L267
warning: unused variable: `advice_column` --> halo2_proofs/src/plonk/prover.rs:267:28 | 267 | for (column_index, advice_column) in witness.iter().enumerate() { | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_advice_column`
unused variable: `circuit`: halo2_proofs/src/plonk/circuit.rs#L2255
warning: unused variable: `circuit` --> halo2_proofs/src/plonk/circuit.rs:2255:13 | 2255 | fn from(circuit: ConstraintSystemV2Backend<F>) -> Self { | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_circuit` | = note: `#[warn(unused_variables)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: halo2_proofs/tests/frontend_backend_split.rs#L580
warning: this expression creates a reference which is immediately dereferenced by the compiler --> halo2_proofs/tests/frontend_backend_split.rs:580:40 | 580 | let strategy = SingleStrategy::new(&verifier_params); | ^^^^^^^^^^^^^^^^ help: change this to: `verifier_params` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
for loop over a single element: halo2_proofs/tests/frontend_backend_split.rs#L562
warning: for loop over a single element --> halo2_proofs/tests/frontend_backend_split.rs:562:5 | 562 | / for phase in [0] { 563 | | println!("DBG phase {}", phase); 564 | | let witness = witness_calc.calc(phase, &challenges).unwrap(); 565 | | // println!("DBG witness: {:?}", witness); 566 | | challenges = prover.commit_phase(phase, vec![witness]).unwrap(); 567 | | // println!("DBG challenges {:?}", challenges); 568 | | } | |_____^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_element_loop = note: `-W clippy::single-element-loop` implied by `-W clippy::all` help: try | 562 ~ { 563 + let phase = 0; 564 + println!("DBG phase {}", phase); 565 + let witness = witness_calc.calc(phase, &challenges).unwrap(); 566 + // println!("DBG witness: {:?}", witness); 567 + challenges = prover.commit_phase(phase, vec![witness]).unwrap(); 568 + // println!("DBG challenges {:?}", challenges); 569 + } |
this expression creates a reference which is immediately dereferenced by the compiler: halo2_proofs/tests/frontend_backend_split.rs#L513
warning: this expression creates a reference which is immediately dereferenced by the compiler --> halo2_proofs/tests/frontend_backend_split.rs:513:40 | 513 | let strategy = SingleStrategy::new(&verifier_params); | ^^^^^^^^^^^^^^^^ help: change this to: `verifier_params` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `-W clippy::needless-borrow` implied by `-W clippy::all`
redundant clone: halo2_proofs/tests/frontend_backend_split.rs#L498
warning: redundant clone --> halo2_proofs/tests/frontend_backend_split.rs:498:18 | 498 | &[circuit.clone()], | ^^^^^^^^ help: remove this | note: this value is dropped without further use --> halo2_proofs/tests/frontend_backend_split.rs:498:11 | 498 | &[circuit.clone()], | ^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_clone = note: `-W clippy::redundant-clone` implied by `-W clippy::all`
using `clone` on type `halo2_proofs::plonk::Selector` which implements the `Copy` trait: halo2_proofs/tests/frontend_backend_split.rs#L154
warning: using `clone` on type `halo2_proofs::plonk::Selector` which implements the `Copy` trait --> halo2_proofs/tests/frontend_backend_split.rs:154:26 | 154 | let s_instance = s_gate.clone(); | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `s_gate` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `halo2_proofs::plonk::Column<halo2_proofs::plonk::Advice>` which implements the `Copy` trait: halo2_proofs/tests/frontend_backend_split.rs#L150
warning: using `clone` on type `halo2_proofs::plonk::Column<halo2_proofs::plonk::Advice>` which implements the `Copy` trait --> halo2_proofs/tests/frontend_backend_split.rs:150:17 | 150 | let e = c.clone(); | ^^^^^^^^^ help: try removing the `clone` call: `c` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `halo2_proofs::plonk::Selector` which implements the `Copy` trait: halo2_proofs/tests/frontend_backend_split.rs#L148
warning: using `clone` on type `halo2_proofs::plonk::Selector` which implements the `Copy` trait --> halo2_proofs/tests/frontend_backend_split.rs:148:21 | 148 | let s_rlc = s_gate.clone(); | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `s_gate` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy = note: `-W clippy::clone-on-copy` implied by `-W clippy::all`
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/tests/frontend_backend_split.rs#L65
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/tests/frontend_backend_split.rs:65:10 | 65 | ) -> Result<(AssignedCell<F, F>, [AssignedCell<F, F>; 4]), Error> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity = note: `-W clippy::type-complexity` implied by `-W clippy::all`
fields `s_rlc`, `e` and `instance` are never read: halo2_proofs/tests/frontend_backend_split.rs#L49
warning: fields `s_rlc`, `e` and `instance` are never read --> halo2_proofs/tests/frontend_backend_split.rs:49:5 | 27 | struct MyCircuitConfig { | --------------- fields in this struct ... 49 | s_rlc: Selector, | ^^^^^ 50 | e: Column<Advice>, | ^ ... 55 | instance: Column<Instance>, | ^^^^^^^^ | = note: `MyCircuitConfig` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` on by default
variable does not need to be mutable: halo2_proofs/tests/frontend_backend_split.rs#L569
warning: variable does not need to be mutable --> halo2_proofs/tests/frontend_backend_split.rs:569:9 | 569 | let mut transcript = prover.create_proof().unwrap(); | ----^^^^^^^^^^ | | | help: remove this `mut`
variable does not need to be mutable: halo2_proofs/tests/frontend_backend_split.rs#L550
warning: variable does not need to be mutable --> halo2_proofs/tests/frontend_backend_split.rs:550:9 | 550 | let mut transcript = Blake2bWrite::<_, G1Affine, Challenge255<_>>::init(vec![]); | ----^^^^^^^^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
unused variable: `instance`: halo2_proofs/tests/frontend_backend_split.rs#L428
warning: unused variable: `instance` --> halo2_proofs/tests/frontend_backend_split.rs:428:29 | 428 | for (i, instance) in instance_copy.iter().enumerate() { | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_instance`
unused variable: `i`: halo2_proofs/tests/frontend_backend_split.rs#L428
warning: unused variable: `i` --> halo2_proofs/tests/frontend_backend_split.rs:428:26 | 428 | for (i, instance) in instance_copy.iter().enumerate() { | ^ help: if this is intentional, prefix it with an underscore: `_i`
unused variable: `abcd3`: halo2_proofs/tests/frontend_backend_split.rs#L309
warning: unused variable: `abcd3` --> halo2_proofs/tests/frontend_backend_split.rs:309:25 | 309 | let (_, abcd3) = config | ^^^^^ help: if this is intentional, prefix it with an underscore: `_abcd3`
unused variable: `abcd2`: halo2_proofs/tests/frontend_backend_split.rs#L305
warning: unused variable: `abcd2` --> halo2_proofs/tests/frontend_backend_split.rs:305:25 | 305 | let (_, abcd2) = config | ^^^^^ help: if this is intentional, prefix it with an underscore: `_abcd2`
unused variable: `abcd1`: halo2_proofs/tests/frontend_backend_split.rs#L301
warning: unused variable: `abcd1` --> halo2_proofs/tests/frontend_backend_split.rs:301:25 | 301 | let (_, abcd1) = config | ^^^^^ help: if this is intentional, prefix it with an underscore: `_abcd1`
unused variable: `abcd3`: halo2_proofs/tests/frontend_backend_split.rs#L291
warning: unused variable: `abcd3` --> halo2_proofs/tests/frontend_backend_split.rs:291:25 | 291 | let (_, abcd3) = config | ^^^^^ help: if this is intentional, prefix it with an underscore: `_abcd3`
unused variable: `one`: halo2_proofs/tests/frontend_backend_split.rs#L158
warning: unused variable: `one` --> halo2_proofs/tests/frontend_backend_split.rs:158:13 | 158 | let one = Expression::Constant(F::ONE); | ^^^ help: if this is intentional, prefix it with an underscore: `_one` | = note: `#[warn(unused_variables)]` on by default
unused import: `EncodedChallenge`: halo2_proofs/tests/frontend_backend_split.rs#L19
warning: unused import: `EncodedChallenge` --> halo2_proofs/tests/frontend_backend_split.rs:19:46 | 19 | Blake2bRead, Blake2bWrite, Challenge255, EncodedChallenge, TranscriptReadBuffer, | ^^^^^^^^^^^^^^^^
unused import: `halo2_proofs::poly::VerificationStrategy`: halo2_proofs/tests/frontend_backend_split.rs#L17
warning: unused import: `halo2_proofs::poly::VerificationStrategy` --> halo2_proofs/tests/frontend_backend_split.rs:17:5 | 17 | use halo2_proofs::poly::VerificationStrategy; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
unused import: `Verifier`: halo2_proofs/tests/frontend_backend_split.rs#L15
warning: unused import: `Verifier` --> halo2_proofs/tests/frontend_backend_split.rs:15:78 | 15 | use halo2_proofs::poly::commitment::{CommitmentScheme, ParamsProver, Prover, Verifier}; | ^^^^^^^^
unused import: `Prover`: halo2_proofs/tests/frontend_backend_split.rs#L15
warning: unused import: `Prover` --> halo2_proofs/tests/frontend_backend_split.rs:15:70 | 15 | use halo2_proofs::poly::commitment::{CommitmentScheme, ParamsProver, Prover, Verifier}; | ^^^^^^
unused import: `ParamsVerifierKZG`: halo2_proofs/tests/frontend_backend_split.rs#L443
warning: unused import: `ParamsVerifierKZG` --> halo2_proofs/tests/frontend_backend_split.rs:443:75 | 443 | use halo2_proofs::poly::kzg::commitment::{KZGCommitmentScheme, ParamsKZG, ParamsVerifierKZG}; | ^^^^^^^^^^^^^^^^^
unused import: `std::marker::PhantomData`: halo2_proofs/tests/frontend_backend_split.rs#L24
warning: unused import: `std::marker::PhantomData` --> halo2_proofs/tests/frontend_backend_split.rs:24:5 | 24 | use std::marker::PhantomData; | ^^^^^^^^^^^^^^^^^^^^^^^^
unused imports: `OsRng`, `RngCore`: halo2_proofs/tests/frontend_backend_split.rs#L22
warning: unused imports: `OsRng`, `RngCore` --> halo2_proofs/tests/frontend_backend_split.rs:22:17 | 22 | use rand_core::{OsRng, RngCore}; | ^^^^^ ^^^^^^^
unused import: `CommitmentScheme`: halo2_proofs/tests/frontend_backend_split.rs#L15
warning: unused import: `CommitmentScheme` --> halo2_proofs/tests/frontend_backend_split.rs:15:38 | 15 | use halo2_proofs::poly::commitment::{CommitmentScheme, ParamsProver, Prover, Verifier}; | ^^^^^^^^^^^^^^^^
unused imports: `Assigned`, `Challenge`, `CompiledCircuitV2`, `ConstraintSystemV2Backend`, `FirstPhase`, `ProvingKey`, `SecondPhase`, `TableColumn`, `VerifyingKey`: halo2_proofs/tests/frontend_backend_split.rs#L11
warning: unused imports: `Assigned`, `Challenge`, `CompiledCircuitV2`, `ConstraintSystemV2Backend`, `FirstPhase`, `ProvingKey`, `SecondPhase`, `TableColumn`, `VerifyingKey` --> halo2_proofs/tests/frontend_backend_split.rs:11:30 | 11 | verify_proof_v2, Advice, Assigned, Challenge, Circuit, Column, CompiledCircuitV2, | ^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^^^ 12 | ConstraintSystem, ConstraintSystemV2Backend, Error, Expression, FirstPhase, Fixed, Instance, | ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ 13 | ProverV2, ProvingKey, SecondPhase, Selector, TableColumn, VerifyingKey, WitnessCalculator, | ^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^
unused import: `Cell`: halo2_proofs/tests/frontend_backend_split.rs#L7
warning: unused import: `Cell` --> halo2_proofs/tests/frontend_backend_split.rs:7:43 | 7 | use halo2_proofs::circuit::{AssignedCell, Cell, Layouter, Region, SimpleFloorPlanner, Value}; | ^^^^
unused imports: `FromUniformBytes`, `WithSmallOrderMulGroup`: halo2_proofs/tests/frontend_backend_split.rs#L5
warning: unused imports: `FromUniformBytes`, `WithSmallOrderMulGroup` --> halo2_proofs/tests/frontend_backend_split.rs:5:10 | 5 | use ff::{FromUniformBytes, WithSmallOrderMulGroup}; | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
unused import: `assert_matches::assert_matches`: halo2_proofs/tests/frontend_backend_split.rs#L4
warning: unused import: `assert_matches::assert_matches` --> halo2_proofs/tests/frontend_backend_split.rs:4:5 | 4 | use assert_matches::assert_matches; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
unused import: `ConstraintSystemV2Backend`: halo2_proofs/src/plonk/evaluation.rs#L10
warning: unused import: `ConstraintSystemV2Backend` --> halo2_proofs/src/plonk/evaluation.rs:10:40 | 10 | use super::{shuffle, ConstraintSystem, ConstraintSystemV2Backend, Expression}; | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: halo2_proofs/src/plonk/prover.rs#L390
warning: this expression creates a reference which is immediately dereferenced by the compiler --> halo2_proofs/src/plonk/prover.rs:390:29 | 390 | ... &domain, | ^^^^^^^ help: change this to: `domain` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `-W clippy::needless-borrow` implied by `-W clippy::all`
replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take`: halo2_proofs/src/plonk/prover.rs#L369
warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` --> halo2_proofs/src/plonk/prover.rs:369:22 | 369 | let advice = std::mem::replace(&mut self.advice, Vec::new()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.advice)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default
replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take`: halo2_proofs/src/plonk/prover.rs#L368
warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` --> halo2_proofs/src/plonk/prover.rs:368:24 | 368 | let instance = std::mem::replace(&mut self.instance, Vec::new()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.instance)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default = note: `-W clippy::mem-replace-with-default` implied by `-W clippy::all`
this `if` has identical blocks: halo2_proofs/src/plonk/prover.rs#L268
warning: this `if` has identical blocks --> halo2_proofs/src/plonk/prover.rs:268:55 | 268 | if column_indices.contains(&column_index) { | _______________________________________________________^ 269 | | // TODO: Check that column_index in witness is Some 270 | | // TODO: Check that the column length is `params.n()` 271 | | } else { | |_____________^ | note: same as this --> halo2_proofs/src/plonk/prover.rs:271:20 | 271 | } else { | ____________________^ 272 | | // TODO: Check that column_index in witness is None 273 | | }; | |_____________^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else = note: `-W clippy::if-same-then-else` implied by `-W clippy::all`
unnecessary `if let` since only the `Some` variant of the iterator element is used: halo2_proofs/src/plonk/prover.rs#L253
warning: unnecessary `if let` since only the `Some` variant of the iterator element is used --> halo2_proofs/src/plonk/prover.rs:253:13 | 253 | for witness_column in witness_circuit { | ^ --------------- help: try: `witness_circuit.iter().flatten()` | _____________| | | 254 | | if let Some(witness_column) = witness_column { 255 | | if witness_column.len() != self.params.n() as usize { 256 | | return Err(Error::Other(format!( ... | 262 | | } 263 | | } | |_____________^ | help: ...and remove the `if let` statement in the for loop --> halo2_proofs/src/plonk/prover.rs:254:17 | 254 | / if let Some(witness_column) = witness_column { 255 | | if witness_column.len() != self.params.n() as usize { 256 | | return Err(Error::Other(format!( 257 | | "unexpected length in witness_column. Got {}, expected {}", ... | 261 | | } 262 | | } | |_________________^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten = note: `-W clippy::manual-flatten` implied by `-W clippy::all`
useless use of `format!`: halo2_proofs/src/plonk/prover.rs#L243
warning: useless use of `format!` --> halo2_proofs/src/plonk/prover.rs:243:37 | 243 | return Err(Error::Other(format!("witness.len() != advice.len()"))); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"witness.len() != advice.len()".to_string()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format = note: `-W clippy::useless-format` implied by `-W clippy::all`
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/src/plonk/prover.rs#L203
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/src/plonk/prover.rs:203:18 | 203 | witness: Vec<Vec<Option<Polynomial<Assigned<Scheme::Scalar>, LagrangeCoeff>>>>, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
returning the result of a `let` binding from a block: halo2_proofs/src/plonk/circuit.rs#L2197
warning: returning the result of a `let` binding from a block --> halo2_proofs/src/plonk/circuit.rs:2197:9 | 2190 | / let queries = Queries { 2191 | | advice: queries.advice.into_iter().collect(), 2192 | | instance: queries.instance.into_iter().collect(), 2193 | | fixed: queries.fixed.into_iter().collect(), 2194 | | num_advice_queries, 2195 | | }; | |__________- unnecessary `let` binding 2196 | // println!("DBG collected queries\n{:#?}", queries); 2197 | queries | ^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return = note: `-W clippy::let-and-return` implied by `-W clippy::all` help: return the expression directly | 2190 ~ 2191 | // println!("DBG collected queries\n{:#?}", queries); 2192 ~ Queries { 2193 + advice: queries.advice.into_iter().collect(), 2194 + instance: queries.instance.into_iter().collect(), 2195 + fixed: queries.fixed.into_iter().collect(), 2196 + num_advice_queries, 2197 + } |
casting to the same type is unnecessary (`usize` -> `usize`): halo2_proofs/src/plonk/circuit.rs#L1984
warning: casting to the same type is unnecessary (`usize` -> `usize`) --> halo2_proofs/src/plonk/circuit.rs:1984:25 | 1984 | usable_rows: 0..n as usize - (cs.blinding_factors() + 1), | ^^^^^^^^^^ help: try: `n` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast
casting to the same type is unnecessary (`usize` -> `usize`): halo2_proofs/src/plonk/circuit.rs#L1983
warning: casting to the same type is unnecessary (`usize` -> `usize`) --> halo2_proofs/src/plonk/circuit.rs:1983:37 | 1983 | selectors: vec![vec![false; n as usize]; cs.num_selectors], | ^^^^^^^^^^ help: try: `n` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast = note: `-W clippy::unnecessary-cast` implied by `-W clippy::all`
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/src/plonk/circuit.rs#L1959
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/src/plonk/circuit.rs:1959:6 | 1959 | ) -> Result< | ______^ 1960 | | ( 1961 | | CompiledCircuitV2<F>, 1962 | | ConcreteCircuit::Config, ... | 1965 | | Error, 1966 | | > { | |_^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
very complex type used. Consider factoring parts into `type` definitions: halo2_proofs/src/plonk/circuit.rs#L1887
warning: very complex type used. Consider factoring parts into `type` definitions --> halo2_proofs/src/plonk/circuit.rs:1887:10 | 1887 | ) -> Result<Vec<Option<Polynomial<Assigned<F>, LagrangeCoeff>>>, Error> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity = note: `-W clippy::type-complexity` implied by `-W clippy::all`
an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true: halo2_proofs/src/plonk/circuit.rs#L892
warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true --> halo2_proofs/src/plonk/circuit.rs:892:1 | 892 | impl<F> Into<ExpressionMid<F>> for Expression<F> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: replace the `Into` implentation with `From<plonk::circuit::Expression<F>>` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into = note: `-W clippy::from-over-into` implied by `-W clippy::all`
fields `name`, `input_expressions` and `shuffle_expressions` are never read: halo2_proofs/src/plonk/shuffle.rs#L10
warning: fields `name`, `input_expressions` and `shuffle_expressions` are never read --> halo2_proofs/src/plonk/shuffle.rs:10:16 | 9 | pub struct ArgumentV2<F: Field> { | ---------- fields in this struct 10 | pub(crate) name: String, | ^^^^ 11 | pub(crate) input_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^ 12 | pub(crate) shuffle_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^^^ | = note: `ArgumentV2` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
fields `name`, `input_expressions` and `table_expressions` are never read: halo2_proofs/src/plonk/lookup.rs#L10
warning: fields `name`, `input_expressions` and `table_expressions` are never read --> halo2_proofs/src/plonk/lookup.rs:10:16 | 9 | pub struct ArgumentV2<F: Field> { | ---------- fields in this struct 10 | pub(crate) name: String, | ^^^^ 11 | pub(crate) input_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^ 12 | pub(crate) table_expressions: Vec<ExpressionMid<F>>, | ^^^^^^^^^^^^^^^^^ | = note: `ArgumentV2` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
associated function `collect_queries` is never used: halo2_proofs/src/plonk/circuit.rs#L2141
warning: associated function `collect_queries` is never used --> halo2_proofs/src/plonk/circuit.rs:2141:19 | 2141 | pub(crate) fn collect_queries(&self) -> Queries { | ^^^^^^^^^^^^^^^
associated function `phases` is never used: halo2_proofs/src/plonk/circuit.rs#L2131
warning: associated function `phases` is never used --> halo2_proofs/src/plonk/circuit.rs:2131:19 | 2131 | pub(crate) fn phases(&self) -> Vec<u8> { | ^^^^^^
associated function `new` is never used: halo2_proofs/src/plonk/circuit.rs#L41
warning: associated function `new` is never used --> halo2_proofs/src/plonk/circuit.rs:41:19 | 41 | pub(crate) fn new(index: usize, column_type: C) -> Self { | ^^^
multiple fields are never read: halo2_proofs/src/plonk/circuit.rs#L1803
warning: multiple fields are never read --> halo2_proofs/src/plonk/circuit.rs:1803:16 | 1802 | pub struct ConstraintSystemV2Backend<F: Field> { | ------------------------- fields in this struct 1803 | pub(crate) num_fixed_columns: usize, | ^^^^^^^^^^^^^^^^^ 1804 | pub(crate) num_advice_columns: usize, | ^^^^^^^^^^^^^^^^^^ 1805 | pub(crate) num_instance_columns: usize, | ^^^^^^^^^^^^^^^^^^^^ 1806 | // pub(crate) num_selectors: usize, 1807 | pub(crate) num_challenges: usize, | ^^^^^^^^^^^^^^ ... 1810 | pub(crate) unblinded_advice_columns: Vec<usize>, | ^^^^^^^^^^^^^^^^^^^^^^^^ ... 1813 | pub(crate) advice_column_phase: Vec<u8>, | ^^^^^^^^^^^^^^^^^^^ 1814 | /// Contains the phase for each challenge. Should have same length as num_challenges. 1815 | pub(crate) challenge_phase: Vec<u8>, | ^^^^^^^^^^^^^^^ ... 1821 | pub(crate) gates: Vec<GateV2Backend<F>>, | ^^^^^ ... 1831 | pub(crate) lookups: Vec<lookup::ArgumentV2<F>>, | ^^^^^^^ ... 1835 | pub(crate) shuffles: Vec<shuffle::ArgumentV2<F>>, | ^^^^^^^^ ... 1838 | pub(crate) general_column_annotations: HashMap<metadata::Column, String>, | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `ConstraintSystemV2Backend` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
function `collect_queries` is never used: halo2_proofs/src/plonk/circuit.rs#L1713
warning: function `collect_queries` is never used --> halo2_proofs/src/plonk/circuit.rs:1713:4 | 1713 | fn collect_queries<F: Field>(expr: &ExpressionMid<F>, queries: &mut QueriesSet) { | ^^^^^^^^^^^^^^^
struct `QueriesSet` is never constructed: halo2_proofs/src/plonk/circuit.rs#L1707
warning: struct `QueriesSet` is never constructed --> halo2_proofs/src/plonk/circuit.rs:1707:8 | 1707 | struct QueriesSet { | ^^^^^^^^^^
associated function `get_any_query_index` is never used: halo2_proofs/src/plonk.rs#L133
warning: associated function `get_any_query_index` is never used --> halo2_proofs/src/plonk.rs:133:19 | 133 | pub(crate) fn get_any_query_index(&self, column: Column<Any>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^
associated function `get_instance_query_index` is never used: halo2_proofs/src/plonk.rs#L123
warning: associated function `get_instance_query_index` is never used --> halo2_proofs/src/plonk.rs:123:19 | 123 | pub(crate) fn get_instance_query_index(&self, column: Column<Instance>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^^^^^^
associated function `get_fixed_query_index` is never used: halo2_proofs/src/plonk.rs#L113
warning: associated function `get_fixed_query_index` is never used --> halo2_proofs/src/plonk.rs:113:19 | 113 | pub(crate) fn get_fixed_query_index(&self, column: Column<Fixed>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^^^
associated function `get_advice_query_index` is never used: halo2_proofs/src/plonk.rs#L103
warning: associated function `get_advice_query_index` is never used --> halo2_proofs/src/plonk.rs:103:19 | 103 | pub(crate) fn get_advice_query_index(&self, column: Column<Advice>, at: Rotation) -> usize { | ^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default
variable does not need to be mutable: halo2_proofs/src/plonk.rs#L408
warning: variable does not need to be mutable --> halo2_proofs/src/plonk.rs:408:13 | 408 | let mut vk = Self { | ----^^ | | | help: remove this `mut`
variable does not need to be mutable: halo2_proofs/src/plonk.rs#L178
warning: variable does not need to be mutable --> halo2_proofs/src/plonk.rs:178:13 | 178 | let mut vk = Self { | ----^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
unused variable: `advice_column`: halo2_proofs/src/plonk/prover.rs#L267
warning: unused variable: `advice_column` --> halo2_proofs/src/plonk/prover.rs:267:28 | 267 | for (column_index, advice_column) in witness.iter().enumerate() { | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_advice_column`
unused variable: `circuit`: halo2_proofs/src/plonk/circuit.rs#L2255
warning: unused variable: `circuit` --> halo2_proofs/src/plonk/circuit.rs:2255:13 | 2255 | fn from(circuit: ConstraintSystemV2Backend<F>) -> Self { | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_circuit` | = note: `#[warn(unused_variables)]` on by default
unused import: `ConstraintSystemV2Backend`: halo2_proofs/src/plonk/evaluation.rs#L10
warning: unused import: `ConstraintSystemV2Backend` --> halo2_proofs/src/plonk/evaluation.rs:10:40 | 10 | use super::{shuffle, ConstraintSystem, ConstraintSystemV2Backend, Expression}; | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
Clippy (beta)
The following actions uses node12 which is deprecated and will be forced to run on node16: actions-rs/toolchain@v1, actions-rs/clippy-check@v1. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/
Clippy (beta)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
Clippy (beta)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
Clippy (beta)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
Clippy (beta)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/