[INFO] updating cached repository afandian/folktunefinder-abc [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/afandian/folktunefinder-abc [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/afandian/folktunefinder-abc" "work/ex/clippy-test-run/sources/stable/gh/afandian/folktunefinder-abc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/afandian/folktunefinder-abc'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/afandian/folktunefinder-abc" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/afandian/folktunefinder-abc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/afandian/folktunefinder-abc'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 425ba99fa1775066a508f4b7b7bba46125006fdd [INFO] sha for GitHub repo afandian/folktunefinder-abc: 425ba99fa1775066a508f4b7b7bba46125006fdd [INFO] validating manifest of afandian/folktunefinder-abc 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 afandian/folktunefinder-abc 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 afandian/folktunefinder-abc [INFO] finished frobbing afandian/folktunefinder-abc [INFO] frobbed toml for afandian/folktunefinder-abc written to work/ex/clippy-test-run/sources/stable/gh/afandian/folktunefinder-abc/Cargo.toml [INFO] started frobbing afandian/folktunefinder-abc [INFO] finished frobbing afandian/folktunefinder-abc [INFO] frobbed toml for afandian/folktunefinder-abc written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/afandian/folktunefinder-abc/Cargo.toml [INFO] crate afandian/folktunefinder-abc has a lockfile. skipping [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 afandian/folktunefinder-abc against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/afandian/folktunefinder-abc:/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] 349ba4917997d3d840a28fafab9b5533438cb675d37558aa169a140e3b8db370 [INFO] running `"docker" "start" "-a" "349ba4917997d3d840a28fafab9b5533438cb675d37558aa169a140e3b8db370"` [INFO] [stderr] Checking chunked_transfer v0.3.1 [INFO] [stderr] Checking rand v0.5.5 [INFO] [stderr] Checking url v1.7.2 [INFO] [stderr] Checking url v0.2.38 [INFO] [stderr] Checking tiny_http v0.5.9 [INFO] [stderr] Checking folktunefinder-abc v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/abc_lexer.rs:481:17 [INFO] [stderr] | [INFO] [stderr] 481 | accidental: accidental, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accidental` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/abc_lexer.rs:777:21 [INFO] [stderr] | [INFO] [stderr] 777 | octave: octave, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `octave` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/abc_lexer.rs:775:25 [INFO] [stderr] | [INFO] [stderr] 775 | accidental: accidental, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accidental` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/relations.rs:326:13 [INFO] [stderr] | [INFO] [stderr] 326 | word_capacity: word_capacity, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `word_capacity` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/relations.rs:327:13 [INFO] [stderr] | [INFO] [stderr] 327 | bit_capacity: bit_capacity, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bit_capacity` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/relations.rs:329:13 [INFO] [stderr] | [INFO] [stderr] 329 | top_id: top_id, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `top_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/typeset.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | glyph: glyph, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `glyph` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/abc_lexer.rs:481:17 [INFO] [stderr] | [INFO] [stderr] 481 | accidental: accidental, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accidental` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/abc_lexer.rs:777:21 [INFO] [stderr] | [INFO] [stderr] 777 | octave: octave, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `octave` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/abc_lexer.rs:775:25 [INFO] [stderr] | [INFO] [stderr] 775 | accidental: accidental, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `accidental` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/relations.rs:326:13 [INFO] [stderr] | [INFO] [stderr] 326 | word_capacity: word_capacity, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `word_capacity` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/relations.rs:327:13 [INFO] [stderr] | [INFO] [stderr] 327 | bit_capacity: bit_capacity, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `bit_capacity` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/relations.rs:329:13 [INFO] [stderr] | [INFO] [stderr] 329 | top_id: top_id, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `top_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/typeset.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | glyph: glyph, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `glyph` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] error: #[test] attribute is only allowed on non associated functions [INFO] [stderr] --> src/abc_lexer.rs:146:5 [INFO] [stderr] | [INFO] [stderr] 146 | / fn take(&self, n: usize) -> Option<(Context<'a>, &'a [char])> { [INFO] [stderr] 147 | | if !self.has(n) { [INFO] [stderr] 148 | | None [INFO] [stderr] 149 | | } else { [INFO] [stderr] 150 | | Some((self.skip(n), &self.c[self.i..self.i + n])) [INFO] [stderr] 151 | | } [INFO] [stderr] 152 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `folktunefinder-abc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/abc_lexer.rs:304:9 [INFO] [stderr] | [INFO] [stderr] 304 | / return Err(( [INFO] [stderr] 305 | | ctx.skip(length), [INFO] [stderr] 306 | | start_of_number, [INFO] [stderr] 307 | | LexError::NumberTooLong(role), [INFO] [stderr] 308 | | )); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 304 | Err(( [INFO] [stderr] 305 | ctx.skip(length), [INFO] [stderr] 306 | start_of_number, [INFO] [stderr] 307 | LexError::NumberTooLong(role), [INFO] [stderr] 308 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/abc_lexer.rs:1238:45 [INFO] [stderr] | [INFO] [stderr] 1238 | return lex_key_signature(ctx, '\n'); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `lex_key_signature(ctx, '\n')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/abc_lexer.rs:1242:48 [INFO] [stderr] | [INFO] [stderr] 1242 | 'L' => return lex_note_length(ctx, '\n'), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `lex_note_length(ctx, '\n')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/abc_lexer.rs:1245:48 [INFO] [stderr] | [INFO] [stderr] 1245 | 'M' => return lex_metre(ctx, '\n'), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `lex_metre(ctx, '\n')` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/abc_lexer.rs:1249:45 [INFO] [stderr] | [INFO] [stderr] 1249 | / return LexResult::Error( [INFO] [stderr] 1250 | | ctx, [INFO] [stderr] 1251 | | ctx.i, [INFO] [stderr] 1252 | | LexError::UnimplementedError(3), [INFO] [stderr] 1253 | | ) [INFO] [stderr] | |_____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1249 | LexResult::Error( [INFO] [stderr] 1250 | ctx, [INFO] [stderr] 1251 | ctx.i, [INFO] [stderr] 1252 | LexError::UnimplementedError(3), [INFO] [stderr] 1253 | ) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/abc_lexer.rs:1271:45 [INFO] [stderr] | [INFO] [stderr] 1271 | / return LexResult::Error( [INFO] [stderr] 1272 | | ctx, [INFO] [stderr] 1273 | | ctx.i, [INFO] [stderr] 1274 | | LexError::ExpectedFieldType(first_char), [INFO] [stderr] 1275 | | ) [INFO] [stderr] | |_____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 1271 | LexResult::Error( [INFO] [stderr] 1272 | ctx, [INFO] [stderr] 1273 | ctx.i, [INFO] [stderr] 1274 | LexError::ExpectedFieldType(first_char), [INFO] [stderr] 1275 | ) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/abc_lexer.rs:1524:44 [INFO] [stderr] | [INFO] [stderr] 1524 | } else { [INFO] [stderr] | ____________________________________________^ [INFO] [stderr] 1525 | | if error_line == error_char { [INFO] [stderr] 1526 | | '┗' [INFO] [stderr] 1527 | | } else { [INFO] [stderr] 1528 | | '┃' [INFO] [stderr] 1529 | | } [INFO] [stderr] 1530 | | }); [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] 1524 | } else if error_line == error_char { [INFO] [stderr] 1525 | '┗' [INFO] [stderr] 1526 | } else { [INFO] [stderr] 1527 | '┃' [INFO] [stderr] 1528 | }); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused import: `representations` [INFO] [stderr] --> src/end_to_end_test.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use representations; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/music.rs:320:9 [INFO] [stderr] | [INFO] [stderr] 320 | return vulgar.reduce(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `vulgar.reduce()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around `if` condition [INFO] [stderr] --> src/pitch.rs:52:12 [INFO] [stderr] | [INFO] [stderr] 52 | if (first) { [INFO] [stderr] | ^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_parens)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::cmp::Ordering` [INFO] [stderr] --> src/relations.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use std::cmp::Ordering; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::env` [INFO] [stderr] --> src/relations.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | use std::env; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:97:32 [INFO] [stderr] | [INFO] [stderr] 97 | buf[0] = ((value & 0x00000000000000FF) >> 0) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x0000_0000_0000_00FF` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:98:32 [INFO] [stderr] | [INFO] [stderr] 98 | buf[1] = ((value & 0x000000000000FF00) >> 8) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x0000_0000_0000_FF00` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:99:32 [INFO] [stderr] | [INFO] [stderr] 99 | buf[2] = ((value & 0x0000000000FF0000) >> 16) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x0000_0000_00FF_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:100:32 [INFO] [stderr] | [INFO] [stderr] 100 | buf[3] = ((value & 0x00000000FF000000) >> 24) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x0000_0000_FF00_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:101:32 [INFO] [stderr] | [INFO] [stderr] 101 | buf[4] = ((value & 0x000000FF00000000) >> 32) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x0000_00FF_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:102:32 [INFO] [stderr] | [INFO] [stderr] 102 | buf[5] = ((value & 0x0000FF0000000000) >> 40) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x0000_FF00_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:103:32 [INFO] [stderr] | [INFO] [stderr] 103 | buf[6] = ((value & 0x00FF000000000000) >> 48) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x00FF_0000_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/relations.rs:104:32 [INFO] [stderr] | [INFO] [stderr] 104 | buf[7] = ((value & 0xFF00000000000000) >> 52) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0xFF00_0000_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around assigned value [INFO] [stderr] --> src/relations.rs:363:72 [INFO] [stderr] | [INFO] [stderr] 363 | self.docs_terms[tune_id * self.word_capacity + word_offset] |= (1 << bit_offset); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around assigned value [INFO] [stderr] --> src/relations.rs:380:39 [INFO] [stderr] | [INFO] [stderr] 380 | words[word_offset] |= (1 << bit_offset); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: unused import: `storage` [INFO] [stderr] --> src/search.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use storage; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `serde` [INFO] [stderr] --> src/search.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | use serde; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `serde_derive` [INFO] [stderr] --> src/search.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | use serde_derive; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `serde_json` [INFO] [stderr] --> src/search.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | use serde_json; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `abc_lexer` [INFO] [stderr] --> src/server.rs:1:5 [INFO] [stderr] | [INFO] [stderr] 1 | use abc_lexer; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `relations` [INFO] [stderr] --> src/server.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use relations; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `tune_ast_three` [INFO] [stderr] --> src/server.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use tune_ast_three; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `typeset` [INFO] [stderr] --> src/server.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use typeset; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/storage.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:127:38 [INFO] [stderr] | [INFO] [stderr] 127 | metadata_buf[0] = (tune_id & 0x000000FF) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_00FF` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:128:39 [INFO] [stderr] | [INFO] [stderr] 128 | metadata_buf[1] = ((tune_id & 0x0000FF00) >> 8) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_FF00` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:129:39 [INFO] [stderr] | [INFO] [stderr] 129 | metadata_buf[2] = ((tune_id & 0x00FF0000) >> 16) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x00FF_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:130:39 [INFO] [stderr] | [INFO] [stderr] 130 | metadata_buf[3] = ((tune_id & 0xFF000000) >> 24) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFF00_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:132:37 [INFO] [stderr] | [INFO] [stderr] 132 | metadata_buf[4] = (length & 0x000000FF) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_00FF` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:133:38 [INFO] [stderr] | [INFO] [stderr] 133 | metadata_buf[5] = ((length & 0x0000FF00) >> 8) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0000_FF00` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:134:38 [INFO] [stderr] | [INFO] [stderr] 134 | metadata_buf[6] = ((length & 0x00FF0000) >> 16) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x00FF_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/storage.rs:135:38 [INFO] [stderr] | [INFO] [stderr] 135 | metadata_buf[7] = ((length & 0xFF000000) >> 24) as u8; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0xFF00_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused variable: `visible` [INFO] [stderr] --> src/abc_lexer.rs:788:15 [INFO] [stderr] | [INFO] [stderr] 788 | let (ctx, visible) = match ctx.first() { [INFO] [stderr] | ^^^^^^^ help: consider using `_visible` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `key_signature` is assigned to, but never used [INFO] [stderr] --> src/pitch.rs:11:13 [INFO] [stderr] | [INFO] [stderr] 11 | let mut key_signature = l::T::KeySignature( [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_key_signature` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `key_signature` is never read [INFO] [stderr] --> src/pitch.rs:22:17 [INFO] [stderr] | [INFO] [stderr] 22 | key_signature = l::T::KeySignature(*pitch_class, *mode) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `duration` [INFO] [stderr] --> src/pitch.rs:33:44 [INFO] [stderr] | [INFO] [stderr] 33 | let music::Note(pitch, duration) = note; [INFO] [stderr] | ^^^^^^^^ help: consider using `_duration` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `max` [INFO] [stderr] --> src/pitch.rs:74:9 [INFO] [stderr] | [INFO] [stderr] 74 | let max = HISTOGRAM_WIDTH as i16; [INFO] [stderr] | ^^^ help: consider using `_max` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `min` [INFO] [stderr] --> src/pitch.rs:75:9 [INFO] [stderr] | [INFO] [stderr] 75 | let min = HISTOGRAM_WIDTH as i16 * -1; [INFO] [stderr] | ^^^ help: consider using `_min` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/server.rs:98:24 [INFO] [stderr] | [INFO] [stderr] 98 | Ok(v) => { [INFO] [stderr] | ^ help: consider using `_v` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `groups` [INFO] [stderr] --> src/server.rs:177:28 [INFO] [stderr] | [INFO] [stderr] 177 | } else if let Some(groups) = re_search.captures(request.url()) { [INFO] [stderr] | ^^^^^^ help: consider using `_groups` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/tune_ast_three.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | let mut i = 0; [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] [INFO] [stderr] warning: variable `key_signature` is assigned to, but never used [INFO] [stderr] --> src/typeset.rs:565:13 [INFO] [stderr] | [INFO] [stderr] 565 | let mut key_signature = l::T::KeySignature( [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_key_signature` instead [INFO] [stderr] [INFO] [stderr] warning: variable `metre` is assigned to, but never used [INFO] [stderr] --> src/typeset.rs:572:13 [INFO] [stderr] | [INFO] [stderr] 572 | let mut metre = music::Metre(4, 4); [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: consider using `_metre` instead [INFO] [stderr] [INFO] [stderr] warning: value assigned to `key_signature` is never read [INFO] [stderr] --> src/typeset.rs:580:17 [INFO] [stderr] | [INFO] [stderr] 580 | key_signature = l::T::KeySignature(*pitch_class, *mode) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: value assigned to `metre` is never read [INFO] [stderr] --> src/typeset.rs:582:39 [INFO] [stderr] | [INFO] [stderr] 582 | l::T::Metre(new_metre) => metre = *new_metre, [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `score` [INFO] [stderr] --> src/main.rs:202:29 [INFO] [stderr] | [INFO] [stderr] 202 | for (b, score) in results { [INFO] [stderr] | ^^^^^ help: consider using `_score` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `a_id` [INFO] [stderr] --> src/search.rs:49:26 [INFO] [stderr] | [INFO] [stderr] 49 | result.sort_by(|(a_id, a_score), (b_id, b_score)| { [INFO] [stderr] | ^^^^ help: consider using `_a_id` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `b_id` [INFO] [stderr] --> src/search.rs:49:43 [INFO] [stderr] | [INFO] [stderr] 49 | result.sort_by(|(a_id, a_score), (b_id, b_score)| { [INFO] [stderr] | ^^^^ help: consider using `_b_id` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `features` [INFO] [stderr] --> src/search.rs:95:13 [INFO] [stderr] | [INFO] [stderr] 95 | let features = representations::asts_to_features_s(&asts); [INFO] [stderr] | ^^^^^^^^ help: consider using `_features` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `shape` [INFO] [stderr] --> src/typeset.rs:162:53 [INFO] [stderr] | [INFO] [stderr] 162 | Some(music::DurationGlyph { shape, dots }) => HEAD_WIDTH * dots as f32, [INFO] [stderr] | ^^^^^ help: try ignoring the field: `shape: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `shape` [INFO] [stderr] --> src/typeset.rs:188:49 [INFO] [stderr] | [INFO] [stderr] 188 | Some(music::DurationGlyph { shape, dots }) => { [INFO] [stderr] | ^^^^^ help: try ignoring the field: `shape: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `dots` [INFO] [stderr] --> src/typeset.rs:188:56 [INFO] [stderr] | [INFO] [stderr] 188 | Some(music::DurationGlyph { shape, dots }) => { [INFO] [stderr] | ^^^^ help: try ignoring the field: `dots: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `justifiable_scale` [INFO] [stderr] --> src/typeset.rs:464:13 [INFO] [stderr] | [INFO] [stderr] 464 | let justifiable_scale = [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using `_justifiable_scale` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:183:9 [INFO] [stderr] | [INFO] [stderr] 183 | let mut interval_term_vsm = representations::intervals_to_binary_vsm(&intervals); [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/relations.rs:358:13 [INFO] [stderr] | [INFO] [stderr] 358 | let mut term_id = self.get_term_id(term.clone().to_owned()); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/relations.rs:433:13 [INFO] [stderr] | [INFO] [stderr] 433 | let mut results = ResultSet::new(); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/tune_ast_three.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | let mut i = 0; [INFO] [stderr] | ----^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/typeset.rs:575:9 [INFO] [stderr] | [INFO] [stderr] 575 | let mut current_clef = music::Clef::treble(); [INFO] [stderr] | ----^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: method is never used: `rest` [INFO] [stderr] --> src/abc_lexer.rs:198:5 [INFO] [stderr] | [INFO] [stderr] 198 | fn rest(&self) -> &'a [char] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `DefaultNoteLenth` [INFO] [stderr] --> src/abc_lexer.rs:836:5 [INFO] [stderr] | [INFO] [stderr] 836 | DefaultNoteLenth, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `NoteDurationDenomenator` [INFO] [stderr] --> src/abc_lexer.rs:846:5 [INFO] [stderr] | [INFO] [stderr] 846 | NoteDurationDenomenator, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `UnrecognisedRest` [INFO] [stderr] --> src/abc_lexer.rs:896:5 [INFO] [stderr] | [INFO] [stderr] 896 | UnrecognisedRest, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `ts` [INFO] [stderr] --> src/abc_lexer.rs:1134:5 [INFO] [stderr] | [INFO] [stderr] 1134 | fn ts(ctx: Context<'a>, ts: Vec) -> LexResult<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `string_to_vec` [INFO] [stderr] --> src/end_to_end_test.rs:3:1 [INFO] [stderr] | [INFO] [stderr] 3 | fn string_to_vec(input: String) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Natural` [INFO] [stderr] --> src/music.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | Natural, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `scale_intervals` [INFO] [stderr] --> src/music.rs:117:5 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn scale_intervals(&self) -> &[u16] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `pitch` [INFO] [stderr] --> src/music.rs:140:5 [INFO] [stderr] | [INFO] [stderr] 140 | pub fn pitch(&self) -> PitchClass { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `HISTOGRAM_SIZE` [INFO] [stderr] --> src/pitch.rs:66:1 [INFO] [stderr] | [INFO] [stderr] 66 | const HISTOGRAM_SIZE: usize = 12; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `HISTOGRAM_WIDTH` [INFO] [stderr] --> src/pitch.rs:69:1 [INFO] [stderr] | [INFO] [stderr] 69 | pub const HISTOGRAM_WIDTH: usize = HISTOGRAM_SIZE + HISTOGRAM_SIZE + 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `build_interval_histogram` [INFO] [stderr] --> src/pitch.rs:71:1 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn build_interval_histogram(pitches: &Vec) -> [f32; HISTOGRAM_WIDTH] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `sim_interval_histogram` [INFO] [stderr] --> src/pitch.rs:96:1 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn sim_interval_histogram(a: &[f32; HISTOGRAM_WIDTH], b: &[f32; HISTOGRAM_WIDTH]) -> f32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get` [INFO] [stderr] --> src/relations.rs:178:5 [INFO] [stderr] | [INFO] [stderr] 178 | pub fn get(&self, a: usize) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `num_groups` [INFO] [stderr] --> src/relations.rs:206:5 [INFO] [stderr] | [INFO] [stderr] 206 | pub fn num_groups(&self) -> usize { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_groups` [INFO] [stderr] --> src/relations.rs:242:5 [INFO] [stderr] | [INFO] [stderr] 242 | pub fn get_groups(&self) -> Vec> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `next_ungrouped_after` [INFO] [stderr] --> src/relations.rs:253:5 [INFO] [stderr] | [INFO] [stderr] 253 | pub fn next_ungrouped_after(&self, a: u32) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `print_debug_tunes` [INFO] [stderr] --> src/relations.rs:444:5 [INFO] [stderr] | [INFO] [stderr] 444 | pub fn print_debug_tunes(&self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `debug_print_features` [INFO] [stderr] --> src/relations.rs:523:5 [INFO] [stderr] | [INFO] [stderr] 523 | pub fn debug_print_features(&self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `intervals_to_interval_histogram` [INFO] [stderr] --> src/representations.rs:93:1 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn intervals_to_interval_histogram(inputs: &Vec) -> [f32; pitch::HISTOGRAM_WIDTH] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `intervals_to_interval_histogram_s` [INFO] [stderr] --> src/representations.rs:97:1 [INFO] [stderr] | [INFO] [stderr] 97 | / pub fn intervals_to_interval_histogram_s( [INFO] [stderr] 98 | | inputs: &HashMap>, [INFO] [stderr] 99 | | ) -> HashMap { [INFO] [stderr] 100 | | let mut result = HashMap::with_capacity(inputs.len()); [INFO] [stderr] ... | [INFO] [stderr] 106 | | result [INFO] [stderr] 107 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `clusters` [INFO] [stderr] --> src/search.rs:73:5 [INFO] [stderr] | [INFO] [stderr] 73 | clusters: relations::Clusters, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `point_debug` [INFO] [stderr] --> src/svg.rs:139:5 [INFO] [stderr] | [INFO] [stderr] 139 | pub fn point_debug(&mut self, x: f32, y: f32, w: f32, h: f32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Typesetting` [INFO] [stderr] --> src/typeset.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | pub struct Typesetting {} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/typeset.rs:37:5 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn new() -> Typesetting { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `main_server_new` [INFO] [stderr] --> src/main.rs:131:1 [INFO] [stderr] | [INFO] [stderr] 131 | fn main_server_new() {} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `prefix` [INFO] [stderr] --> src/abc_lexer.rs:177:22 [INFO] [stderr] | [INFO] [stderr] 177 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 177 | for (i, ) in prefix.iter().enumerate().take(len) { [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/abc_lexer.rs:213:1 [INFO] [stderr] | [INFO] [stderr] 213 | / fn read_until<'a>( [INFO] [stderr] 214 | | ctx: Context<'a>, [INFO] [stderr] 215 | | delimiter: char, [INFO] [stderr] 216 | | ) -> Result<(Context<'a>, &'a [char]), Context<'a>> { [INFO] [stderr] ... | [INFO] [stderr] 225 | | } [INFO] [stderr] 226 | | } [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/abc_lexer.rs:311:13 [INFO] [stderr] | [INFO] [stderr] 311 | ctx.clone().skip(length), [INFO] [stderr] | ^^^^^^^^^^^ help: try removing the `clone` call: `ctx` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [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/abc_lexer.rs:321:1 [INFO] [stderr] | [INFO] [stderr] 321 | / fn lex_note_length<'a>(ctx: Context<'a>, delimiter: char) -> LexResult { [INFO] [stderr] 322 | | match read_until(ctx, delimiter) { [INFO] [stderr] 323 | | Err(ctx) => LexResult::Error(ctx, ctx.i, LexError::PrematureEnd(During::Metre)), [INFO] [stderr] 324 | | [INFO] [stderr] ... | [INFO] [stderr] 355 | | } [INFO] [stderr] 356 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:359:1 [INFO] [stderr] | [INFO] [stderr] 359 | / fn lex_metre<'a>(ctx: Context<'a>, delimiter: char) -> LexResult { [INFO] [stderr] 360 | | // Read the whole line. This does two things: [INFO] [stderr] 361 | | // 1 - Check that the field is actually delimited. [INFO] [stderr] 362 | | // 2 - Provide a slice that we can compare to literal values like "C|". [INFO] [stderr] ... | [INFO] [stderr] 407 | | } [INFO] [stderr] 408 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/abc_lexer.rs:374:16 [INFO] [stderr] | [INFO] [stderr] 374 | if content == &['C'] { [INFO] [stderr] | ^^^^^^^^^^^------ [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `['C']` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/abc_lexer.rs:376:23 [INFO] [stderr] | [INFO] [stderr] 376 | } else if content == &['C', '|'] { [INFO] [stderr] | ^^^^^^^^^^^----------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `['C', '|']` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [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/abc_lexer.rs:411:1 [INFO] [stderr] | [INFO] [stderr] 411 | / fn read_key_note<'a>(ctx: Context<'a>) -> Option<(Context<'a>, music::PitchClass)> { [INFO] [stderr] 412 | | let (ctx, diatonic) = match ctx.first() { [INFO] [stderr] 413 | | Some((ctx, 'A')) => (ctx, Some(music::DiatonicPitchClass::A)), [INFO] [stderr] 414 | | Some((ctx, 'B')) => (ctx, Some(music::DiatonicPitchClass::B)), [INFO] [stderr] ... | [INFO] [stderr] 485 | | } [INFO] [stderr] 486 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:489:1 [INFO] [stderr] | [INFO] [stderr] 489 | / pub fn read_mode<'a>(ctx: Context<'a>) -> Option<(Context<'a>, music::Mode)> { [INFO] [stderr] 490 | | let ctx = ctx.skip_whitespace(); [INFO] [stderr] 491 | | [INFO] [stderr] 492 | | // Read both long and short forms, and leave ctx at the end if whichever matched. [INFO] [stderr] ... | [INFO] [stderr] 539 | | } [INFO] [stderr] 540 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:543:1 [INFO] [stderr] | [INFO] [stderr] 543 | / fn read_fractional_duration<'a>(ctx: Context<'a>) -> (Context, music::FractionalDuration) { [INFO] [stderr] 544 | | // Get a number, if present. [INFO] [stderr] 545 | | let (ctx, numerator) = match read_number(ctx, NumberRole::NoteDurationNumerator) { [INFO] [stderr] 546 | | Ok((ctx, val)) => (ctx, Some(val)), [INFO] [stderr] ... | [INFO] [stderr] 590 | | (ctx, music::FractionalDuration(numerator, denomenator)) [INFO] [stderr] 591 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:593:1 [INFO] [stderr] | [INFO] [stderr] 593 | / fn lex_key_signature<'a>(ctx: Context<'a>, delimiter: char) -> LexResult { [INFO] [stderr] 594 | | match read_until(ctx, delimiter) { [INFO] [stderr] 595 | | Err(ctx) => LexResult::Error(ctx, ctx.i, LexError::PrematureEnd(During::KeySignature)), [INFO] [stderr] 596 | | [INFO] [stderr] ... | [INFO] [stderr] 615 | | } [INFO] [stderr] 616 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:618:1 [INFO] [stderr] | [INFO] [stderr] 618 | / fn lex_guitar_chord<'a>(ctx: Context<'a>) -> LexResult { [INFO] [stderr] 619 | | match read_until(ctx, '"') { [INFO] [stderr] 620 | | Err(ctx) => LexResult::Error(ctx, ctx.i, LexError::PrematureEnd(During::GuitarChord)), [INFO] [stderr] 621 | | Ok((ctx, content)) => LexResult::t(ctx, T::GuitarChord(String::from_iter(content.iter()))), [INFO] [stderr] 622 | | } [INFO] [stderr] 623 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:626:1 [INFO] [stderr] | [INFO] [stderr] 626 | / fn read_n_time<'a>(ctx: Context<'a>) -> (Context<'a>, Option) { [INFO] [stderr] 627 | | let ctx = ctx.skip_optional_prefix(&['[']); [INFO] [stderr] 628 | | [INFO] [stderr] 629 | | match read_number(ctx, NumberRole::NTimeBar) { [INFO] [stderr] ... | [INFO] [stderr] 632 | | } [INFO] [stderr] 633 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:637:1 [INFO] [stderr] | [INFO] [stderr] 637 | / fn lex_barline<'a>(ctx: Context<'a>) -> LexResult { [INFO] [stderr] 638 | | // Every barline includes some kind of beam break. [INFO] [stderr] 639 | | [INFO] [stderr] 640 | | if let (ctx, true) = ctx.starts_with_insensitive_eager(&[':', '|', ':']) { [INFO] [stderr] ... | [INFO] [stderr] 708 | | } [INFO] [stderr] 709 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:711:1 [INFO] [stderr] | [INFO] [stderr] 711 | / fn lex_note<'a>(ctx: Context<'a>) -> LexResult { [INFO] [stderr] 712 | | // Optional accidental. [INFO] [stderr] 713 | | let (ctx, accidental) = if let (ctx, true) = ctx.starts_with_insensitive_eager(&['^', '^']) { [INFO] [stderr] 714 | | (ctx, Some(music::Accidental::DoubleSharp)) [INFO] [stderr] ... | [INFO] [stderr] 784 | | } [INFO] [stderr] 785 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:787:1 [INFO] [stderr] | [INFO] [stderr] 787 | / fn lex_rest<'a>(ctx: Context<'a>) -> LexResult { [INFO] [stderr] 788 | | let (ctx, visible) = match ctx.first() { [INFO] [stderr] 789 | | Some((ctx, 'z')) | Some((ctx, 'Z')) => (ctx, true), [INFO] [stderr] 790 | | Some((ctx, 'x')) | Some((ctx, 'X')) => (ctx, false), [INFO] [stderr] ... | [INFO] [stderr] 796 | | LexResult::t(ctx, T::Rest(duration)) [INFO] [stderr] 797 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [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/abc_lexer.rs:802:1 [INFO] [stderr] | [INFO] [stderr] 802 | / fn lex_dottage<'a>(ctx: Context<'a>) -> LexResult { [INFO] [stderr] 803 | | // Every barline includes some kind of beam break. [INFO] [stderr] 804 | | [INFO] [stderr] 805 | | if let (ctx, true) = ctx.starts_with_insensitive_eager(&['>', '>', '>', '>']) { [INFO] [stderr] ... | [INFO] [stderr] 823 | | } [INFO] [stderr] 824 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/abc_lexer.rs:905:68 [INFO] [stderr] | [INFO] [stderr] 905 | fn indent_and_append_line(indent: usize, buf: &mut String, string: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/abc_lexer.rs:925:9 [INFO] [stderr] | [INFO] [stderr] 925 | / match self { [INFO] [stderr] 926 | | &LexError::ExpectedDelimiter(chr) => { [INFO] [stderr] 927 | | // Printing \n is confusing. [INFO] [stderr] 928 | | if chr == '\n' { [INFO] [stderr] ... | [INFO] [stderr] 1092 | | } [INFO] [stderr] 1093 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 925 | match *self { [INFO] [stderr] 926 | LexError::ExpectedDelimiter(chr) => { [INFO] [stderr] 927 | // Printing \n is confusing. [INFO] [stderr] 928 | if chr == '\n' { [INFO] [stderr] 929 | buf.push_str("I expected to find a new-line here."); [INFO] [stderr] 930 | } else { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/abc_lexer.rs:976:17 [INFO] [stderr] | [INFO] [stderr] 976 | / match number_role { [INFO] [stderr] 977 | | &NumberRole::UpperTimeSignature => indent_and_append_line( [INFO] [stderr] 978 | | indent, [INFO] [stderr] 979 | | buf, [INFO] [stderr] ... | [INFO] [stderr] 1017 | | ), [INFO] [stderr] 1018 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 976 | match *number_role { [INFO] [stderr] 977 | NumberRole::UpperTimeSignature => indent_and_append_line( [INFO] [stderr] 978 | indent, [INFO] [stderr] 979 | buf, [INFO] [stderr] 980 | &"I expected the first / upper part of a time signature.".to_string(), [INFO] [stderr] 981 | ), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/abc_lexer.rs:1028:17 [INFO] [stderr] | [INFO] [stderr] 1028 | / match during { [INFO] [stderr] 1029 | | &During::Metre => indent_and_append_line( [INFO] [stderr] 1030 | | indent, [INFO] [stderr] 1031 | | buf, [INFO] [stderr] ... | [INFO] [stderr] 1053 | | ), [INFO] [stderr] 1054 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1028 | match *during { [INFO] [stderr] 1029 | During::Metre => indent_and_append_line( [INFO] [stderr] 1030 | indent, [INFO] [stderr] 1031 | buf, [INFO] [stderr] 1032 | &"I was in the middle of reading a time signature".to_string(), [INFO] [stderr] 1033 | ), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/abc_lexer.rs:1389:24 [INFO] [stderr] | [INFO] [stderr] 1389 | self.context = self.context.clone().skip(skip_amount); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.context` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/abc_lexer.rs:1394:27 [INFO] [stderr] | [INFO] [stderr] 1394 | let result = read(self.context.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.context` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/abc_lexer.rs:1402:32 [INFO] [stderr] | [INFO] [stderr] 1402 | self.context = context.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `context` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/abc_lexer.rs:1409:32 [INFO] [stderr] | [INFO] [stderr] 1409 | self.context = context.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `context` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `input` [INFO] [stderr] --> src/abc_lexer.rs:1448:14 [INFO] [stderr] | [INFO] [stderr] 1448 | for i in 0..input.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 1448 | for (i, ) in input.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:7:9 [INFO] [stderr] | [INFO] [stderr] 7 | for ref token in ast.prelude.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------------ help: try: `let token = &ast.prelude.iter();` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/features.rs:8:9 [INFO] [stderr] | [INFO] [stderr] 8 | / match *token { [INFO] [stderr] 9 | | l::T::KeySignature(pitch_class, mode) => { [INFO] [stderr] 10 | | result.push(("key".to_string(), pitch_class.to_string())); [INFO] [stderr] 11 | | result.push(("mode".to_string(), mode.to_string())); [INFO] [stderr] ... | [INFO] [stderr] 17 | | _ => (), [INFO] [stderr] 18 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 8 | if let l::T::KeySignature(pitch_class, mode) = *token { [INFO] [stderr] 9 | result.push(("key".to_string(), pitch_class.to_string())); [INFO] [stderr] 10 | result.push(("mode".to_string(), mode.to_string())); [INFO] [stderr] 11 | result.push(( [INFO] [stderr] 12 | "key-signature".to_string(), [INFO] [stderr] 13 | format!("{}-{}", pitch_class.to_string(), mode.to_string()), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:21:9 [INFO] [stderr] | [INFO] [stderr] 21 | for ref voice in ast.voices.iter() { [INFO] [stderr] | ^^^^^^^^^ ----------------- help: try: `let voice = &ast.voices.iter();` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | for ref token in voice.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------ help: try: `let token = &voice.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/features.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | / match *token { [INFO] [stderr] 24 | | l::T::KeySignature(pitch_class, mode) => { [INFO] [stderr] 25 | | result.push(("key".to_string(), pitch_class.to_string())); [INFO] [stderr] 26 | | result.push(("mode".to_string(), mode.to_string())); [INFO] [stderr] ... | [INFO] [stderr] 32 | | _ => (), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 23 | if let l::T::KeySignature(pitch_class, mode) = *token { [INFO] [stderr] 24 | result.push(("key".to_string(), pitch_class.to_string())); [INFO] [stderr] 25 | result.push(("mode".to_string(), mode.to_string())); [INFO] [stderr] 26 | result.push(( [INFO] [stderr] 27 | "key-signature".to_string(), [INFO] [stderr] 28 | format!("{}-{}", pitch_class.to_string(), mode.to_string()), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | for ref token in ast.prelude.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------------ help: try: `let token = &ast.prelude.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/features.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | / match *token { [INFO] [stderr] 42 | | l::T::Metre(metre) => { [INFO] [stderr] 43 | | let music::Metre(numerator, _) = metre; [INFO] [stderr] 44 | | result.push(("metre".to_string(), metre.to_string())); [INFO] [stderr] ... | [INFO] [stderr] 47 | | _ => (), [INFO] [stderr] 48 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 41 | if let l::T::Metre(metre) = *token { [INFO] [stderr] 42 | let music::Metre(numerator, _) = metre; [INFO] [stderr] 43 | result.push(("metre".to_string(), metre.to_string())); [INFO] [stderr] 44 | result.push(("metre-beats".to_string(), numerator.to_string())); [INFO] [stderr] 45 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:51:9 [INFO] [stderr] | [INFO] [stderr] 51 | for ref voice in ast.voices.iter() { [INFO] [stderr] | ^^^^^^^^^ ----------------- help: try: `let voice = &ast.voices.iter();` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:52:13 [INFO] [stderr] | [INFO] [stderr] 52 | for ref token in voice.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------ help: try: `let token = &voice.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/features.rs:53:13 [INFO] [stderr] | [INFO] [stderr] 53 | / match *token { [INFO] [stderr] 54 | | l::T::Metre(metre) => { [INFO] [stderr] 55 | | let music::Metre(numerator, _) = metre; [INFO] [stderr] 56 | | result.push(("metre".to_string(), metre.to_string())); [INFO] [stderr] ... | [INFO] [stderr] 59 | | _ => (), [INFO] [stderr] 60 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 53 | if let l::T::Metre(metre) = *token { [INFO] [stderr] 54 | let music::Metre(numerator, _) = metre; [INFO] [stderr] 55 | result.push(("metre".to_string(), metre.to_string())); [INFO] [stderr] 56 | result.push(("metre-beats".to_string(), numerator.to_string())); [INFO] [stderr] 57 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:67:9 [INFO] [stderr] | [INFO] [stderr] 67 | for ref token in ast.prelude.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------------ help: try: `let token = &ast.prelude.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/features.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | / match *token { [INFO] [stderr] 69 | | // TODO normalize [INFO] [stderr] 70 | | l::T::Rhythm(value) => { [INFO] [stderr] 71 | | result.push(("rhythm".to_string(), value.to_string())); [INFO] [stderr] 72 | | } [INFO] [stderr] 73 | | _ => (), [INFO] [stderr] 74 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 68 | if let l::T::Rhythm(value) = *token { [INFO] [stderr] 69 | result.push(("rhythm".to_string(), value.to_string())); [INFO] [stderr] 70 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | for ref voice in ast.voices.iter() { [INFO] [stderr] | ^^^^^^^^^ ----------------- help: try: `let voice = &ast.voices.iter();` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/features.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | for ref token in voice.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------ help: try: `let token = &voice.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/features.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | / match *token { [INFO] [stderr] 80 | | l::T::Rhythm(value) => { [INFO] [stderr] 81 | | result.push(("rhythm".to_string(), value.to_string())); [INFO] [stderr] 82 | | } [INFO] [stderr] 83 | | _ => (), [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 79 | if let l::T::Rhythm(value) = *token { [INFO] [stderr] 80 | result.push(("rhythm".to_string(), value.to_string())); [INFO] [stderr] 81 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:15:22 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn to_degree(&self) -> i16 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / match self { [INFO] [stderr] 17 | | &DiatonicPitchClass::C => 0, [INFO] [stderr] 18 | | &DiatonicPitchClass::D => 1, [INFO] [stderr] 19 | | &DiatonicPitchClass::E => 2, [INFO] [stderr] ... | [INFO] [stderr] 23 | | &DiatonicPitchClass::B => 6, [INFO] [stderr] 24 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 16 | match *self { [INFO] [stderr] 17 | DiatonicPitchClass::C => 0, [INFO] [stderr] 18 | DiatonicPitchClass::D => 1, [INFO] [stderr] 19 | DiatonicPitchClass::E => 2, [INFO] [stderr] 20 | DiatonicPitchClass::F => 3, [INFO] [stderr] 21 | DiatonicPitchClass::G => 4, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:27:25 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn to_chromatic(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | / match self { [INFO] [stderr] 29 | | &DiatonicPitchClass::C => 0, [INFO] [stderr] 30 | | &DiatonicPitchClass::D => 2, [INFO] [stderr] 31 | | &DiatonicPitchClass::E => 4, [INFO] [stderr] ... | [INFO] [stderr] 35 | | &DiatonicPitchClass::B => 11, [INFO] [stderr] 36 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 28 | match *self { [INFO] [stderr] 29 | DiatonicPitchClass::C => 0, [INFO] [stderr] 30 | DiatonicPitchClass::D => 2, [INFO] [stderr] 31 | DiatonicPitchClass::E => 4, [INFO] [stderr] 32 | DiatonicPitchClass::F => 5, [INFO] [stderr] 33 | DiatonicPitchClass::G => 7, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:39:22 [INFO] [stderr] | [INFO] [stderr] 39 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / match self { [INFO] [stderr] 41 | | &DiatonicPitchClass::C => "C".to_string(), [INFO] [stderr] 42 | | &DiatonicPitchClass::D => "D".to_string(), [INFO] [stderr] 43 | | &DiatonicPitchClass::E => "E".to_string(), [INFO] [stderr] ... | [INFO] [stderr] 47 | | &DiatonicPitchClass::B => "B".to_string(), [INFO] [stderr] 48 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 40 | match *self { [INFO] [stderr] 41 | DiatonicPitchClass::C => "C".to_string(), [INFO] [stderr] 42 | DiatonicPitchClass::D => "D".to_string(), [INFO] [stderr] 43 | DiatonicPitchClass::E => "E".to_string(), [INFO] [stderr] 44 | DiatonicPitchClass::F => "F".to_string(), [INFO] [stderr] 45 | DiatonicPitchClass::G => "G".to_string(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:62:22 [INFO] [stderr] | [INFO] [stderr] 62 | pub fn semitones(&self) -> i16 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:63:9 [INFO] [stderr] | [INFO] [stderr] 63 | / match self { [INFO] [stderr] 64 | | &Accidental::Sharp => 1, [INFO] [stderr] 65 | | &Accidental::Flat => -1, [INFO] [stderr] 66 | | &Accidental::Natural => 0, [INFO] [stderr] 67 | | &Accidental::DoubleSharp => 2, [INFO] [stderr] 68 | | &Accidental::DoubleFlat => -2, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 63 | match *self { [INFO] [stderr] 64 | Accidental::Sharp => 1, [INFO] [stderr] 65 | Accidental::Flat => -1, [INFO] [stderr] 66 | Accidental::Natural => 0, [INFO] [stderr] 67 | Accidental::DoubleSharp => 2, [INFO] [stderr] 68 | Accidental::DoubleFlat => -2, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:72:22 [INFO] [stderr] | [INFO] [stderr] 72 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Accidental::Sharp => "♯".to_string(), [INFO] [stderr] 75 | | &Accidental::Flat => "♭".to_string(), [INFO] [stderr] 76 | | &Accidental::Natural => "♮".to_string(), [INFO] [stderr] 77 | | &Accidental::DoubleSharp => "𝄪".to_string(), [INFO] [stderr] 78 | | &Accidental::DoubleFlat => "𝄫".to_string(), [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Accidental::Sharp => "♯".to_string(), [INFO] [stderr] 75 | Accidental::Flat => "♭".to_string(), [INFO] [stderr] 76 | Accidental::Natural => "♮".to_string(), [INFO] [stderr] 77 | Accidental::DoubleSharp => "𝄪".to_string(), [INFO] [stderr] 78 | Accidental::DoubleFlat => "𝄫".to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:102:22 [INFO] [stderr] | [INFO] [stderr] 102 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / match self { [INFO] [stderr] 104 | | &Mode::Natural => "Natural".to_string(), [INFO] [stderr] 105 | | &Mode::Lydian => "Lydian".to_string(), [INFO] [stderr] 106 | | &Mode::Ionian => "Ionian".to_string(), [INFO] [stderr] ... | [INFO] [stderr] 113 | | &Mode::Minor => "Minor".to_string(), [INFO] [stderr] 114 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 103 | match *self { [INFO] [stderr] 104 | Mode::Natural => "Natural".to_string(), [INFO] [stderr] 105 | Mode::Lydian => "Lydian".to_string(), [INFO] [stderr] 106 | Mode::Ionian => "Ionian".to_string(), [INFO] [stderr] 107 | Mode::Mixolydian => "Mixolydian".to_string(), [INFO] [stderr] 108 | Mode::Dorian => "Dorian".to_string(), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:118:9 [INFO] [stderr] | [INFO] [stderr] 118 | / match self { [INFO] [stderr] 119 | | &Mode::Natural => &[2, 2, 1, 2, 2, 2, 1], [INFO] [stderr] 120 | | &Mode::Lydian => &[2, 2, 2, 1, 2, 2, 1], [INFO] [stderr] 121 | | &Mode::Ionian => &[2, 2, 1, 2, 2, 2, 1], [INFO] [stderr] ... | [INFO] [stderr] 128 | | &Mode::Minor => &[2, 1, 2, 2, 2, 1, 2], [INFO] [stderr] 129 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 118 | match *self { [INFO] [stderr] 119 | Mode::Natural => &[2, 2, 1, 2, 2, 2, 1], [INFO] [stderr] 120 | Mode::Lydian => &[2, 2, 2, 1, 2, 2, 1], [INFO] [stderr] 121 | Mode::Ionian => &[2, 2, 1, 2, 2, 2, 1], [INFO] [stderr] 122 | Mode::Mixolydian => &[2, 2, 1, 2, 2, 1, 2], [INFO] [stderr] 123 | Mode::Dorian => &[2, 1, 2, 2, 2, 1, 2], [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:140:18 [INFO] [stderr] | [INFO] [stderr] 140 | pub fn pitch(&self) -> PitchClass { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:182:25 [INFO] [stderr] | [INFO] [stderr] 182 | pub fn to_chromatic(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/music.rs:183:10 [INFO] [stderr] | [INFO] [stderr] 183 | (self.diatonic_pitch_class.to_chromatic() as i16 + match self.accidental { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(self.diatonic_pitch_class.to_chromatic())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:189:22 [INFO] [stderr] | [INFO] [stderr] 189 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:221:24 [INFO] [stderr] | [INFO] [stderr] 221 | pub fn interval_to(&self, other: Pitch) -> Interval { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i32 may become silently lossy if types change [INFO] [stderr] --> src/music.rs:235:28 [INFO] [stderr] | [INFO] [stderr] 235 | pitch_classes: degrees as i32, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `i32::from(degrees)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:241:23 [INFO] [stderr] | [INFO] [stderr] 241 | pub fn midi_pitch(&self) -> u8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/music.rs:243:10 [INFO] [stderr] | [INFO] [stderr] 243 | (diatonic_pitch as i16 + (self.octave * 12) + 60) as u8 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `i16::from(diatonic_pitch)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:252:22 [INFO] [stderr] | [INFO] [stderr] 252 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:279:17 [INFO] [stderr] | [INFO] [stderr] 279 | fn duration(&self) -> FractionalDuration { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:280:9 [INFO] [stderr] | [INFO] [stderr] 280 | / match self { [INFO] [stderr] 281 | | &DurationClass::Semibreve => FractionalDuration(1, 1), [INFO] [stderr] 282 | | &DurationClass::Minim => FractionalDuration(1, 2), [INFO] [stderr] 283 | | &DurationClass::Crotchet => FractionalDuration(1, 4), [INFO] [stderr] ... | [INFO] [stderr] 286 | | &DurationClass::Demisemiquaver => FractionalDuration(1, 32), [INFO] [stderr] 287 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 280 | match *self { [INFO] [stderr] 281 | DurationClass::Semibreve => FractionalDuration(1, 1), [INFO] [stderr] 282 | DurationClass::Minim => FractionalDuration(1, 2), [INFO] [stderr] 283 | DurationClass::Crotchet => FractionalDuration(1, 4), [INFO] [stderr] 284 | DurationClass::Quaver => FractionalDuration(1, 8), [INFO] [stderr] 285 | DurationClass::Semiquaver => FractionalDuration(1, 16), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:291:18 [INFO] [stderr] | [INFO] [stderr] 291 | pub fn beams(&self) -> u32 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/music.rs:292:9 [INFO] [stderr] | [INFO] [stderr] 292 | / match self { [INFO] [stderr] 293 | | &DurationClass::Semibreve => 0, [INFO] [stderr] 294 | | &DurationClass::Minim => 0, [INFO] [stderr] 295 | | &DurationClass::Crotchet => 0, [INFO] [stderr] ... | [INFO] [stderr] 298 | | &DurationClass::Demisemiquaver => 3, [INFO] [stderr] 299 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 292 | match *self { [INFO] [stderr] 293 | DurationClass::Semibreve => 0, [INFO] [stderr] 294 | DurationClass::Minim => 0, [INFO] [stderr] 295 | DurationClass::Crotchet => 0, [INFO] [stderr] 296 | DurationClass::Quaver => 1, [INFO] [stderr] 297 | DurationClass::Semiquaver => 2, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/music.rs:334:18 [INFO] [stderr] | [INFO] [stderr] 334 | for i in (1..max + 1).rev() { [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `(1..=max)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:345:16 [INFO] [stderr] | [INFO] [stderr] 345 | pub fn gte(&self, other: &FractionalDuration) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:345:30 [INFO] [stderr] | [INFO] [stderr] 345 | pub fn gte(&self, other: &FractionalDuration) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider passing by value instead: `FractionalDuration` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/music.rs:355:21 [INFO] [stderr] | [INFO] [stderr] 355 | pub fn to_glyph(&self) -> Option { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/music.rs:375:26 [INFO] [stderr] | [INFO] [stderr] 375 | for _ in 0..MAX_DOTS + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: use: `0..=MAX_DOTS` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pitch.rs:19:9 [INFO] [stderr] | [INFO] [stderr] 19 | for ref token in ast.prelude.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------------ help: try: `let token = &ast.prelude.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pitch.rs:20:9 [INFO] [stderr] | [INFO] [stderr] 20 | / match *token { [INFO] [stderr] 21 | | l::T::KeySignature(pitch_class, mode) => { [INFO] [stderr] 22 | | key_signature = l::T::KeySignature(*pitch_class, *mode) [INFO] [stderr] 23 | | } [INFO] [stderr] 24 | | _ => {} [INFO] [stderr] 25 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 20 | if let l::T::KeySignature(pitch_class, mode) = *token { [INFO] [stderr] 21 | key_signature = l::T::KeySignature(*pitch_class, *mode) [INFO] [stderr] 22 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pitch.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | for ref voice in ast.voices.iter() { [INFO] [stderr] | ^^^^^^^^^ ----------------- help: try: `let voice = &ast.voices.iter();` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/pitch.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | for ref token in voice.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------ help: try: `let token = &voice.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pitch.rs:30:13 [INFO] [stderr] | [INFO] [stderr] 30 | / match token { [INFO] [stderr] 31 | | l::T::Note(note) => { [INFO] [stderr] 32 | | // TODO extras like accidentals etc. [INFO] [stderr] 33 | | let music::Note(pitch, duration) = note; [INFO] [stderr] ... | [INFO] [stderr] 38 | | _ => {} [INFO] [stderr] 39 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 30 | if let l::T::Note(note) = token { [INFO] [stderr] 31 | // TODO extras like accidentals etc. [INFO] [stderr] 32 | let music::Note(pitch, duration) = note; [INFO] [stderr] 33 | let midi_pitch = pitch.midi_pitch(); [INFO] [stderr] 34 | result.push(midi_pitch); [INFO] [stderr] 35 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/pitch.rs:46:40 [INFO] [stderr] | [INFO] [stderr] 46 | pub fn pitch_seq_to_intervals(pitches: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/pitch.rs:55:28 [INFO] [stderr] | [INFO] [stderr] 55 | let interval = (*pitch as i16) - last; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i16::from(*pitch)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/pitch.rs:59:16 [INFO] [stderr] | [INFO] [stderr] 59 | last = *pitch as i16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `i16::from(*pitch)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/pitch.rs:71:42 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn build_interval_histogram(pitches: &Vec) -> [f32; HISTOGRAM_WIDTH] { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[i16]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: Negation by multiplying with -1 [INFO] [stderr] --> src/pitch.rs:75:15 [INFO] [stderr] | [INFO] [stderr] 75 | let min = HISTOGRAM_WIDTH as i16 * -1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::neg_multiply)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pitch.rs:86:8 [INFO] [stderr] | [INFO] [stderr] 86 | if pitches.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!pitches.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: the loop variable `i` is only used to index `histogram`. [INFO] [stderr] --> src/pitch.rs:88:18 [INFO] [stderr] | [INFO] [stderr] 88 | for i in 0..HISTOGRAM_WIDTH { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 88 | for in histogram.iter_mut().take(HISTOGRAM_WIDTH) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/relations.rs:63:17 [INFO] [stderr] | [INFO] [stderr] 63 | / match reader.read_exact(&mut buf) { [INFO] [stderr] 64 | | // End of file is ok here. [INFO] [stderr] 65 | | Err(_) => break, [INFO] [stderr] 66 | | _ => (), [INFO] [stderr] 67 | | } [INFO] [stderr] | |_________________^ help: try this: `if let Err(_) = reader.read_exact(&mut buf) { break }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `(value & 0x00000000000000FF)` [INFO] [stderr] --> src/relations.rs:97:22 [INFO] [stderr] | [INFO] [stderr] 97 | buf[0] = ((value & 0x00000000000000FF) >> 0) as u8; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/relations.rs:446:16 [INFO] [stderr] | [INFO] [stderr] 446 | if self.docs_terms_literal[id].len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.docs_terms_literal[id].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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/relations.rs:489:57 [INFO] [stderr] | [INFO] [stderr] 489 | pub fn add(&mut self, tune_id: usize, interval_seq: &Vec) { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[i16]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/relations.rs:497:23 [INFO] [stderr] | [INFO] [stderr] 497 | interval_seq: &Vec, [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[i16]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/representations.rs:20:28 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn abc_to_ast(content: &String) -> tune_ast_three::Tune { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/representations.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | tx_clone.send(partition_result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/representations.rs:79:37 [INFO] [stderr] | [INFO] [stderr] 79 | pub fn pitches_to_intervals(inputs: &Vec) -> Vec { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/representations.rs:93:48 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn intervals_to_interval_histogram(inputs: &Vec) -> [f32; pitch::HISTOGRAM_WIDTH] { [INFO] [stderr] | ^^^^^^^^^ help: change this to: `&[i16]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/server.rs:112:28 [INFO] [stderr] | [INFO] [stderr] 112 | Some(v) if v.len() == 0 => None, [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.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: single-character string constant used as pattern [INFO] [stderr] --> src/server.rs:115:61 [INFO] [stderr] | [INFO] [stderr] 115 | let melody: Result, _> = v.split(",").map(|s| s.parse::()).collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: trivial regex [INFO] [stderr] --> src/server.rs:159:39 [INFO] [stderr] | [INFO] [stderr] 159 | let re_search = regex::Regex::new(r"/search").unwrap(); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivial_regex)] on by default [INFO] [stderr] = help: consider using `str::contains` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivial_regex [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/storage.rs:25:50 [INFO] [stderr] | [INFO] [stderr] 25 | if let Some(first) = file_name.split(".").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'.'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/storage.rs:70:13 [INFO] [stderr] | [INFO] [stderr] 70 | / match reader.read_exact(&mut metadata_buf) { [INFO] [stderr] 71 | | // End of file is ok here. [INFO] [stderr] 72 | | Err(_) => break, [INFO] [stderr] 73 | | _ => (), [INFO] [stderr] 74 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Err(_) = reader.read_exact(&mut metadata_buf) { break }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/storage.rs:76:32 [INFO] [stderr] | [INFO] [stderr] 76 | let tune_id: u32 = (metadata_buf[0] as u32) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(metadata_buf[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/storage.rs:77:19 [INFO] [stderr] | [INFO] [stderr] 77 | | (metadata_buf[1] as u32) << 8 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(metadata_buf[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/storage.rs:78:19 [INFO] [stderr] | [INFO] [stderr] 78 | | (metadata_buf[2] as u32) << 16 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(metadata_buf[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/storage.rs:79:19 [INFO] [stderr] | [INFO] [stderr] 79 | | (metadata_buf[3] as u32) << 24; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(metadata_buf[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: slow zero-filling initialization [INFO] [stderr] --> src/storage.rs:88:13 [INFO] [stderr] | [INFO] [stderr] 87 | let mut string_buf = Vec::with_capacity(length); [INFO] [stderr] | -------------------------- help: consider replace allocation with: `vec![0; length]` [INFO] [stderr] 88 | string_buf.resize(length, 0x0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::slow_vector_initialization)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#slow_vector_initialization [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/storage.rs:90:13 [INFO] [stderr] | [INFO] [stderr] 90 | reader.read_exact(&mut string_buf); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/storage.rs:143:53 [INFO] [stderr] | [INFO] [stderr] 143 | pub fn scan(tunes: &mut HashMap, base: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: the variable `num_scanned` is used as a loop counter. Consider using `for (num_scanned, item) in glob::glob(glob_path.to_str().expect("Can't create path")) [INFO] [stderr] .expect("Failed to read glob pattern").enumerate()` or similar iterators [INFO] [stderr] --> src/storage.rs:154:18 [INFO] [stderr] | [INFO] [stderr] 154 | for entry in glob::glob(glob_path.to_str().expect("Can't create path")) [INFO] [stderr] | __________________^ [INFO] [stderr] 155 | | .expect("Failed to read glob pattern") [INFO] [stderr] | |______________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/storage.rs:161:21 [INFO] [stderr] | [INFO] [stderr] 161 | / if !tunes.contains_key(&tune_id) { [INFO] [stderr] 162 | | let mut content = String::new(); [INFO] [stderr] 163 | | [INFO] [stderr] 164 | | let mut f = File::open(filepath).expect("file not found"); [INFO] [stderr] ... | [INFO] [stderr] 169 | | num_indexed += 1; [INFO] [stderr] 170 | | } [INFO] [stderr] | |_____________________^ help: consider using: `tunes.entry(tune_id)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/svg.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | / match entity { [INFO] [stderr] 43 | | &Entity::Rect(x, y, w, h) => { [INFO] [stderr] 44 | | write!( [INFO] [stderr] 45 | | &mut buf, [INFO] [stderr] ... | [INFO] [stderr] 104 | | } [INFO] [stderr] 105 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 42 | match *entity { [INFO] [stderr] 43 | Entity::Rect(x, y, w, h) => { [INFO] [stderr] 44 | write!( [INFO] [stderr] 45 | &mut buf, [INFO] [stderr] 46 | "", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/typeset.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &HorizontalBox::System(ref stave) => stave.height() + SYSTEM_V_MARGIN, [INFO] [stderr] 74 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 72 | match *self { [INFO] [stderr] 73 | HorizontalBox::System(ref stave) => stave.height() + SYSTEM_V_MARGIN, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/typeset.rs:78:9 [INFO] [stderr] | [INFO] [stderr] 78 | / match self { [INFO] [stderr] 79 | | &HorizontalBox::System(ref stave) => stave.render(svg, y), [INFO] [stderr] 80 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 78 | match *self { [INFO] [stderr] 79 | HorizontalBox::System(ref stave) => stave.render(svg, y), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/typeset.rs:370:29 [INFO] [stderr] | [INFO] [stderr] 370 | / match shape { [INFO] [stderr] 371 | | music::DurationClass::Demisemiquaver => { [INFO] [stderr] 372 | | draw_tail( [INFO] [stderr] 373 | | svg, [INFO] [stderr] ... | [INFO] [stderr] 379 | | _ => (), [INFO] [stderr] 380 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 370 | if let music::DurationClass::Demisemiquaver = shape { [INFO] [stderr] 371 | draw_tail( [INFO] [stderr] 372 | svg, [INFO] [stderr] 373 | x + HEAD_WIDTH, [INFO] [stderr] 374 | stem_y + y + HALF_HEAD_HEIGHT + 16.0, [INFO] [stderr] 375 | ); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `entities`. [INFO] [stderr] --> src/typeset.rs:476:18 [INFO] [stderr] | [INFO] [stderr] 476 | for i in 0..justifiable_start_i { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 476 | for in entities.iter_mut().take(justifiable_start_i) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `entities`. [INFO] [stderr] --> src/typeset.rs:481:18 [INFO] [stderr] | [INFO] [stderr] 481 | for i in justifiable_start_i..justifiable_end_i { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 481 | for in entities.iter_mut().take(justifiable_end_i).skip(justifiable_start_i) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `entities`. [INFO] [stderr] --> src/typeset.rs:488:18 [INFO] [stderr] | [INFO] [stderr] 488 | for i in justifiable_end_i..entities.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 488 | for in entities.iter_mut().skip(justifiable_end_i) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/typeset.rs:519:49 [INFO] [stderr] | [INFO] [stderr] 519 | Glyph::NoteHead(_, duration) => match duration { [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 520 | | Some(duration) => { [INFO] [stderr] 521 | | if duration.shape.beams() > 0 { [INFO] [stderr] 522 | | if beam_start_i == None { [INFO] [stderr] ... | [INFO] [stderr] 530 | | None => (), [INFO] [stderr] 531 | | }, [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 519 | Glyph::NoteHead(_, duration) => if let Some(duration) = duration { [INFO] [stderr] 520 | if duration.shape.beams() > 0 { [INFO] [stderr] 521 | if beam_start_i == None { [INFO] [stderr] 522 | beam_start_i = Some(i); [INFO] [stderr] 523 | } else { [INFO] [stderr] 524 | beam_end_i = Some(i); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/typeset.rs:577:9 [INFO] [stderr] | [INFO] [stderr] 577 | for ref token in ast.prelude.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------------ help: try: `let token = &ast.prelude.iter();` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/typeset.rs:593:9 [INFO] [stderr] | [INFO] [stderr] 593 | for ref voice in ast.voices.iter() { [INFO] [stderr] | ^^^^^^^^^ ----------------- help: try: `let voice = &ast.voices.iter();` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/typeset.rs:594:13 [INFO] [stderr] | [INFO] [stderr] 594 | for ref token in voice.iter() { [INFO] [stderr] | ^^^^^^^^^ ------------ help: try: `let token = &voice.iter();` [INFO] [stderr] | [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:37:5 [INFO] [stderr] | [INFO] [stderr] 37 | / match io::stdin().read_to_string(&mut buffer) { [INFO] [stderr] 38 | | Err(_) => panic!("Can't read input!"), [INFO] [stderr] 39 | | _ => (), [INFO] [stderr] 40 | | } [INFO] [stderr] | |_____^ help: try this: `if let Err(_) = io::stdin().read_to_string(&mut buffer) { panic!("Can't read input!") }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: Err(_) will match all errors, maybe not a good idea [INFO] [stderr] --> src/main.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | Err(_) => panic!("Can't read input!"), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_wild_err_arm)] on by default [INFO] [stderr] = note: to remove this warning, match each error separately or use unreachable macro [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wild_err_arm [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/main.rs:219:13 [INFO] [stderr] | [INFO] [stderr] 219 | tx_clone.send(groups); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "349ba4917997d3d840a28fafab9b5533438cb675d37558aa169a140e3b8db370"` [INFO] running `"docker" "rm" "-f" "349ba4917997d3d840a28fafab9b5533438cb675d37558aa169a140e3b8db370"` [INFO] [stdout] 349ba4917997d3d840a28fafab9b5533438cb675d37558aa169a140e3b8db370