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