[INFO] cloning repository https://github.com/valikminak/lox
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/valikminak/lox" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvalikminak%2Flox", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvalikminak%2Flox'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] c0f6439ffb0c9559cf4b9c39a22471f0ee55323c
[INFO] checking valikminak/lox against try#3fada14ee01d755dc8076e611f11bf65b28ffd21 for pr-154971
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvalikminak%2Flox" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/valikminak/lox
[INFO] finished tweaking git repo https://github.com/valikminak/lox
[INFO] tweaked toml for git repo https://github.com/valikminak/lox written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/valikminak/lox on toolchain 3fada14ee01d755dc8076e611f11bf65b28ffd21
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+3fada14ee01d755dc8076e611f11bf65b28ffd21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/valikminak/lox 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" "+3fada14ee01d755dc8076e611f11bf65b28ffd21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[ERROR] error running command: no output for 300 seconds
[INFO] checking valikminak/lox against try#3fada14ee01d755dc8076e611f11bf65b28ffd21 for pr-154971
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvalikminak%2Flox" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/valikminak/lox
[INFO] finished tweaking git repo https://github.com/valikminak/lox
[INFO] tweaked toml for git repo https://github.com/valikminak/lox written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/valikminak/lox on toolchain 3fada14ee01d755dc8076e611f11bf65b28ffd21
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+3fada14ee01d755dc8076e611f11bf65b28ffd21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/valikminak/lox 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" "+3fada14ee01d755dc8076e611f11bf65b28ffd21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+3fada14ee01d755dc8076e611f11bf65b28ffd21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f7a37bedf896b70e0cbd32b903aade4521bdd44278ac95ec3602273ed626fddd
[INFO] running `Command { std: "docker" "start" "-a" "f7a37bedf896b70e0cbd32b903aade4521bdd44278ac95ec3602273ed626fddd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f7a37bedf896b70e0cbd32b903aade4521bdd44278ac95ec3602273ed626fddd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f7a37bedf896b70e0cbd32b903aade4521bdd44278ac95ec3602273ed626fddd", kill_on_drop: false }`
[INFO] [stdout] f7a37bedf896b70e0cbd32b903aade4521bdd44278ac95ec3602273ed626fddd
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+3fada14ee01d755dc8076e611f11bf65b28ffd21" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] be6480eb9e6ad828e5a65a222532531c71e9efd4dab1c4dac5665c372514512a
[INFO] running `Command { std: "docker" "start" "-a" "be6480eb9e6ad828e5a65a222532531c71e9efd4dab1c4dac5665c372514512a", kill_on_drop: false }`
[INFO] [stderr]     Checking lox v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Operator::*`
[INFO] [stdout]   --> src/evaluate.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         use Operator::*;
[INFO] [stdout]    |             ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tokenize::ScanError`
[INFO] [stdout]   --> src/main.rs:50:17
[INFO] [stdout]    |
[INFO] [stdout] 50 |             use crate::tokenize::ScanError;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Operator::*`
[INFO] [stdout]   --> src/evaluate.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         use Operator::*;
[INFO] [stdout]    |             ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/evaluate.rs:171:9
[INFO] [stdout]     |
[INFO] [stdout] 171 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/parser.rs:232:9
[INFO] [stdout]     |
[INFO] [stdout] 232 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tokenize::ScanError`
[INFO] [stdout]   --> src/main.rs:50:17
[INFO] [stdout]    |
[INFO] [stdout] 50 |             use crate::tokenize::ScanError;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/evaluate.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut environ = Environment::new(None);
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/evaluate.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut environ = Environment::new(None);
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch`
[INFO] [stdout]    --> src/tokenize2.rs:106:13
[INFO] [stdout]     |
[INFO] [stdout] 106 |     let (n, ch) = chars.next()?;
[INFO] [stdout]     |             ^^ help: if this is intentional, prefix it with an underscore: `_ch`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tokenize2.rs:121:9
[INFO] [stdout]     |
[INFO] [stdout] 121 |     let mut line = 1;
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/main.rs:49:25
[INFO] [stdout]    |
[INFO] [stdout] 49 |         Error::Tokenize(e) => {
[INFO] [stdout]    |                         ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `interp`
[INFO] [stdout]    --> src/main.rs:111:15
[INFO] [stdout]     |
[INFO] [stdout] 111 | fn run_interp(interp: &mut evaluate::Interpreter, source: reader::Source) -> Result<(), Error> {
[INFO] [stdout]     |               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_interp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tokens`
[INFO] [stdout]    --> src/main.rs:112:9
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let tokens = tokenize2::tokenize(source);
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tokens`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Output` is never used
[INFO] [stdout]   --> src/evaluate.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub type Output = ();
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `top_level` is never read
[INFO] [stdout]   --> src/evaluate.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct Interpreter {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 47 |     top_level: Rc<Environment>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate` is never used
[INFO] [stdout]   --> src/evaluate.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl Interpreter {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn evaluate(&mut self,  ast: AST) -> Result<Output, Error> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate` is never used
[INFO] [stdout]   --> src/evaluate.rs:61:8
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub fn evaluate(ast: AST) -> Result<Output, Error> {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_statements` is never used
[INFO] [stdout]   --> src/evaluate.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub fn execute_statements(statements: &Vec<Stmt>, environ: &Rc<Environment>) -> Result<(), Error> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_statement` is never used
[INFO] [stdout]   --> src/evaluate.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn execute_statement(stmt: &Stmt, environ: &Rc<Environment>) -> Result<(), Error> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate_expression` is never used
[INFO] [stdout]   --> src/evaluate.rs:98:8
[INFO] [stdout]    |
[INFO] [stdout] 98 | pub fn evaluate_expression(expr: &Expr, environ: &Rc<Environment>) -> Result<LoxValue, Error> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Parser` is never constructed
[INFO] [stdout]   --> src/parser.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct Parser {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/parser.rs:41:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl Parser {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  41 |     pub fn new(tokens: Tokens) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     fn accept(&mut self, toktype: TokenType) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     fn accepts<const N: usize>(&mut self, toktypes: [TokenType; N]) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     fn consume(&mut self, toktype: TokenType, msg: &str) -> Result<(), Error> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     fn syntax_error(&self, msg: &str) -> Error {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     fn last_token(&self) -> &Token {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     fn last_lexeme(&self) -> &String {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     fn at_end(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     fn parse_top(&mut self) -> Result<AST, Error> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     fn parse_statements(&mut self) -> Result<Vec<Stmt>, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     fn parse_var_declaration(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     fn parse_declaration(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn parse_statement(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     fn parse_print_statement(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn parse_expression_statement(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn parse_expression(&mut self) -> Result<Expr, Error> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn parse_assignment(&mut self) -> Result<Expr, Error> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn parse_binary(&mut self) -> Result<Expr, Error> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     fn parse_unary(&mut self) -> Result<Expr, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     fn parse_primary(&mut self) -> Result<Expr, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse` is never used
[INFO] [stdout]    --> src/parser.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn parse(tokens: Tokens) -> Result<AST, Error> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from` is never used
[INFO] [stdout]  --> src/reader.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | impl Source {
[INFO] [stdout]   | ----------- associated function in this implementation
[INFO] [stdout] 6 |     pub fn from(s: impl Into<String>) -> Source {
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Tokens` is never constructed
[INFO] [stdout]   --> src/tokenize.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct Tokens {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `UnexpectedCharacter` and `UnterminatedString` are never constructed
[INFO] [stdout]   --> src/tokenize.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub enum ScanError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] 93 |     UnexpectedCharacter { line: usize, ch: char },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 94 |     UnterminatedString { line: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScanError` 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/tokenize.rs:97:19
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct Error (Vec<ScanError>);
[INFO] [stdout]    |            -----  ^^^^^^^^^^^^^^
[INFO] [stdout]    |            |
[INFO] [stdout]    |            field in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider removing this field
[INFO] [stdout]    = note: `Error` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Scanner` is never constructed
[INFO] [stdout]    --> src/tokenize.rs:100:8
[INFO] [stdout]     |
[INFO] [stdout] 100 | struct Scanner {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tokenize.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 114 | impl Scanner {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 115 |     fn new(source: &str) -> Scanner {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     fn error(&mut self, err: ScanError) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn is_at_end(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     fn scan_tokens(mut self) -> Result<Tokens, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     fn advance(&mut self) -> char {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     fn matches(&mut self, expected: char) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     fn lexeme(&self) -> String {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     fn add_token(&mut self, toktype: TokenType) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     fn peek(&self) -> char {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     fn add_token_with_literal(&mut self, toktype: TokenType, literal: Literal) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     fn scan_token(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     fn string(&mut self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     fn number(&mut self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     fn identifier(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tokenize` is never used
[INFO] [stdout]    --> src/tokenize.rs:317:8
[INFO] [stdout]     |
[INFO] [stdout] 317 | pub fn tokenize(source: Source) -> Result<Tokens, Error> {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AST` is never constructed
[INFO] [stdout]  --> src/ast.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct AST {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `EString`, `EBool`, `ENil`, `EVariable`, and `EAssign` are never constructed
[INFO] [stdout]   --> src/ast.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub enum Expr {
[INFO] [stdout]    |          ---- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 54 |     EString {value: String},
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 55 |     EBool {value: bool},
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 56 |     ENil,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     EVariable {name: String},
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 62 |     EAssign {name: String, value: Box<Expr>}
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Expr` 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 functions `string`, `bool`, `nil`, `variable`, and `assign` are never used
[INFO] [stdout]    --> src/ast.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl Expr {
[INFO] [stdout]     | --------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn string(value: impl Into<String>) -> Expr {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn bool(value: bool) -> Expr {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn nil() -> Expr {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn variable(name: impl Into<String>) -> Expr {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn assign(name: impl Into<String>, value: Expr) -> Expr {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Stmt` is never used
[INFO] [stdout]    --> src/ast.rs:108:10
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub enum Stmt {
[INFO] [stdout]     |          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `print`, `expression`, and `vardecl` are never used
[INFO] [stdout]    --> src/ast.rs:117:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | impl Stmt {
[INFO] [stdout]     | --------- associated functions in this implementation
[INFO] [stdout] 117 |     pub fn print(expr: Expr) -> Stmt {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn expression(expr: Expr) -> Stmt {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn vardecl(name: impl Into<String>, initializer: Option<Expr>) -> Stmt {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `parent` and `vars` are never read
[INFO] [stdout]  --> src/environ.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct Environment<V: Clone> {
[INFO] [stdout]   |            ----------- fields in this struct
[INFO] [stdout] 6 |     parent: Option<Rc<Environment<V>>>,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 7 |     vars: RefCell<HashMap<String, V>>,
[INFO] [stdout]   |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `declare`, `lookup`, and `assign` are never used
[INFO] [stdout]   --> src/environ.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl<V: Clone> Environment<V> {
[INFO] [stdout]    | ----------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub fn declare(&self, name: &str, value: V) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn lookup(&self, name: &str) -> Option<V> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn assign(&self, name: &str, value: V) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/tokenize2.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum TokenType {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 18 |     TSlash,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     TAnd,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 38 |     TClass,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 39 |     TElse,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 40 |     TFalse,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 41 |     TFun,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 42 |     TFor,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 43 |     TIf,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 44 |     TNil,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 45 |     TOr,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 46 |     TPrint,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 47 |     TReturn,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 48 |     TSuper,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 49 |     TThis,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 50 |     TTrue,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 51 |     TVar,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 52 |     TWhile,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TokenType` 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 `tokens` is never read
[INFO] [stdout]   --> src/tokenize2.rs:79:9
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct Tokens {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 79 |     pub tokens: Vec<Token>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Tokens` 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 `UnexpectedCharacter` and `UnterminatedString` are never constructed
[INFO] [stdout]   --> src/tokenize2.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub enum ScanError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] 84 |     UnexpectedCharacter { line: usize, ch: char },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 85 |     UnterminatedString { line: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScanError` 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/tokenize2.rs:89:18
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct Error(Vec<ScanError>);
[INFO] [stdout]    |            ----- ^^^^^^^^^^^^^^
[INFO] [stdout]    |            |
[INFO] [stdout]    |            field in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider removing this field
[INFO] [stdout]    = note: `Error` 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 `iter` is never used
[INFO] [stdout]   --> src/tokenize2.rs:93:12
[INFO] [stdout]    |
[INFO] [stdout] 92 | impl Error {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] 93 |     pub fn iter(&self) -> std::slice::Iter<'_, ScanError> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch`
[INFO] [stdout]    --> src/tokenize2.rs:106:13
[INFO] [stdout]     |
[INFO] [stdout] 106 |     let (n, ch) = chars.next()?;
[INFO] [stdout]     |             ^^ help: if this is intentional, prefix it with an underscore: `_ch`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tokenize2.rs:121:9
[INFO] [stdout]     |
[INFO] [stdout] 121 |     let mut line = 1;
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/main.rs:49:25
[INFO] [stdout]    |
[INFO] [stdout] 49 |         Error::Tokenize(e) => {
[INFO] [stdout]    |                         ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `interp`
[INFO] [stdout]    --> src/main.rs:111:15
[INFO] [stdout]     |
[INFO] [stdout] 111 | fn run_interp(interp: &mut evaluate::Interpreter, source: reader::Source) -> Result<(), Error> {
[INFO] [stdout]     |               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_interp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tokens`
[INFO] [stdout]    --> src/main.rs:112:9
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let tokens = tokenize2::tokenize(source);
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_tokens`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Output` is never used
[INFO] [stdout]   --> src/evaluate.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub type Output = ();
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `top_level` is never read
[INFO] [stdout]   --> src/evaluate.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct Interpreter {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 47 |     top_level: Rc<Environment>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate` is never used
[INFO] [stdout]   --> src/evaluate.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl Interpreter {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn evaluate(&mut self,  ast: AST) -> Result<Output, Error> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate` is never used
[INFO] [stdout]   --> src/evaluate.rs:61:8
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub fn evaluate(ast: AST) -> Result<Output, Error> {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_statements` is never used
[INFO] [stdout]   --> src/evaluate.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub fn execute_statements(statements: &Vec<Stmt>, environ: &Rc<Environment>) -> Result<(), Error> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_statement` is never used
[INFO] [stdout]   --> src/evaluate.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn execute_statement(stmt: &Stmt, environ: &Rc<Environment>) -> Result<(), Error> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate_expression` is never used
[INFO] [stdout]   --> src/evaluate.rs:98:8
[INFO] [stdout]    |
[INFO] [stdout] 98 | pub fn evaluate_expression(expr: &Expr, environ: &Rc<Environment>) -> Result<LoxValue, Error> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/parser.rs:97:8
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl Parser {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  97 |     fn parse_top(&mut self) -> Result<AST, Error> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     fn parse_statements(&mut self) -> Result<Vec<Stmt>, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     fn parse_var_declaration(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     fn parse_declaration(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn parse_statement(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     fn parse_print_statement(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn parse_expression_statement(&mut self) -> Result<Stmt, Error> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse` is never used
[INFO] [stdout]    --> src/parser.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn parse(tokens: Tokens) -> Result<AST, Error> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_string` is never used
[INFO] [stdout]   --> src/reader.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 |     fn parse_string(s: &str) -> AST {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `line` and `ch` are never read
[INFO] [stdout]   --> src/tokenize.rs:93:27
[INFO] [stdout]    |
[INFO] [stdout] 93 |     UnexpectedCharacter { line: usize, ch: char },
[INFO] [stdout]    |     -------------------   ^^^^         ^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScanError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `UnterminatedString` is never constructed
[INFO] [stdout]   --> src/tokenize.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub enum ScanError {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] 93 |     UnexpectedCharacter { line: usize, ch: char },
[INFO] [stdout] 94 |     UnterminatedString { line: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScanError` 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/tokenize.rs:97:19
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct Error (Vec<ScanError>);
[INFO] [stdout]    |            -----  ^^^^^^^^^^^^^^
[INFO] [stdout]    |            |
[INFO] [stdout]    |            field in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider removing this field
[INFO] [stdout]    = note: `Error` 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 `error` is never used
[INFO] [stdout]    --> src/tokenize.rs:126:8
[INFO] [stdout]     |
[INFO] [stdout] 114 | impl Scanner {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 126 |     fn error(&mut self, err: ScanError) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AST` is never constructed
[INFO] [stdout]  --> src/ast.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct AST {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Stmt` is never used
[INFO] [stdout]    --> src/ast.rs:108:10
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub enum Stmt {
[INFO] [stdout]     |          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `print`, `expression`, and `vardecl` are never used
[INFO] [stdout]    --> src/ast.rs:117:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | impl Stmt {
[INFO] [stdout]     | --------- associated functions in this implementation
[INFO] [stdout] 117 |     pub fn print(expr: Expr) -> Stmt {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn expression(expr: Expr) -> Stmt {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn vardecl(name: impl Into<String>, initializer: Option<Expr>) -> Stmt {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `parent` and `vars` are never read
[INFO] [stdout]  --> src/environ.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct Environment<V: Clone> {
[INFO] [stdout]   |            ----------- fields in this struct
[INFO] [stdout] 6 |     parent: Option<Rc<Environment<V>>>,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 7 |     vars: RefCell<HashMap<String, V>>,
[INFO] [stdout]   |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `declare`, `lookup`, and `assign` are never used
[INFO] [stdout]   --> src/environ.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl<V: Clone> Environment<V> {
[INFO] [stdout]    | ----------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub fn declare(&self, name: &str, value: V) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn lookup(&self, name: &str) -> Option<V> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn assign(&self, name: &str, value: V) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `TSlash` is never constructed
[INFO] [stdout]   --> src/tokenize2.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum TokenType {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 18 |     TSlash,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TokenType` 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 `UnexpectedCharacter` and `UnterminatedString` are never constructed
[INFO] [stdout]   --> src/tokenize2.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub enum ScanError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] 84 |     UnexpectedCharacter { line: usize, ch: char },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 85 |     UnterminatedString { line: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScanError` 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/tokenize2.rs:89:18
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct Error(Vec<ScanError>);
[INFO] [stdout]    |            ----- ^^^^^^^^^^^^^^
[INFO] [stdout]    |            |
[INFO] [stdout]    |            field in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider removing this field
[INFO] [stdout]    = note: `Error` 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 `iter` is never used
[INFO] [stdout]   --> src/tokenize2.rs:93:12
[INFO] [stdout]    |
[INFO] [stdout] 92 | impl Error {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] 93 |     pub fn iter(&self) -> std::slice::Iter<'_, ScanError> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.16s
[INFO] running `Command { std: "docker" "inspect" "be6480eb9e6ad828e5a65a222532531c71e9efd4dab1c4dac5665c372514512a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "be6480eb9e6ad828e5a65a222532531c71e9efd4dab1c4dac5665c372514512a", kill_on_drop: false }`
[INFO] [stdout] be6480eb9e6ad828e5a65a222532531c71e9efd4dab1c4dac5665c372514512a
