[INFO] cloning repository https://github.com/jdpolicano/excel [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/jdpolicano/excel" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjdpolicano%2Fexcel", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjdpolicano%2Fexcel'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] f9c381d93d94b0fb486acd53df68b6044665a356 [INFO] checking jdpolicano/excel against master#1f12b9b0fdbe735968ac002792a720f0ba4faca6 for crater-rollup-uwu [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjdpolicano%2Fexcel" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/jdpolicano/excel on toolchain 1f12b9b0fdbe735968ac002792a720f0ba4faca6 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f12b9b0fdbe735968ac002792a720f0ba4faca6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/jdpolicano/excel [INFO] finished tweaking git repo https://github.com/jdpolicano/excel [INFO] tweaked toml for git repo https://github.com/jdpolicano/excel written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] crate git repo https://github.com/jdpolicano/excel already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f12b9b0fdbe735968ac002792a720f0ba4faca6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:923055f121b5182466d55868a8b05e67af8ba4a3a3f6bad814e953ca3cd3ac2a" "/opt/rustwide/cargo-home/bin/cargo" "+1f12b9b0fdbe735968ac002792a720f0ba4faca6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] eb3e4119c101380ec67d4da83ba87ab3d448aa9d5ecbafb955ea5992c8405488 [INFO] running `Command { std: "docker" "start" "-a" "eb3e4119c101380ec67d4da83ba87ab3d448aa9d5ecbafb955ea5992c8405488", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "eb3e4119c101380ec67d4da83ba87ab3d448aa9d5ecbafb955ea5992c8405488", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "eb3e4119c101380ec67d4da83ba87ab3d448aa9d5ecbafb955ea5992c8405488", kill_on_drop: false }` [INFO] [stdout] eb3e4119c101380ec67d4da83ba87ab3d448aa9d5ecbafb955ea5992c8405488 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:923055f121b5182466d55868a8b05e67af8ba4a3a3f6bad814e953ca3cd3ac2a" "/opt/rustwide/cargo-home/bin/cargo" "+1f12b9b0fdbe735968ac002792a720f0ba4faca6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 032d674544e6891e80ef20f5d663e2d0a7b34c1625151dc85b66d05b9287de06 [INFO] running `Command { std: "docker" "start" "-a" "032d674544e6891e80ef20f5d663e2d0a7b34c1625151dc85b66d05b9287de06", kill_on_drop: false }` [INFO] [stderr] Checking excel_takehome v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `File` and `read_to_string` [INFO] [stdout] --> src/csv.rs:1:15 [INFO] [stdout] | [INFO] [stdout] 1 | use std::fs::{read_to_string, File}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufWriter` and `Write` [INFO] [stdout] --> src/csv.rs:2:15 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io::{BufWriter, Write}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/csv.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `File` and `read_to_string` [INFO] [stdout] --> src/csv.rs:1:15 [INFO] [stdout] | [INFO] [stdout] 1 | use std::fs::{read_to_string, File}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufWriter` and `Write` [INFO] [stdout] --> src/csv.rs:2:15 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io::{BufWriter, Write}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/csv.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: irrefutable `while let` pattern [INFO] [stdout] --> src/csv.rs:134:15 [INFO] [stdout] | [INFO] [stdout] 134 | while let token = self.tokenizer.get_csv_token() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this pattern will always match, so the loop will never exit [INFO] [stdout] = help: consider instead using a `loop { ... }` with a `let` inside it [INFO] [stdout] = note: `#[warn(irrefutable_let_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/formual.rs:89:17 [INFO] [stdout] | [INFO] [stdout] 89 | for i in 1..n { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/formual.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | let mut toke = self.next(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: irrefutable `while let` pattern [INFO] [stdout] --> src/csv.rs:134:15 [INFO] [stdout] | [INFO] [stdout] 134 | while let token = self.tokenizer.get_csv_token() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this pattern will always match, so the loop will never exit [INFO] [stdout] = help: consider instead using a `loop { ... }` with a `let` inside it [INFO] [stdout] = note: `#[warn(irrefutable_let_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/formual.rs:89:17 [INFO] [stdout] | [INFO] [stdout] 89 | for i in 1..n { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/formual.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | let mut toke = self.next(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `Node` is more private than the item `ParseResult` [INFO] [stdout] --> src/formual.rs:281:1 [INFO] [stdout] | [INFO] [stdout] 281 | pub type ParseResult = Result; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ type alias `ParseResult` is reachable at visibility `pub` [INFO] [stdout] | [INFO] [stdout] note: but type `Node` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/formual.rs:222:1 [INFO] [stdout] | [INFO] [stdout] 222 | enum Node { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `ParseError` is more private than the item `ParseResult` [INFO] [stdout] --> src/formual.rs:281:1 [INFO] [stdout] | [INFO] [stdout] 281 | pub type ParseResult = Result; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ type alias `ParseResult` is reachable at visibility `pub` [INFO] [stdout] | [INFO] [stdout] note: but type `ParseError` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/formual.rs:261:1 [INFO] [stdout] | [INFO] [stdout] 261 | enum ParseError { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `src` is never read [INFO] [stdout] --> src/excel.rs:81:5 [INFO] [stdout] | [INFO] [stdout] 80 | pub struct Excel { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 81 | src: Vec, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Token` is never used [INFO] [stdout] --> src/formual.rs:9:6 [INFO] [stdout] | [INFO] [stdout] 9 | enum Token <'a> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Tokenizer` is never constructed [INFO] [stdout] --> src/formual.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | struct Tokenizer<'a> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/formual.rs:45:12 [INFO] [stdout] | [INFO] [stdout] 44 | impl<'a> Tokenizer<'a> { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 45 | pub fn new(view: &'a [char]) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 51 | fn skip(&mut self, n: usize) { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 55 | fn peek(&self) -> Option<&char> { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 59 | fn next_is(&self, cmp: char) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | fn next_is_one_of(&self, sp_cmp: &[char]) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | fn empty(&self) -> bool { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | fn lookahead(&mut self, n: usize) -> Token<'a> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | fn next(&mut self) -> Token<'a> { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Addition`, `Subtraction`, `Division`, `Multiplication`, and `Invalid` are never constructed [INFO] [stdout] --> src/formual.rs:161:5 [INFO] [stdout] | [INFO] [stdout] 160 | enum Operator { [INFO] [stdout] | -------- variants in this enum [INFO] [stdout] 161 | Addition, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 162 | Subtraction, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 163 | Division, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 164 | Multiplication, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 165 | Invalid [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Operator` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `apply`, `is_addition`, `is_subtraction`, `is_division`, and `is_multiplication` are never used [INFO] [stdout] --> src/formual.rs:169:8 [INFO] [stdout] | [INFO] [stdout] 168 | impl Operator { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 169 | fn new(op: char) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | fn apply(&self, lhs: T, rhs: T) -> Option [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 192 | fn is_addition(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 199 | fn is_subtraction(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | fn is_division(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 213 | fn is_multiplication(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/formual.rs:224:5 [INFO] [stdout] | [INFO] [stdout] 222 | enum Node { [INFO] [stdout] | ---- variants in this enum [INFO] [stdout] 223 | // top level entry point of the ast [INFO] [stdout] 224 | Formula { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 229 | Expression { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 236 | Term { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 243 | Factor { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 249 | Primary(Box), // a value, reference, or another expression. [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 250 | Primitive(String), // prims like string boolean int or float. [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 251 | CellRef(String), // a cell reference with (col, row) as strings. [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 252 | CellRange(Box, Box), // two cell refs. [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 253 | // a function call. [INFO] [stdout] 254 | Function { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `UnexpectedEndOfFile`, `UnexpectedToken`, and `InvalidExpression` are never constructed [INFO] [stdout] --> src/formual.rs:262:5 [INFO] [stdout] | [INFO] [stdout] 261 | enum ParseError { [INFO] [stdout] | ---------- variants in this enum [INFO] [stdout] 262 | UnexpectedEndOfFile, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 263 | UnexpectedToken { expected: String, found: String }, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 264 | InvalidExpression, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParseError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `src` and `func_names` are never read [INFO] [stdout] --> src/formual.rs:284:5 [INFO] [stdout] | [INFO] [stdout] 283 | pub struct Ast<'a> { [INFO] [stdout] | --- fields in this struct [INFO] [stdout] 284 | src: &'a str, [INFO] [stdout] | ^^^ [INFO] [stdout] 285 | func_names: HashSet [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/formual.rs:289:8 [INFO] [stdout] | [INFO] [stdout] 288 | impl<'a> Ast<'a> { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 289 | fn new(src: &'a str, func_names: HashSet) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 296 | fn parse(&self) -> ParseResult { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 311 | fn parse_expression(&self, tokenizer: &mut Tokenizer) -> ParseResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 337 | fn parse_term(&self, tokenizer: &mut Tokenizer) -> ParseResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn parse_factor(&self, tokenizer: &mut Tokenizer) -> ParseResult { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 389 | fn parse_primary(&self, tokenizer: &mut Tokenizer) -> ParseResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 420 | fn parse_string(&self, tokenizer: &mut Tokenizer) -> ParseResult { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 457 | fn parse_function(&self, tokenizer: &mut Tokenizer, name: String) -> ParseResult { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 491 | fn is_cell_ref(&self, chars: &'a [char]) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 506 | fn is_numeric(&self, chars: &'a [char]) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 515 | fn is_string_literal(&self, chars: &'a [char]) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 519 | fn is_boolean(&self, chars: &'a [char]) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 524 | fn expect(&self, tokenizer: &mut Tokenizer, expected: Token, result: Node) -> ParseResult { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/excel.rs:127:9 [INFO] [stdout] | [INFO] [stdout] 127 | writer.flush(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 127 | let _ = writer.flush(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/formual.rs:610:13 [INFO] [stdout] | [INFO] [stdout] 610 | let mut parser = Ast::new(&input, func_names); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 19 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `Node` is more private than the item `ParseResult` [INFO] [stdout] --> src/formual.rs:281:1 [INFO] [stdout] | [INFO] [stdout] 281 | pub type ParseResult = Result; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ type alias `ParseResult` is reachable at visibility `pub` [INFO] [stdout] | [INFO] [stdout] note: but type `Node` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/formual.rs:222:1 [INFO] [stdout] | [INFO] [stdout] 222 | enum Node { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `ParseError` is more private than the item `ParseResult` [INFO] [stdout] --> src/formual.rs:281:1 [INFO] [stdout] | [INFO] [stdout] 281 | pub type ParseResult = Result; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ type alias `ParseResult` is reachable at visibility `pub` [INFO] [stdout] | [INFO] [stdout] note: but type `ParseError` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/formual.rs:261:1 [INFO] [stdout] | [INFO] [stdout] 261 | enum ParseError { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `src` is never read [INFO] [stdout] --> src/excel.rs:81:5 [INFO] [stdout] | [INFO] [stdout] 80 | pub struct Excel { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 81 | src: Vec, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `next_is` is never used [INFO] [stdout] --> src/formual.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 44 | impl<'a> Tokenizer<'a> { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 59 | fn next_is(&self, cmp: char) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `apply`, `is_addition`, `is_subtraction`, `is_division`, and `is_multiplication` are never used [INFO] [stdout] --> src/formual.rs:179:8 [INFO] [stdout] | [INFO] [stdout] 168 | impl Operator { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 179 | fn apply(&self, lhs: T, rhs: T) -> Option [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 192 | fn is_addition(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 199 | fn is_subtraction(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | fn is_division(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 213 | fn is_multiplication(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `lhs`, `op`, and `rhs` are never read [INFO] [stdout] --> src/formual.rs:230:9 [INFO] [stdout] | [INFO] [stdout] 229 | Expression { [INFO] [stdout] | ---------- fields in this variant [INFO] [stdout] 230 | lhs: Box, // the main term to evaluate. [INFO] [stdout] | ^^^ [INFO] [stdout] 231 | op: Option, // if performing an operation on this. [INFO] [stdout] | ^^ [INFO] [stdout] 232 | rhs: Option> // another term... [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `lhs`, `op`, and `rhs` are never read [INFO] [stdout] --> src/formual.rs:237:9 [INFO] [stdout] | [INFO] [stdout] 236 | Term { [INFO] [stdout] | ---- fields in this variant [INFO] [stdout] 237 | lhs: Box, // factor... [INFO] [stdout] | ^^^ [INFO] [stdout] 238 | op: Option, [INFO] [stdout] | ^^ [INFO] [stdout] 239 | rhs: Option>, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `lhs`, `op`, and `rhs` are never read [INFO] [stdout] --> src/formual.rs:244:9 [INFO] [stdout] | [INFO] [stdout] 243 | Factor { [INFO] [stdout] | ------ fields in this variant [INFO] [stdout] 244 | lhs: Box, // primary... [INFO] [stdout] | ^^^ [INFO] [stdout] 245 | op: Option, [INFO] [stdout] | ^^ [INFO] [stdout] 246 | rhs: Option>, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/formual.rs:250:15 [INFO] [stdout] | [INFO] [stdout] 250 | Primitive(String), // prims like string boolean int or float. [INFO] [stdout] | --------- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 250 | Primitive(()), // prims like string boolean int or float. [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/formual.rs:251:13 [INFO] [stdout] | [INFO] [stdout] 251 | CellRef(String), // a cell reference with (col, row) as strings. [INFO] [stdout] | ------- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 251 | CellRef(()), // a cell reference with (col, row) as strings. [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `args` are never read [INFO] [stdout] --> src/formual.rs:255:9 [INFO] [stdout] | [INFO] [stdout] 254 | Function { [INFO] [stdout] | -------- fields in this variant [INFO] [stdout] 255 | name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 256 | args: Vec [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Formula`, `Primary`, and `CellRange` are never constructed [INFO] [stdout] --> src/formual.rs:224:5 [INFO] [stdout] | [INFO] [stdout] 222 | enum Node { [INFO] [stdout] | ---- variants in this enum [INFO] [stdout] 223 | // top level entry point of the ast [INFO] [stdout] 224 | Formula { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 249 | Primary(Box), // a value, reference, or another expression. [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | CellRange(Box, Box), // two cell refs. [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Node` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_string_literal` is never used [INFO] [stdout] --> src/formual.rs:515:8 [INFO] [stdout] | [INFO] [stdout] 288 | impl<'a> Ast<'a> { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 515 | fn is_string_literal(&self, chars: &'a [char]) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/excel.rs:127:9 [INFO] [stdout] | [INFO] [stdout] 127 | writer.flush(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 127 | let _ = writer.flush(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 21 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:22:17 [INFO] [stdout] | [INFO] [stdout] 22 | let mut excel = Excel::from_path(&p).expect("File read failed..."); [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:22:17 [INFO] [stdout] | [INFO] [stdout] 22 | let mut excel = Excel::from_path(&p).expect("File read failed..."); [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 1 warning emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 1 warning emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.15s [INFO] running `Command { std: "docker" "inspect" "032d674544e6891e80ef20f5d663e2d0a7b34c1625151dc85b66d05b9287de06", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "032d674544e6891e80ef20f5d663e2d0a7b34c1625151dc85b66d05b9287de06", kill_on_drop: false }` [INFO] [stdout] 032d674544e6891e80ef20f5d663e2d0a7b34c1625151dc85b66d05b9287de06