[INFO] fetching crate thrift-ls 0.1.6... [INFO] linting thrift-ls-0.1.6 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate thrift-ls 0.1.6 into /workspace/builds/worker-5-tc1/source [INFO] started tweaking crates.io crate thrift-ls 0.1.6 [INFO] finished tweaking crates.io crate thrift-ls 0.1.6 [INFO] tweaked toml for crates.io crate thrift-ls 0.1.6 written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate thrift-ls 0.1.6 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate thrift-ls 0.1.6 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded simple_logger v4.3.3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] e36de831bff49eb993171d976fdf19b83c9e0dcdae6d3837d614117776c54945 [INFO] running `Command { std: "docker" "start" "-a" "e36de831bff49eb993171d976fdf19b83c9e0dcdae6d3837d614117776c54945", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e36de831bff49eb993171d976fdf19b83c9e0dcdae6d3837d614117776c54945", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e36de831bff49eb993171d976fdf19b83c9e0dcdae6d3837d614117776c54945", kill_on_drop: false }` [INFO] [stdout] e36de831bff49eb993171d976fdf19b83c9e0dcdae6d3837d614117776c54945 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0adff2564cb5ca1e13b85acd2978eed602875b250fae0c06cf4f572902ba1744 [INFO] running `Command { std: "docker" "start" "-a" "0adff2564cb5ca1e13b85acd2978eed602875b250fae0c06cf4f572902ba1744", kill_on_drop: false }` [INFO] [stderr] Compiling icu_locid_transform_data v1.5.1 [INFO] [stderr] Checking litemap v0.7.5 [INFO] [stderr] Compiling wasm-bindgen-shared v0.2.100 [INFO] [stderr] Compiling icu_properties_data v1.5.1 [INFO] [stderr] Compiling libc v0.2.171 [INFO] [stderr] Compiling log v0.4.27 [INFO] [stderr] Compiling bumpalo v3.17.0 [INFO] [stderr] Compiling icu_normalizer_data v1.5.1 [INFO] [stderr] Compiling wasm-bindgen v0.2.100 [INFO] [stderr] Checking smallvec v1.15.0 [INFO] [stderr] Checking once_cell v1.21.3 [INFO] [stderr] Compiling time-macros v0.2.22 [INFO] [stderr] Compiling syn v2.0.100 [INFO] [stderr] Checking deranged v0.4.0 [INFO] [stderr] Checking percent-encoding v2.3.1 [INFO] [stderr] Checking chrono v0.4.40 [INFO] [stderr] Checking form_urlencoded v1.2.1 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking time v0.3.41 [INFO] [stderr] Checking dirs v5.0.1 [INFO] [stderr] Checking simple_logger v4.3.3 [INFO] [stderr] Compiling synstructure v0.13.1 [INFO] [stderr] Compiling wasm-bindgen-backend v0.2.100 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.7.5 [INFO] [stderr] Compiling zerovec-derive v0.10.3 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling icu_provider_macros v1.5.0 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.7.5 [INFO] [stderr] Compiling wasm-bindgen-macro-support v0.2.100 [INFO] [stderr] Checking zerovec v0.10.4 [INFO] [stderr] Checking tinystr v0.7.6 [INFO] [stderr] Checking icu_collections v1.5.0 [INFO] [stderr] Checking icu_locid v1.5.0 [INFO] [stderr] Compiling wasm-bindgen-macro v0.2.100 [INFO] [stderr] Checking icu_provider v1.5.0 [INFO] [stderr] Checking serde v1.0.219 [INFO] [stderr] Checking icu_locid_transform v1.5.0 [INFO] [stderr] Checking icu_properties v1.5.1 [INFO] [stderr] Checking js-sys v0.3.77 [INFO] [stderr] Checking icu_normalizer v1.5.0 [INFO] [stderr] Checking bytes v1.10.1 [INFO] [stderr] Checking serde_json v1.0.140 [INFO] [stderr] Checking idna_adapter v1.2.0 [INFO] [stderr] Checking idna v1.0.3 [INFO] [stderr] Checking tokio v1.44.2 [INFO] [stderr] Checking url v2.5.4 [INFO] [stderr] Checking serde-wasm-bindgen v0.6.5 [INFO] [stderr] Checking thrift-ls v0.1.6 (/opt/rustwide/workdir) [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> lib/analyzer/parser.rs:171:12 [INFO] [stdout] | [INFO] [stdout] 171 | if !TokenKind::from_string(&name).is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `TokenKind::from_string(&name).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:232:17 [INFO] [stdout] | [INFO] [stdout] 232 | / return Some(FieldTypeNode::Identifier(IdentifierNode { [INFO] [stdout] 233 | | range: next_token.range(), [INFO] [stdout] 234 | | name: identifier.clone(), [INFO] [stdout] 235 | | })); [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 232 ~ Some(FieldTypeNode::Identifier(IdentifierNode { [INFO] [stdout] 233 + range: next_token.range(), [INFO] [stdout] 234 + name: identifier.clone(), [INFO] [stdout] 235 ~ })) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:238:17 [INFO] [stdout] | [INFO] [stdout] 238 | return self.parse_definition_type(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 238 - return self.parse_definition_type(); [INFO] [stdout] 238 + self.parse_definition_type() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:250:17 [INFO] [stdout] | [INFO] [stdout] 250 | / return Some(FieldTypeNode::BaseType(BaseTypeNode { [INFO] [stdout] 251 | | range: next_token.range(), [INFO] [stdout] 252 | | name: base_type.clone(), [INFO] [stdout] 253 | | })); [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 250 ~ Some(FieldTypeNode::BaseType(BaseTypeNode { [INFO] [stdout] 251 + range: next_token.range(), [INFO] [stdout] 252 + name: base_type.clone(), [INFO] [stdout] 253 ~ })) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:256:17 [INFO] [stdout] | [INFO] [stdout] 256 | return self.parse_container_type(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 256 - return self.parse_container_type(); [INFO] [stdout] 256 + self.parse_container_type() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> lib/analyzer/parser.rs:266:57 [INFO] [stdout] | [INFO] [stdout] 266 | TokenKind::Map => self.parse_map_type().map(|x| FieldTypeNode::MapType(x)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FieldTypeNode::MapType` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> lib/analyzer/parser.rs:267:57 [INFO] [stdout] | [INFO] [stdout] 267 | TokenKind::Set => self.parse_set_type().map(|x| FieldTypeNode::SetType(x)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FieldTypeNode::SetType` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> lib/analyzer/parser.rs:268:59 [INFO] [stdout] | [INFO] [stdout] 268 | TokenKind::List => self.parse_list_type().map(|x| FieldTypeNode::ListType(x)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FieldTypeNode::ListType` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> lib/analyzer/parser.rs:574:16 [INFO] [stdout] | [INFO] [stdout] 574 | if !field_req.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `field_req.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> lib/analyzer/scanner.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | impl Into for ScannerState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 20 ~ impl From for Position { [INFO] [stdout] 21 ~ fn from(val: ScannerState) -> Self { [INFO] [stdout] 22 | Position { [INFO] [stdout] 23 ~ line: val.line as u32, [INFO] [stdout] 24 ~ column: val.column as u32, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:291:22 [INFO] [stdout] | [INFO] [stdout] 291 | let ch = self.input[self.state.offset] as char; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:300:24 [INFO] [stdout] | [INFO] [stdout] 300 | && self.input[self.state.offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:370:24 [INFO] [stdout] | [INFO] [stdout] 370 | && self.input[self.state.offset + offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset + offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> lib/analyzer/scanner.rs:488:16 [INFO] [stdout] | [INFO] [stdout] 488 | if ch >= '0' && ch <= '9' { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `('0'..='9').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:541:24 [INFO] [stdout] | [INFO] [stdout] 541 | && self.input[self.state.offset + offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset + offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:591:24 [INFO] [stdout] | [INFO] [stdout] 591 | && self.input[self.state.offset + offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset + offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `SymbolTable` [INFO] [stdout] --> lib/analyzer/symbol.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | / pub fn new() -> Self { [INFO] [stdout] 22 | | Self { [INFO] [stdout] 23 | | path: String::new(), [INFO] [stdout] 24 | | types: HashMap::new(), [INFO] [stdout] ... | [INFO] [stdout] 30 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 19 + impl Default for SymbolTable { [INFO] [stdout] 20 + fn default() -> Self { [INFO] [stdout] 21 + Self::new() [INFO] [stdout] 22 + } [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:174:39 [INFO] [stdout] | [INFO] [stdout] 174 | self.check_field_type(&*map_type.key_type); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `&map_type.key_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:175:39 [INFO] [stdout] | [INFO] [stdout] 175 | self.check_field_type(&*map_type.value_type); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `&map_type.value_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:178:39 [INFO] [stdout] | [INFO] [stdout] 178 | self.check_field_type(&*set_type.type_node); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&set_type.type_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:181:39 [INFO] [stdout] | [INFO] [stdout] 181 | self.check_field_type(&*list_type.type_node); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `&list_type.type_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> lib/analyzer/token.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | / match self.kind { [INFO] [stdout] 21 | | TokenKind::Invalid(_) => true, [INFO] [stdout] 22 | | TokenKind::InvalidString(_) => true, [INFO] [stdout] 23 | | _ => false, [INFO] [stdout] 24 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 20 - match self.kind { [INFO] [stdout] 21 - TokenKind::Invalid(_) => true, [INFO] [stdout] 22 - TokenKind::InvalidString(_) => true, [INFO] [stdout] 23 - _ => false, [INFO] [stdout] 24 - } [INFO] [stdout] 20 + matches!(self.kind, TokenKind::Invalid(_) | TokenKind::InvalidString(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> lib/analyzer/token.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | / match self.kind { [INFO] [stdout] 30 | | TokenKind::Comment(_) => true, [INFO] [stdout] 31 | | TokenKind::BlockComment(_) => true, [INFO] [stdout] 32 | | TokenKind::PoundComment(_) => true, [INFO] [stdout] 33 | | _ => false, [INFO] [stdout] 34 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 29 - match self.kind { [INFO] [stdout] 30 - TokenKind::Comment(_) => true, [INFO] [stdout] 31 - TokenKind::BlockComment(_) => true, [INFO] [stdout] 32 - TokenKind::PoundComment(_) => true, [INFO] [stdout] 33 - _ => false, [INFO] [stdout] 34 - } [INFO] [stdout] 29 + matches!(self.kind, TokenKind::Comment(_) | TokenKind::BlockComment(_) | TokenKind::PoundComment(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> lib/analyzer/token.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | / match self.kind { [INFO] [stdout] 40 | | TokenKind::ListSeparator(_) => true, [INFO] [stdout] 41 | | _ => false, [INFO] [stdout] 42 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 39 - match self.kind { [INFO] [stdout] 40 - TokenKind::ListSeparator(_) => true, [INFO] [stdout] 41 - _ => false, [INFO] [stdout] 42 - } [INFO] [stdout] 39 + matches!(self.kind, TokenKind::ListSeparator(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> lib/analyzer/token.rs:119:1 [INFO] [stdout] | [INFO] [stdout] 119 | / impl Default for TokenKind { [INFO] [stdout] 120 | | fn default() -> Self { [INFO] [stdout] 121 | | TokenKind::Eof [INFO] [stdout] 122 | | } [INFO] [stdout] 123 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 58 + #[derive(Default)] [INFO] [stdout] 59 | pub enum TokenKind { [INFO] [stdout] 60 | // keywords [INFO] [stdout] ... [INFO] [stdout] 116 | // end of file [INFO] [stdout] 117 ~ #[default] [INFO] [stdout] 118 ~ Eof, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TokenKind` has a public `len` method, but no `is_empty` method [INFO] [stdout] --> lib/analyzer/token.rs:177:5 [INFO] [stdout] | [INFO] [stdout] 177 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Analyzer` [INFO] [stdout] --> lib/analyzer/mod.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | / pub fn new() -> Self { [INFO] [stdout] 68 | | Self { [INFO] [stdout] 69 | | documents: HashMap::new(), [INFO] [stdout] 70 | | document_nodes: HashMap::new(), [INFO] [stdout] ... | [INFO] [stdout] 76 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 65 + impl Default for Analyzer { [INFO] [stdout] 66 + fn default() -> Self { [INFO] [stdout] 67 + Self::new() [INFO] [stdout] 68 + } [INFO] [stdout] 69 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/mod.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 165 | return symbol_table.types().keys().cloned().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 165 - return symbol_table.types().keys().cloned().collect(); [INFO] [stdout] 165 + symbol_table.types().keys().cloned().collect() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> lib/analyzer/mod.rs:261:39 [INFO] [stdout] | [INFO] [stdout] 261 | .extend(errors.into_iter().map(|e| e)); [INFO] [stdout] | ^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] = note: `#[warn(clippy::map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> lib/analyzer/mod.rs:320:54 [INFO] [stdout] | [INFO] [stdout] 320 | .extend(symbol_table.errors().into_iter().map(|e| e)); [INFO] [stdout] | ^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> lib/analyzer/mod.rs:514:43 [INFO] [stdout] | [INFO] [stdout] 514 | let line = range.start.line - 1 as u32; [INFO] [stdout] | ^^^^^^^^ help: try: `1_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> lib/analyzer/mod.rs:515:45 [INFO] [stdout] | [INFO] [stdout] 515 | let char = range.start.column - 1 as u32; [INFO] [stdout] | ^^^^^^^^ help: try: `1_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> lib/analyzer/mod.rs:544:17 [INFO] [stdout] | [INFO] [stdout] 544 | / match definition.as_ref() { [INFO] [stdout] 545 | | DefinitionNode::Service(service_node) => { [INFO] [stdout] 546 | | for function in &service_node.functions { [INFO] [stdout] 547 | | result.push(&function.identifier); [INFO] [stdout] ... | [INFO] [stdout] 550 | | _ => {} [INFO] [stdout] 551 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 544 ~ if let DefinitionNode::Service(service_node) = definition.as_ref() { [INFO] [stdout] 545 + for function in &service_node.functions { [INFO] [stdout] 546 + result.push(&function.identifier); [INFO] [stdout] 547 + } [INFO] [stdout] 548 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> lib/analyzer/mod.rs:652:12 [INFO] [stdout] | [INFO] [stdout] 652 | if p.to_string_lossy().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!p.to_string_lossy().is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Analyzer` [INFO] [stdout] --> lib/wasm.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | / pub fn new() -> Analyzer { [INFO] [stdout] 21 | | Analyzer { [INFO] [stdout] 22 | | analyzer: analyzer::Analyzer::new(), [INFO] [stdout] 23 | | } [INFO] [stdout] 24 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 19 + impl Default for Analyzer { [INFO] [stdout] 20 + fn default() -> Self { [INFO] [stdout] 21 + Self::new() [INFO] [stdout] 22 + } [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> lib/wasm.rs:88:16 [INFO] [stdout] | [INFO] [stdout] 88 | if error.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!error.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> lib/wasm.rs:89:28 [INFO] [stdout] | [INFO] [stdout] 89 | return Err(io::Error::new(io::ErrorKind::Other, error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 89 - return Err(io::Error::new(io::ErrorKind::Other, error)); [INFO] [stdout] 89 + return Err(io::Error::other(error)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> lib/analyzer/parser.rs:171:12 [INFO] [stdout] | [INFO] [stdout] 171 | if !TokenKind::from_string(&name).is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `TokenKind::from_string(&name).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:232:17 [INFO] [stdout] | [INFO] [stdout] 232 | / return Some(FieldTypeNode::Identifier(IdentifierNode { [INFO] [stdout] 233 | | range: next_token.range(), [INFO] [stdout] 234 | | name: identifier.clone(), [INFO] [stdout] 235 | | })); [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 232 ~ Some(FieldTypeNode::Identifier(IdentifierNode { [INFO] [stdout] 233 + range: next_token.range(), [INFO] [stdout] 234 + name: identifier.clone(), [INFO] [stdout] 235 ~ })) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:238:17 [INFO] [stdout] | [INFO] [stdout] 238 | return self.parse_definition_type(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 238 - return self.parse_definition_type(); [INFO] [stdout] 238 + self.parse_definition_type() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:250:17 [INFO] [stdout] | [INFO] [stdout] 250 | / return Some(FieldTypeNode::BaseType(BaseTypeNode { [INFO] [stdout] 251 | | range: next_token.range(), [INFO] [stdout] 252 | | name: base_type.clone(), [INFO] [stdout] 253 | | })); [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 250 ~ Some(FieldTypeNode::BaseType(BaseTypeNode { [INFO] [stdout] 251 + range: next_token.range(), [INFO] [stdout] 252 + name: base_type.clone(), [INFO] [stdout] 253 ~ })) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/parser.rs:256:17 [INFO] [stdout] | [INFO] [stdout] 256 | return self.parse_container_type(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 256 - return self.parse_container_type(); [INFO] [stdout] 256 + self.parse_container_type() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> lib/analyzer/parser.rs:266:57 [INFO] [stdout] | [INFO] [stdout] 266 | TokenKind::Map => self.parse_map_type().map(|x| FieldTypeNode::MapType(x)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FieldTypeNode::MapType` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> lib/analyzer/parser.rs:267:57 [INFO] [stdout] | [INFO] [stdout] 267 | TokenKind::Set => self.parse_set_type().map(|x| FieldTypeNode::SetType(x)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FieldTypeNode::SetType` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> lib/analyzer/parser.rs:268:59 [INFO] [stdout] | [INFO] [stdout] 268 | TokenKind::List => self.parse_list_type().map(|x| FieldTypeNode::ListType(x)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FieldTypeNode::ListType` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> lib/analyzer/parser.rs:574:16 [INFO] [stdout] | [INFO] [stdout] 574 | if !field_req.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `field_req.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> lib/analyzer/scanner.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | impl Into for ScannerState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 20 ~ impl From for Position { [INFO] [stdout] 21 ~ fn from(val: ScannerState) -> Self { [INFO] [stdout] 22 | Position { [INFO] [stdout] 23 ~ line: val.line as u32, [INFO] [stdout] 24 ~ column: val.column as u32, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:291:22 [INFO] [stdout] | [INFO] [stdout] 291 | let ch = self.input[self.state.offset] as char; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:300:24 [INFO] [stdout] | [INFO] [stdout] 300 | && self.input[self.state.offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:370:24 [INFO] [stdout] | [INFO] [stdout] 370 | && self.input[self.state.offset + offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset + offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> lib/analyzer/scanner.rs:488:16 [INFO] [stdout] | [INFO] [stdout] 488 | if ch >= '0' && ch <= '9' { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `('0'..='9').contains(&ch)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:541:24 [INFO] [stdout] | [INFO] [stdout] 541 | && self.input[self.state.offset + offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset + offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`char` -> `char`) [INFO] [stdout] --> lib/analyzer/scanner.rs:591:24 [INFO] [stdout] | [INFO] [stdout] 591 | && self.input[self.state.offset + offset] as char == '\n' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.input[self.state.offset + offset]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `SymbolTable` [INFO] [stdout] --> lib/analyzer/symbol.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | / pub fn new() -> Self { [INFO] [stdout] 22 | | Self { [INFO] [stdout] 23 | | path: String::new(), [INFO] [stdout] 24 | | types: HashMap::new(), [INFO] [stdout] ... | [INFO] [stdout] 30 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 19 + impl Default for SymbolTable { [INFO] [stdout] 20 + fn default() -> Self { [INFO] [stdout] 21 + Self::new() [INFO] [stdout] 22 + } [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:174:39 [INFO] [stdout] | [INFO] [stdout] 174 | self.check_field_type(&*map_type.key_type); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `&map_type.key_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:175:39 [INFO] [stdout] | [INFO] [stdout] 175 | self.check_field_type(&*map_type.value_type); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `&map_type.value_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:178:39 [INFO] [stdout] | [INFO] [stdout] 178 | self.check_field_type(&*set_type.type_node); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&set_type.type_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> lib/analyzer/symbol.rs:181:39 [INFO] [stdout] | [INFO] [stdout] 181 | self.check_field_type(&*list_type.type_node); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `&list_type.type_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> lib/analyzer/token.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | / match self.kind { [INFO] [stdout] 21 | | TokenKind::Invalid(_) => true, [INFO] [stdout] 22 | | TokenKind::InvalidString(_) => true, [INFO] [stdout] 23 | | _ => false, [INFO] [stdout] 24 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 20 - match self.kind { [INFO] [stdout] 21 - TokenKind::Invalid(_) => true, [INFO] [stdout] 22 - TokenKind::InvalidString(_) => true, [INFO] [stdout] 23 - _ => false, [INFO] [stdout] 24 - } [INFO] [stdout] 20 + matches!(self.kind, TokenKind::Invalid(_) | TokenKind::InvalidString(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> lib/analyzer/token.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | / match self.kind { [INFO] [stdout] 30 | | TokenKind::Comment(_) => true, [INFO] [stdout] 31 | | TokenKind::BlockComment(_) => true, [INFO] [stdout] 32 | | TokenKind::PoundComment(_) => true, [INFO] [stdout] 33 | | _ => false, [INFO] [stdout] 34 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 29 - match self.kind { [INFO] [stdout] 30 - TokenKind::Comment(_) => true, [INFO] [stdout] 31 - TokenKind::BlockComment(_) => true, [INFO] [stdout] 32 - TokenKind::PoundComment(_) => true, [INFO] [stdout] 33 - _ => false, [INFO] [stdout] 34 - } [INFO] [stdout] 29 + matches!(self.kind, TokenKind::Comment(_) | TokenKind::BlockComment(_) | TokenKind::PoundComment(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> lib/analyzer/token.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | / match self.kind { [INFO] [stdout] 40 | | TokenKind::ListSeparator(_) => true, [INFO] [stdout] 41 | | _ => false, [INFO] [stdout] 42 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 39 - match self.kind { [INFO] [stdout] 40 - TokenKind::ListSeparator(_) => true, [INFO] [stdout] 41 - _ => false, [INFO] [stdout] 42 - } [INFO] [stdout] 39 + matches!(self.kind, TokenKind::ListSeparator(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> lib/analyzer/token.rs:119:1 [INFO] [stdout] | [INFO] [stdout] 119 | / impl Default for TokenKind { [INFO] [stdout] 120 | | fn default() -> Self { [INFO] [stdout] 121 | | TokenKind::Eof [INFO] [stdout] 122 | | } [INFO] [stdout] 123 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 58 + #[derive(Default)] [INFO] [stdout] 59 | pub enum TokenKind { [INFO] [stdout] 60 | // keywords [INFO] [stdout] ... [INFO] [stdout] 116 | // end of file [INFO] [stdout] 117 ~ #[default] [INFO] [stdout] 118 ~ Eof, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TokenKind` has a public `len` method, but no `is_empty` method [INFO] [stdout] --> lib/analyzer/token.rs:177:5 [INFO] [stdout] | [INFO] [stdout] 177 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Analyzer` [INFO] [stdout] --> lib/analyzer/mod.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | / pub fn new() -> Self { [INFO] [stdout] 68 | | Self { [INFO] [stdout] 69 | | documents: HashMap::new(), [INFO] [stdout] 70 | | document_nodes: HashMap::new(), [INFO] [stdout] ... | [INFO] [stdout] 76 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 65 + impl Default for Analyzer { [INFO] [stdout] 66 + fn default() -> Self { [INFO] [stdout] 67 + Self::new() [INFO] [stdout] 68 + } [INFO] [stdout] 69 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> lib/analyzer/mod.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 165 | return symbol_table.types().keys().cloned().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 165 - return symbol_table.types().keys().cloned().collect(); [INFO] [stdout] 165 + symbol_table.types().keys().cloned().collect() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> lib/analyzer/mod.rs:261:39 [INFO] [stdout] | [INFO] [stdout] 261 | .extend(errors.into_iter().map(|e| e)); [INFO] [stdout] | ^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] = note: `#[warn(clippy::map_identity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary map of the identity function [INFO] [stdout] --> lib/analyzer/mod.rs:320:54 [INFO] [stdout] | [INFO] [stdout] 320 | .extend(symbol_table.errors().into_iter().map(|e| e)); [INFO] [stdout] | ^^^^^^^^^^^ help: remove the call to `map` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_identity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> lib/analyzer/mod.rs:514:43 [INFO] [stdout] | [INFO] [stdout] 514 | let line = range.start.line - 1 as u32; [INFO] [stdout] | ^^^^^^^^ help: try: `1_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u32` is unnecessary [INFO] [stdout] --> lib/analyzer/mod.rs:515:45 [INFO] [stdout] | [INFO] [stdout] 515 | let char = range.start.column - 1 as u32; [INFO] [stdout] | ^^^^^^^^ help: try: `1_u32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> lib/analyzer/mod.rs:544:17 [INFO] [stdout] | [INFO] [stdout] 544 | / match definition.as_ref() { [INFO] [stdout] 545 | | DefinitionNode::Service(service_node) => { [INFO] [stdout] 546 | | for function in &service_node.functions { [INFO] [stdout] 547 | | result.push(&function.identifier); [INFO] [stdout] ... | [INFO] [stdout] 550 | | _ => {} [INFO] [stdout] 551 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 544 ~ if let DefinitionNode::Service(service_node) = definition.as_ref() { [INFO] [stdout] 545 + for function in &service_node.functions { [INFO] [stdout] 546 + result.push(&function.identifier); [INFO] [stdout] 547 + } [INFO] [stdout] 548 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> lib/analyzer/mod.rs:652:12 [INFO] [stdout] | [INFO] [stdout] 652 | if p.to_string_lossy().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!p.to_string_lossy().is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Analyzer` [INFO] [stdout] --> lib/wasm.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | / pub fn new() -> Analyzer { [INFO] [stdout] 21 | | Analyzer { [INFO] [stdout] 22 | | analyzer: analyzer::Analyzer::new(), [INFO] [stdout] 23 | | } [INFO] [stdout] 24 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 19 + impl Default for Analyzer { [INFO] [stdout] 20 + fn default() -> Self { [INFO] [stdout] 21 + Self::new() [INFO] [stdout] 22 + } [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> lib/wasm.rs:88:16 [INFO] [stdout] | [INFO] [stdout] 88 | if error.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!error.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> lib/wasm.rs:89:28 [INFO] [stdout] | [INFO] [stdout] 89 | return Err(io::Error::new(io::ErrorKind::Other, error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 89 - return Err(io::Error::new(io::ErrorKind::Other, error)); [INFO] [stdout] 89 + return Err(io::Error::other(error)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/logger.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | return; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - eprintln!("Failed to set custom logger: {}", e); [INFO] [stdout] 57 - return; [INFO] [stdout] 56 + eprintln!("Failed to set custom logger: {}", e); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/logger.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | return; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - eprintln!("Failed to set custom logger: {}", e); [INFO] [stdout] 57 - return; [INFO] [stdout] 56 + eprintln!("Failed to set custom logger: {}", e); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:181:19 [INFO] [stdout] | [INFO] [stdout] 181 | line: value.line as u32 - 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `value.line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:182:24 [INFO] [stdout] | [INFO] [stdout] 182 | character: value.column as u32 - 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `value.column` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/server/lsp.rs:187:1 [INFO] [stdout] | [INFO] [stdout] 187 | impl Into for Position { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 187 ~ impl From for base::Position { [INFO] [stdout] 188 ~ fn from(val: Position) -> Self { [INFO] [stdout] 189 | base::Position { [INFO] [stdout] 190 ~ line: val.line as u32 + 1, [INFO] [stdout] 191 ~ column: val.character as u32 + 1, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:190:19 [INFO] [stdout] | [INFO] [stdout] 190 | line: self.line as u32 + 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `self.line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:191:21 [INFO] [stdout] | [INFO] [stdout] 191 | column: self.character as u32 + 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `self.character` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:399:44 [INFO] [stdout] | [INFO] [stdout] 399 | let path = match parse_uri_to_path(&uri) { [INFO] [stdout] | ^^^^ help: change this to: `uri` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:181:19 [INFO] [stdout] | [INFO] [stdout] 181 | line: value.line as u32 - 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `value.line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:408:44 [INFO] [stdout] | [INFO] [stdout] 408 | let path = match parse_uri_to_path(&uri) { [INFO] [stdout] | ^^^^ help: change this to: `uri` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:420:34 [INFO] [stdout] | [INFO] [stdout] 420 | uri: path_to_uri(&path), [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:182:24 [INFO] [stdout] | [INFO] [stdout] 182 | character: value.column as u32 - 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `value.column` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/server/lsp.rs:187:1 [INFO] [stdout] | [INFO] [stdout] 187 | impl Into for Position { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 187 ~ impl From for base::Position { [INFO] [stdout] 188 ~ fn from(val: Position) -> Self { [INFO] [stdout] 189 | base::Position { [INFO] [stdout] 190 ~ line: val.line as u32 + 1, [INFO] [stdout] 191 ~ column: val.character as u32 + 1, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:190:19 [INFO] [stdout] | [INFO] [stdout] 190 | line: self.line as u32 + 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `self.line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/lsp.rs:191:21 [INFO] [stdout] | [INFO] [stdout] 191 | column: self.character as u32 + 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `self.character` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:441:32 [INFO] [stdout] | [INFO] [stdout] 441 | let url = match Url::parse(&uri) { [INFO] [stdout] | ^^^^ help: change this to: `uri` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:399:44 [INFO] [stdout] | [INFO] [stdout] 399 | let path = match parse_uri_to_path(&uri) { [INFO] [stdout] | ^^^^ help: change this to: `uri` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:408:44 [INFO] [stdout] | [INFO] [stdout] 408 | let path = match parse_uri_to_path(&uri) { [INFO] [stdout] | ^^^^ help: change this to: `uri` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:420:34 [INFO] [stdout] | [INFO] [stdout] 420 | uri: path_to_uri(&path), [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/mod.rs:441:32 [INFO] [stdout] | [INFO] [stdout] 441 | let url = match Url::parse(&uri) { [INFO] [stdout] | ^^^^ help: change this to: `uri` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 27.70s [INFO] running `Command { std: "docker" "inspect" "0adff2564cb5ca1e13b85acd2978eed602875b250fae0c06cf4f572902ba1744", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0adff2564cb5ca1e13b85acd2978eed602875b250fae0c06cf4f572902ba1744", kill_on_drop: false }` [INFO] [stdout] 0adff2564cb5ca1e13b85acd2978eed602875b250fae0c06cf4f572902ba1744