[INFO] crate ferrum-router 0.2.1 is already in cache [INFO] extracting crate ferrum-router 0.2.1 into work/ex/clippy-test-run/sources/stable/reg/ferrum-router/0.2.1 [INFO] extracting crate ferrum-router 0.2.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ferrum-router/0.2.1 [INFO] validating manifest of ferrum-router-0.2.1 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of ferrum-router-0.2.1 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing ferrum-router-0.2.1 [INFO] finished frobbing ferrum-router-0.2.1 [INFO] frobbed toml for ferrum-router-0.2.1 written to work/ex/clippy-test-run/sources/stable/reg/ferrum-router/0.2.1/Cargo.toml [INFO] started frobbing ferrum-router-0.2.1 [INFO] finished frobbing ferrum-router-0.2.1 [INFO] frobbed toml for ferrum-router-0.2.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ferrum-router/0.2.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting ferrum-router-0.2.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/ferrum-router/0.2.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] e68647b1eb20d5bd5a47c426ddad2d00ddf0df399bf314e2c562d6b6ecb396a5 [INFO] running `"docker" "start" "-a" "e68647b1eb20d5bd5a47c426ddad2d00ddf0df399bf314e2c562d6b6ecb396a5"` [INFO] [stderr] Checking ferrum-plugin v0.3.0 [INFO] [stderr] Checking ferrum v0.2.1 [INFO] [stderr] Checking ferrum-router v0.2.1 (/opt/crater/workdir) [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/recognizer/mod.rs:104:48 [INFO] [stderr] | [INFO] [stderr] 104 | } else { [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 105 | | if let Some(regex_pattern) = types.get(param_name.as_str()) { [INFO] [stderr] 106 | | regex_pattern.as_ref() [INFO] [stderr] 107 | | } else { [INFO] [stderr] 108 | | Type::STRING_PATTERN [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | }; [INFO] [stderr] | |_________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 104 | } else if let Some(regex_pattern) = types.get(param_name.as_str()) { [INFO] [stderr] 105 | regex_pattern.as_ref() [INFO] [stderr] 106 | } else { [INFO] [stderr] 107 | Type::STRING_PATTERN [INFO] [stderr] 108 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/recognizer/mod.rs:104:48 [INFO] [stderr] | [INFO] [stderr] 104 | } else { [INFO] [stderr] | ________________________________________________^ [INFO] [stderr] 105 | | if let Some(regex_pattern) = types.get(param_name.as_str()) { [INFO] [stderr] 106 | | regex_pattern.as_ref() [INFO] [stderr] 107 | | } else { [INFO] [stderr] 108 | | Type::STRING_PATTERN [INFO] [stderr] 109 | | } [INFO] [stderr] 110 | | }; [INFO] [stderr] | |_________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 104 | } else if let Some(regex_pattern) = types.get(param_name.as_str()) { [INFO] [stderr] 105 | regex_pattern.as_ref() [INFO] [stderr] 106 | } else { [INFO] [stderr] 107 | Type::STRING_PATTERN [INFO] [stderr] 108 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `router::Router` [INFO] [stderr] --> src/router/mod.rs:39:5 [INFO] [stderr] | [INFO] [stderr] 39 | / pub fn new() -> Router { [INFO] [stderr] 40 | | Router { [INFO] [stderr] 41 | | inner: Arc::new(RouterInner { [INFO] [stderr] 42 | | routers: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 32 | impl Default for router::Router { [INFO] [stderr] 33 | fn default() -> Self { [INFO] [stderr] 34 | Self::new() [INFO] [stderr] 35 | } [INFO] [stderr] 36 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/router/mod.rs:94:14 [INFO] [stderr] | [INFO] [stderr] 94 | .or_insert(Vec::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Vec::new)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/router/mod.rs:101:13 [INFO] [stderr] | [INFO] [stderr] 101 | let ref mut route_ids = inner.route_ids; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^------------------- help: try: `let route_ids = &mut inner.route_ids;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/router/mod.rs:208:14 [INFO] [stderr] | [INFO] [stderr] 208 | .or(self.inner.wildcard.recognize(path)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| self.inner.wildcard.recognize(path))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/router/mod.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | self.inner.routers.get(method).map(|recognizers| { [INFO] [stderr] | _____________^ [INFO] [stderr] | |_____________| [INFO] [stderr] | || [INFO] [stderr] 226 | || if let Some(_) = recognizers.recognize(path) { [INFO] [stderr] 227 | || options.push(method.clone()); [INFO] [stderr] 228 | || } [INFO] [stderr] 229 | || }); [INFO] [stderr] | ||______________^- help: try this: `if let Some(recognizers) = self.inner.routers.get(method) { ... }` [INFO] [stderr] | |_______________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/router/mod.rs:226:24 [INFO] [stderr] | [INFO] [stderr] 226 | if let Some(_) = recognizers.recognize(path) { [INFO] [stderr] | _________________- ^^^^^^^ [INFO] [stderr] 227 | | options.push(method.clone()); [INFO] [stderr] 228 | | } [INFO] [stderr] | |_________________- help: try this: `if recognizers.recognize(path).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/router/mod.rs:268:49 [INFO] [stderr] | [INFO] [stderr] 268 | self.handle_method(request).unwrap_or( [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 269 | | Err( [INFO] [stderr] 270 | | FerrumError::new( [INFO] [stderr] 271 | | NoRoute, [INFO] [stderr] ... | [INFO] [stderr] 275 | | ) [INFO] [stderr] 276 | | ) [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 268 | self.handle_method(request).unwrap_or_else(|| Err( [INFO] [stderr] 269 | FerrumError::new( [INFO] [stderr] 270 | NoRoute, [INFO] [stderr] 271 | Some(Response::new() [INFO] [stderr] 272 | .with_status(StatusCode::NotFound)) [INFO] [stderr] 273 | ) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/recognizer/matcher.rs:7:18 [INFO] [stderr] | [INFO] [stderr] 7 | pub handler: &'a Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&'a Handler` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/recognizer/matcher.rs:12:25 [INFO] [stderr] | [INFO] [stderr] 12 | pub fn new(handler: &'a Box, params: Params) -> RouteMatch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&'a Handler` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/recognizer/mod.rs:58:27 [INFO] [stderr] | [INFO] [stderr] 58 | let mut pattern = "^".as_bytes().to_vec(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"^"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:78:36 [INFO] [stderr] | [INFO] [stderr] 78 | if param_name.len() > 0 || param_type.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_name.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:78:60 [INFO] [stderr] | [INFO] [stderr] 78 | if param_name.len() > 0 || param_type.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_type.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:81:58 [INFO] [stderr] | [INFO] [stderr] 81 | let regex_chunk = if param_name.len() > 0 && !identifier_regex.is_match(param_name.as_str()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_name.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:84:57 [INFO] [stderr] | [INFO] [stderr] 84 | let prefix = if param_name.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_name.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:98:61 [INFO] [stderr] | [INFO] [stderr] 98 | let regex_type = if param_type.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_type.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `router::Router` [INFO] [stderr] --> src/router/mod.rs:39:5 [INFO] [stderr] | [INFO] [stderr] 39 | / pub fn new() -> Router { [INFO] [stderr] 40 | | Router { [INFO] [stderr] 41 | | inner: Arc::new(RouterInner { [INFO] [stderr] 42 | | routers: HashMap::new(), [INFO] [stderr] ... | [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 32 | impl Default for router::Router { [INFO] [stderr] 33 | fn default() -> Self { [INFO] [stderr] 34 | Self::new() [INFO] [stderr] 35 | } [INFO] [stderr] 36 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/router/mod.rs:94:14 [INFO] [stderr] | [INFO] [stderr] 94 | .or_insert(Vec::new()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(Vec::new)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/router/mod.rs:101:13 [INFO] [stderr] | [INFO] [stderr] 101 | let ref mut route_ids = inner.route_ids; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^------------------- help: try: `let route_ids = &mut inner.route_ids;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/router/mod.rs:208:14 [INFO] [stderr] | [INFO] [stderr] 208 | .or(self.inner.wildcard.recognize(path)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| self.inner.wildcard.recognize(path))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: called `map(f)` on an Option value where `f` is a unit closure [INFO] [stderr] --> src/router/mod.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | self.inner.routers.get(method).map(|recognizers| { [INFO] [stderr] | _____________^ [INFO] [stderr] | |_____________| [INFO] [stderr] | || [INFO] [stderr] 226 | || if let Some(_) = recognizers.recognize(path) { [INFO] [stderr] 227 | || options.push(method.clone()); [INFO] [stderr] 228 | || } [INFO] [stderr] 229 | || }); [INFO] [stderr] | ||______________^- help: try this: `if let Some(recognizers) = self.inner.routers.get(method) { ... }` [INFO] [stderr] | |_______________| [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_unit_fn)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/router/mod.rs:226:24 [INFO] [stderr] | [INFO] [stderr] 226 | if let Some(_) = recognizers.recognize(path) { [INFO] [stderr] | _________________- ^^^^^^^ [INFO] [stderr] 227 | | options.push(method.clone()); [INFO] [stderr] 228 | | } [INFO] [stderr] | |_________________- help: try this: `if recognizers.recognize(path).is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/router/mod.rs:268:49 [INFO] [stderr] | [INFO] [stderr] 268 | self.handle_method(request).unwrap_or( [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 269 | | Err( [INFO] [stderr] 270 | | FerrumError::new( [INFO] [stderr] 271 | | NoRoute, [INFO] [stderr] ... | [INFO] [stderr] 275 | | ) [INFO] [stderr] 276 | | ) [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 268 | self.handle_method(request).unwrap_or_else(|| Err( [INFO] [stderr] 269 | FerrumError::new( [INFO] [stderr] 270 | NoRoute, [INFO] [stderr] 271 | Some(Response::new() [INFO] [stderr] 272 | .with_status(StatusCode::NotFound)) [INFO] [stderr] 273 | ) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/recognizer/types.rs:113:5 [INFO] [stderr] | [INFO] [stderr] 113 | / fn get_glob_types_value<'a, T>(types: &'a T, key: ::Name) -> &'a ::Pattern [INFO] [stderr] 114 | | where T: GlobTypes [INFO] [stderr] 115 | | { [INFO] [stderr] 116 | | types.store().get(key.borrow()).unwrap() [INFO] [stderr] 117 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/recognizer/types.rs:131:21 [INFO] [stderr] | [INFO] [stderr] 131 | let value = types.get("key").unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&types["key"]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/recognizer/types.rs:144:21 [INFO] [stderr] | [INFO] [stderr] 144 | let value = types.get("key").unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&types["key"]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/recognizer/glob.rs:80:26 [INFO] [stderr] | [INFO] [stderr] 80 | let glob_bytes = "path/bytes".as_bytes(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"path/bytes"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/recognizer/glob.rs:85:24 [INFO] [stderr] | [INFO] [stderr] 85 | let glob_vec = "path/vec".as_bytes().to_vec(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"path/vec"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/recognizer/matcher.rs:7:18 [INFO] [stderr] | [INFO] [stderr] 7 | pub handler: &'a Box, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&'a Handler` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::borrowed_box)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stderr] --> src/recognizer/matcher.rs:12:25 [INFO] [stderr] | [INFO] [stderr] 12 | pub fn new(handler: &'a Box, params: Params) -> RouteMatch { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `&'a Handler` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/recognizer/mod.rs:58:27 [INFO] [stderr] | [INFO] [stderr] 58 | let mut pattern = "^".as_bytes().to_vec(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"^"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:78:36 [INFO] [stderr] | [INFO] [stderr] 78 | if param_name.len() > 0 || param_type.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_name.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:78:60 [INFO] [stderr] | [INFO] [stderr] 78 | if param_name.len() > 0 || param_type.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_type.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:81:58 [INFO] [stderr] | [INFO] [stderr] 81 | let regex_chunk = if param_name.len() > 0 && !identifier_regex.is_match(param_name.as_str()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_name.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:84:57 [INFO] [stderr] | [INFO] [stderr] 84 | let prefix = if param_name.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_name.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/recognizer/mod.rs:98:61 [INFO] [stderr] | [INFO] [stderr] 98 | let regex_type = if param_type.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!param_type.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/recognizer/tests.rs:4:1 [INFO] [stderr] | [INFO] [stderr] 4 | / fn parse_glob_direct() { [INFO] [stderr] 5 | | let types = Store::::default(); [INFO] [stderr] 6 | | let (regex, params) = Recognizer::parse_glob("", &types).unwrap(); [INFO] [stderr] 7 | | [INFO] [stderr] ... | [INFO] [stderr] 42 | | assert_eq!(params, Vec::::new()); [INFO] [stderr] 43 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 34 [INFO] [stderr] --> src/recognizer/tests.rs:46:1 [INFO] [stderr] | [INFO] [stderr] 46 | / fn parse_glob_single_param() { [INFO] [stderr] 47 | | let mut types = Store::default(); [INFO] [stderr] 48 | | let (regex, params) = Recognizer::parse_glob("/posts/{name}", &types).unwrap(); [INFO] [stderr] 49 | | [INFO] [stderr] ... | [INFO] [stderr] 98 | | } [INFO] [stderr] 99 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 38.76s [INFO] running `"docker" "inspect" "e68647b1eb20d5bd5a47c426ddad2d00ddf0df399bf314e2c562d6b6ecb396a5"` [INFO] running `"docker" "rm" "-f" "e68647b1eb20d5bd5a47c426ddad2d00ddf0df399bf314e2c562d6b6ecb396a5"` [INFO] [stdout] e68647b1eb20d5bd5a47c426ddad2d00ddf0df399bf314e2c562d6b6ecb396a5