Skip to content

Devops

Devops #11

Triggered via pull request May 16, 2024 06:20
@juchiastjuchiast
synchronize #92
devops
Status Success
Total duration 5m 37s
Artifacts

docker.yaml

on: pull_request
Build docker image
2m 31s
Build docker image
Fit to window
Zoom out
Zoom in

Annotations

40 warnings
unneeded `return` statement: crates/flow-server/src/flow_logs.rs#L167
warning: unneeded `return` statement --> crates/flow-server/src/flow_logs.rs:167:21 | 167 | None => return, | ^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return = note: `#[warn(clippy::needless_return)]` on by default help: replace `return` with a unit value | 167 | None => (), | ~~
called `.as_ref().map(|s| s.as_str())` on an `Option` value: crates/flow-server/src/db_worker/mod.rs#L255
warning: called `.as_ref().map(|s| s.as_str())` on an `Option` value --> crates/flow-server/src/db_worker/mod.rs:255:17 | 255 | / msg.filter 256 | | .as_ref() 257 | | .map(|s| s.as_str()) | |________________________________________^ help: consider using as_deref: `msg.filter.as_deref()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref = note: `#[warn(clippy::option_as_ref_deref)]` on by default
unneeded `return` statement: crates/flow-server/src/flow_logs.rs#L167
warning: unneeded `return` statement --> crates/flow-server/src/flow_logs.rs:167:21 | 167 | None => return, | ^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return = note: `#[warn(clippy::needless_return)]` on by default help: replace `return` with a unit value | 167 | None => (), | ~~
called `.as_ref().map(|s| s.as_str())` on an `Option` value: crates/flow-server/src/db_worker/mod.rs#L255
warning: called `.as_ref().map(|s| s.as_str())` on an `Option` value --> crates/flow-server/src/db_worker/mod.rs:255:17 | 255 | / msg.filter 256 | | .as_ref() 257 | | .map(|s| s.as_str()) | |________________________________________^ help: consider using as_deref: `msg.filter.as_deref()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref = note: `#[warn(clippy::option_as_ref_deref)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: crates/flow/src/flow_graph.rs#L1159
warning: this expression creates a reference which is immediately dereferenced by the compiler --> crates/flow/src/flow_graph.rs:1159:53 | 1159 | n.command.input_is_required(&input_name).unwrap_or(true); | ^^^^^^^^^^^ help: change this to: `input_name` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression creates a reference which is immediately dereferenced by the compiler: crates/flow/src/flow_graph.rs#L648
warning: this expression creates a reference which is immediately dereferenced by the compiler --> crates/flow/src/flow_graph.rs:648:43 | 648 | tracker = tracker.zip(&edge_tracker); | ^^^^^^^^^^^^^ help: change this to: `edge_tracker` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`: crates/flow/src/flow_graph.rs#L642
warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` --> crates/flow/src/flow_graph.rs:642:13 | 642 | / match w.values.front() { 643 | | Some(EdgeValue { 644 | | value: Some(value), 645 | | tracker: edge_tracker, ... | 654 | | _ => {} 655 | | } | |_____________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match = note: `#[warn(clippy::single_match)]` on by default help: try | 642 ~ if let Some(EdgeValue { 643 + value: Some(value), 644 + tracker: edge_tracker, 645 + }) = w.values.front() { 646 + let is_from_array = edge_tracker.is_array(); 647 + tracker = tracker.zip(&edge_tracker); 648 + values.insert(w.to.clone(), value.clone()); 649 + if is_from_array { 650 + w.values.pop_front(); 651 + } 652 + } |
this `else` branch is empty: crates/flow/src/flow_graph.rs#L1608
warning: this `else` branch is empty --> crates/flow/src/flow_graph.rs:1608:15 | 1608 | } else { | _______________^ 1609 | | } | |_____________^ help: you can remove it | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_else = note: `#[warn(clippy::needless_else)]` on by default
this `else { if .. }` block can be collapsed: crates/flow/src/flow_graph.rs#L1603
warning: this `else { if .. }` block can be collapsed --> crates/flow/src/flow_graph.rs:1603:16 | 1603 | } else { | ________________^ 1604 | | if e.weight().is_required_input { 1605 | | let source_finished = finished_recursive(f, s, e.source(), visited); 1606 | | all_sources_not_finished &= !source_finished; ... | 1609 | | } 1610 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_else_if = note: `#[warn(clippy::collapsible_else_if)]` on by default help: collapse nested if block | 1603 ~ } else if e.weight().is_required_input { 1604 + let source_finished = finished_recursive(f, s, e.source(), visited); 1605 + all_sources_not_finished &= !source_finished; 1606 + filled = false; 1607 + } else { 1608 + } |
direct implementation of `ToString`: crates/db/src/config.rs#L18
warning: direct implementation of `ToString` --> crates/db/src/config.rs:18:1 | 18 | / impl ToString for DbConfig { 19 | | fn to_string(&self) -> String { 20 | | format!( 21 | | "host={} port={} user={} password={} dbname={}", ... | 24 | | } 25 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl = note: `#[warn(clippy::to_string_trait_impl)]` on by default
direct implementation of `ToString`: crates/db/src/config.rs#L18
warning: direct implementation of `ToString` --> crates/db/src/config.rs:18:1 | 18 | / impl ToString for DbConfig { 19 | | fn to_string(&self) -> String { 20 | | format!( 21 | | "host={} port={} user={} password={} dbname={}", ... | 24 | | } 25 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl = note: `#[warn(clippy::to_string_trait_impl)]` on by default
module has the same name as its containing module: crates/cmds-std/src/supabase/mod.rs#L1
warning: module has the same name as its containing module --> crates/cmds-std/src/supabase/mod.rs:1:1 | 1 | pub mod supabase; | ^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception = note: `#[warn(clippy::module_inception)]` on by default
module has the same name as its containing module: crates/cmds-std/src/supabase/mod.rs#L1
warning: module has the same name as its containing module --> crates/cmds-std/src/supabase/mod.rs:1:1 | 1 | pub mod supabase; | ^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception = note: `#[warn(clippy::module_inception)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: crates/flow/src/flow_graph.rs#L1159
warning: this expression creates a reference which is immediately dereferenced by the compiler --> crates/flow/src/flow_graph.rs:1159:53 | 1159 | n.command.input_is_required(&input_name).unwrap_or(true); | ^^^^^^^^^^^ help: change this to: `input_name` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression creates a reference which is immediately dereferenced by the compiler: crates/flow/src/flow_graph.rs#L648
warning: this expression creates a reference which is immediately dereferenced by the compiler --> crates/flow/src/flow_graph.rs:648:43 | 648 | tracker = tracker.zip(&edge_tracker); | ^^^^^^^^^^^^^ help: change this to: `edge_tracker` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let`: crates/flow/src/flow_graph.rs#L642
warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` --> crates/flow/src/flow_graph.rs:642:13 | 642 | / match w.values.front() { 643 | | Some(EdgeValue { 644 | | value: Some(value), 645 | | tracker: edge_tracker, ... | 654 | | _ => {} 655 | | } | |_____________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match = note: `#[warn(clippy::single_match)]` on by default help: try | 642 ~ if let Some(EdgeValue { 643 + value: Some(value), 644 + tracker: edge_tracker, 645 + }) = w.values.front() { 646 + let is_from_array = edge_tracker.is_array(); 647 + tracker = tracker.zip(&edge_tracker); 648 + values.insert(w.to.clone(), value.clone()); 649 + if is_from_array { 650 + w.values.pop_front(); 651 + } 652 + } |
this `else` branch is empty: crates/flow/src/flow_graph.rs#L1608
warning: this `else` branch is empty --> crates/flow/src/flow_graph.rs:1608:15 | 1608 | } else { | _______________^ 1609 | | } | |_____________^ help: you can remove it | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_else = note: `#[warn(clippy::needless_else)]` on by default
this `else { if .. }` block can be collapsed: crates/flow/src/flow_graph.rs#L1603
warning: this `else { if .. }` block can be collapsed --> crates/flow/src/flow_graph.rs:1603:16 | 1603 | } else { | ________________^ 1604 | | if e.weight().is_required_input { 1605 | | let source_finished = finished_recursive(f, s, e.source(), visited); 1606 | | all_sources_not_finished &= !source_finished; ... | 1609 | | } 1610 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_else_if = note: `#[warn(clippy::collapsible_else_if)]` on by default help: collapse nested if block | 1603 ~ } else if e.weight().is_required_input { 1604 + let source_finished = finished_recursive(f, s, e.source(), visited); 1605 + all_sources_not_finished &= !source_finished; 1606 + filled = false; 1607 + } else { 1608 + } |
this expression creates a reference which is immediately dereferenced by the compiler: lib/flow-lib/src/solana.rs#L776
warning: this expression creates a reference which is immediately dereferenced by the compiler --> lib/flow-lib/src/solana.rs:776:13 | 776 | &tx.get_recent_blockhash(), | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tx.get_recent_blockhash()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
this expression creates a reference which is immediately dereferenced by the compiler: lib/flow-lib/src/solana.rs#L776
warning: this expression creates a reference which is immediately dereferenced by the compiler --> lib/flow-lib/src/solana.rs:776:13 | 776 | &tx.get_recent_blockhash(), | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tx.get_recent_blockhash()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L453
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:453:9 | 453 | / match self.fx0 { 454 | | Fx0::Wood => { 455 | | self.wood_variation = Some(WoodVariation::choose(rng)); 456 | | } 457 | | _ => {} 458 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match help: try | 453 ~ if self.fx0 == Fx0::Wood { 454 + self.wood_variation = Some(WoodVariation::choose(rng)); 455 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L443
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:443:9 | 443 | / match self.fx0 { 444 | | Fx0::Marble => { 445 | | self.marble_variation = Some(MarbleVariation::choose(rng)); 446 | | } 447 | | _ => {} 448 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match help: try | 443 ~ if self.fx0 == Fx0::Marble { 444 + self.marble_variation = Some(MarbleVariation::choose(rng)); 445 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L433
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:433:9 | 433 | / match self.fx0 { 434 | | Fx0::No => { 435 | | self.body_material_variation = Some(BodyMaterialVariations::choose(rng)); 436 | | } 437 | | _ => {} 438 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match help: try | 433 ~ if self.fx0 == Fx0::No { 434 + self.body_material_variation = Some(BodyMaterialVariations::choose(rng)); 435 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L386
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:386:9 | 386 | / match self.fx2 { 387 | | Fx2::Underwater => { 388 | | let jellyfish = FxJellyfish::choose(rng); 389 | | self.fx_jellifish = jellyfish; ... | 401 | | _ => {} 402 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match = note: `#[warn(clippy::single_match)]` on by default help: try | 386 ~ if self.fx2 == Fx2::Underwater { 387 + let jellyfish = FxJellyfish::choose(rng); 388 + self.fx_jellifish = jellyfish; 389 + 390 + self.underwater_fog_amount = rng.gen::<f64>() * 30.0; 391 + self.background_underwater_color_hue = 38.8; 392 + 393 + let env_light = if self.fx0 == Fx0::Hologram { 394 + EnvLight::UnderwaterHologram 395 + } else { 396 + EnvLight::Underwater 397 + }; 398 + self.env_light = env_light; 399 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L453
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:453:9 | 453 | / match self.fx0 { 454 | | Fx0::Wood => { 455 | | self.wood_variation = Some(WoodVariation::choose(rng)); 456 | | } 457 | | _ => {} 458 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match help: try | 453 ~ if self.fx0 == Fx0::Wood { 454 + self.wood_variation = Some(WoodVariation::choose(rng)); 455 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L443
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:443:9 | 443 | / match self.fx0 { 444 | | Fx0::Marble => { 445 | | self.marble_variation = Some(MarbleVariation::choose(rng)); 446 | | } 447 | | _ => {} 448 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match help: try | 443 ~ if self.fx0 == Fx0::Marble { 444 + self.marble_variation = Some(MarbleVariation::choose(rng)); 445 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L433
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:433:9 | 433 | / match self.fx0 { 434 | | Fx0::No => { 435 | | self.body_material_variation = Some(BodyMaterialVariations::choose(rng)); 436 | | } 437 | | _ => {} 438 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match help: try | 433 ~ if self.fx0 == Fx0::No { 434 + self.body_material_variation = Some(BodyMaterialVariations::choose(rng)); 435 + } |
you seem to be trying to use `match` for an equality check. Consider using `if`: crates/pdg-common/src/nft_metadata/generate.rs#L386
warning: you seem to be trying to use `match` for an equality check. Consider using `if` --> crates/pdg-common/src/nft_metadata/generate.rs:386:9 | 386 | / match self.fx2 { 387 | | Fx2::Underwater => { 388 | | let jellyfish = FxJellyfish::choose(rng); 389 | | self.fx_jellifish = jellyfish; ... | 401 | | _ => {} 402 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match = note: `#[warn(clippy::single_match)]` on by default help: try | 386 ~ if self.fx2 == Fx2::Underwater { 387 + let jellyfish = FxJellyfish::choose(rng); 388 + self.fx_jellifish = jellyfish; 389 + 390 + self.underwater_fog_amount = rng.gen::<f64>() * 30.0; 391 + self.background_underwater_color_hue = 38.8; 392 + 393 + let env_light = if self.fx0 == Fx0::Hologram { 394 + EnvLight::UnderwaterHologram 395 + } else { 396 + EnvLight::Underwater 397 + }; 398 + self.env_light = env_light; 399 + } |
this `impl` can be derived: crates/srpc/src/lib.rs#L77
warning: this `impl` can be derived --> crates/srpc/src/lib.rs:77:1 | 77 | / impl Default for Service { 78 | | fn default() -> Self { 79 | | Self { 80 | | svc: None, ... | 83 | | } 84 | | } | |_^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls = note: `#[warn(clippy::derivable_impls)]` on by default = help: remove the manual implementation... help: ...and instead derive it | 72 + #[derive(Default)] 73 | struct Service { |
use of `default` to create a unit struct: crates/srpc/src/lib.rs#L47
warning: use of `default` to create a unit struct --> crates/srpc/src/lib.rs:47:25 | 47 | _phantom: <_>::default(), | ^^^^^^^^^^^^ help: remove this call to `default` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#default_constructed_unit_structs = note: `#[warn(clippy::default_constructed_unit_structs)]` on by default
this `impl` can be derived: crates/srpc/src/lib.rs#L77
warning: this `impl` can be derived --> crates/srpc/src/lib.rs:77:1 | 77 | / impl Default for Service { 78 | | fn default() -> Self { 79 | | Self { 80 | | svc: None, ... | 83 | | } 84 | | } | |_^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls = note: `#[warn(clippy::derivable_impls)]` on by default = help: remove the manual implementation... help: ...and instead derive it | 72 + #[derive(Default)] 73 | struct Service { |
use of `default` to create a unit struct: crates/srpc/src/lib.rs#L47
warning: use of `default` to create a unit struct --> crates/srpc/src/lib.rs:47:25 | 47 | _phantom: <_>::default(), | ^^^^^^^^^^^^ help: remove this call to `default` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#default_constructed_unit_structs = note: `#[warn(clippy::default_constructed_unit_structs)]` on by default
this returns a `Result<_, ()>`: crates/utils/src/address_book.rs#L64
warning: this returns a `Result<_, ()>` --> crates/utils/src/address_book.rs:64:5 | 64 | / pub fn try_start_with_context<A, F>( 65 | | &mut self, 66 | | id: A::ID, 67 | | make_actor: F, 68 | | rt: ArbiterHandle, 69 | | ) -> Result<actix::Addr<A>, ()> | |___________________________________^ | = help: use a custom `Error` type instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_unit_err = note: `#[warn(clippy::result_unit_err)]` on by default
bound is defined in more than one place: lib/flow-value/src/ser/seq.rs#L252
warning: bound is defined in more than one place --> lib/flow-value/src/ser/seq.rs:252:34 | 252 | fn serialize_newtype_variant<T: ?Sized>( | ^ ... 260 | T: serde::Serialize, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations
bound is defined in more than one place: lib/flow-value/src/ser/seq.rs#L241
warning: bound is defined in more than one place --> lib/flow-value/src/ser/seq.rs:241:33 | 241 | fn serialize_newtype_struct<T: ?Sized>( | ^ ... 247 | T: serde::Serialize, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations
bound is defined in more than one place: lib/flow-value/src/ser/seq.rs#L217
warning: bound is defined in more than one place --> lib/flow-value/src/ser/seq.rs:217:23 | 217 | fn serialize_some<T: ?Sized>(self, _value: &T) -> Result<Self::Ok, Self::Error> | ^ 218 | where 219 | T: serde::Serialize, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations = note: `#[warn(clippy::multiple_bound_locations)]` on by default
this returns a `Result<_, ()>`: crates/utils/src/address_book.rs#L64
warning: this returns a `Result<_, ()>` --> crates/utils/src/address_book.rs:64:5 | 64 | / pub fn try_start_with_context<A, F>( 65 | | &mut self, 66 | | id: A::ID, 67 | | make_actor: F, 68 | | rt: ArbiterHandle, 69 | | ) -> Result<actix::Addr<A>, ()> | |___________________________________^ | = help: use a custom `Error` type instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_unit_err = note: `#[warn(clippy::result_unit_err)]` on by default
bound is defined in more than one place: lib/flow-value/src/ser/seq.rs#L252
warning: bound is defined in more than one place --> lib/flow-value/src/ser/seq.rs:252:34 | 252 | fn serialize_newtype_variant<T: ?Sized>( | ^ ... 260 | T: serde::Serialize, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations
bound is defined in more than one place: lib/flow-value/src/ser/seq.rs#L241
warning: bound is defined in more than one place --> lib/flow-value/src/ser/seq.rs:241:33 | 241 | fn serialize_newtype_struct<T: ?Sized>( | ^ ... 247 | T: serde::Serialize, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations
bound is defined in more than one place: lib/flow-value/src/ser/seq.rs#L217
warning: bound is defined in more than one place --> lib/flow-value/src/ser/seq.rs:217:23 | 217 | fn serialize_some<T: ?Sized>(self, _value: &T) -> Result<Self::Ok, Self::Error> | ^ 218 | where 219 | T: serde::Serialize, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations = note: `#[warn(clippy::multiple_bound_locations)]` on by default