[INFO] cloning repository https://github.com/huwenchao/monkey-rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/huwenchao/monkey-rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhuwenchao%2Fmonkey-rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhuwenchao%2Fmonkey-rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] fb77c9f547a106661e0ce99777d9d711460951f3
[INFO] checking huwenchao/monkey-rust against master#bca37a20bd376ce3fd138e7cdee7fe704e0f8814 for pr-139493-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhuwenchao%2Fmonkey-rust" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/huwenchao/monkey-rust
[INFO] finished tweaking git repo https://github.com/huwenchao/monkey-rust
[INFO] tweaked toml for git repo https://github.com/huwenchao/monkey-rust written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/huwenchao/monkey-rust on toolchain bca37a20bd376ce3fd138e7cdee7fe704e0f8814
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/huwenchao/monkey-rust 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" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded thiserror-impl v1.0.20
[INFO] [stderr]   Downloaded thiserror v1.0.20
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] c2119e047815c0fc08e2ede51f95fb26e9764e4fd73afb498f6c5adcce1520e2
[INFO] running `Command { std: "docker" "start" "-a" "c2119e047815c0fc08e2ede51f95fb26e9764e4fd73afb498f6c5adcce1520e2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c2119e047815c0fc08e2ede51f95fb26e9764e4fd73afb498f6c5adcce1520e2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c2119e047815c0fc08e2ede51f95fb26e9764e4fd73afb498f6c5adcce1520e2", kill_on_drop: false }`
[INFO] [stdout] c2119e047815c0fc08e2ede51f95fb26e9764e4fd73afb498f6c5adcce1520e2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 95b5d3d37c967c9d73d96bd8a66ff14bf7faeb4529f25932799e36215a1f5083
[INFO] running `Command { std: "docker" "start" "-a" "95b5d3d37c967c9d73d96bd8a66ff14bf7faeb4529f25932799e36215a1f5083", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.20
[INFO] [stderr]    Compiling syn v1.0.40
[INFO] [stderr]    Compiling quote v1.0.7
[INFO] [stderr]    Compiling thiserror-impl v1.0.20
[INFO] [stderr]     Checking thiserror v1.0.20
[INFO] [stderr]     Checking monkey-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::token::Token`
[INFO] [stdout]  --> src/ast.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::token::Token;
[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 imports: `Token` and `Type`
[INFO] [stdout]    --> src/ast.rs:226:24
[INFO] [stdout]     |
[INFO] [stdout] 226 |     use crate::token::{Token, Type};
[INFO] [stdout]     |                        ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Token` and `lookup_ident`
[INFO] [stdout]    --> src/lexer.rs:234:24
[INFO] [stdout]     |
[INFO] [stdout] 234 |     use crate::token::{lookup_ident, Token, Type};
[INFO] [stdout]     |                        ^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `IfExpression`
[INFO] [stdout]  --> src/parser.rs:2:68
[INFO] [stdout]   |
[INFO] [stdout] 2 |     ArrayLiteral, CallExpression, Expression, ExpressionStatement, IfExpression, IndexExpression,
[INFO] [stdout]   |                                                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ident`
[INFO] [stdout]    --> src/parser.rs:331:21
[INFO] [stdout]     |
[INFO] [stdout] 331 |         Expression, Ident, LetStatement, PrefixExpression, ReturnStatement, Statement,
[INFO] [stdout]     |                     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/parser.rs:189:21
[INFO] [stdout]     |
[INFO] [stdout] 189 |     ) -> Option<Box<Fn(&mut Self) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]     = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 189 |     ) -> Option<Box<dyn Fn(&mut Self) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/parser.rs:233:21
[INFO] [stdout]     |
[INFO] [stdout] 233 |     ) -> Option<Box<Fn(&mut Self, Expression) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 233 |     ) -> Option<Box<dyn Fn(&mut Self, Expression) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::token::Token`
[INFO] [stdout]  --> src/ast.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::token::Token;
[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: `IfExpression`
[INFO] [stdout]  --> src/parser.rs:2:68
[INFO] [stdout]   |
[INFO] [stdout] 2 |     ArrayLiteral, CallExpression, Expression, ExpressionStatement, IfExpression, IndexExpression,
[INFO] [stdout]   |                                                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/parser.rs:189:21
[INFO] [stdout]     |
[INFO] [stdout] 189 |     ) -> Option<Box<Fn(&mut Self) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]     = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 189 |     ) -> Option<Box<dyn Fn(&mut Self) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]    --> src/parser.rs:233:21
[INFO] [stdout]     |
[INFO] [stdout] 233 |     ) -> Option<Box<Fn(&mut Self, Expression) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]     |
[INFO] [stdout] 233 |     ) -> Option<Box<dyn Fn(&mut Self, Expression) -> ParseResult<Expression>>> {
[INFO] [stdout]     |                     +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]    --> src/ast.rs:126:22
[INFO] [stdout]     |
[INFO] [stdout] 126 |             Self::If(p) => todo!(),
[INFO] [stdout]     |                      ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]    --> src/ast.rs:126:22
[INFO] [stdout]     |
[INFO] [stdout] 126 |             Self::If(p) => todo!(),
[INFO] [stdout]     |                      ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.02s
[INFO] [stdout] warning: type alias `Ident` is never used
[INFO] [stdout]  --> src/ast.rs:3:10
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub type Ident = String;
[INFO] [stdout]   |          ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Program` is never constructed
[INFO] [stdout]  --> src/ast.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Program {
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Statement` is never used
[INFO] [stdout]   --> src/ast.rs:17:10
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum Statement {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LetStatement` is never constructed
[INFO] [stdout]   --> src/ast.rs:45:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub struct LetStatement {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReturnStatement` is never constructed
[INFO] [stdout]   --> src/ast.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct ReturnStatement {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExpressionStatement` is never constructed
[INFO] [stdout]   --> src/ast.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct ExpressionStatement {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Expression` is never used
[INFO] [stdout]   --> src/ast.rs:86:10
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub enum Expression {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CallExpression` is never constructed
[INFO] [stdout]    --> src/ast.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub struct CallExpression {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FunctionExpression` is never constructed
[INFO] [stdout]    --> src/ast.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub struct FunctionExpression {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArrayLiteral` is never constructed
[INFO] [stdout]    --> src/ast.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub struct ArrayLiteral(pub Vec<Box<Expression>>);
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IndexExpression` is never constructed
[INFO] [stdout]    --> src/ast.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub struct IndexExpression {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlockStatement` is never constructed
[INFO] [stdout]    --> src/ast.rs:198:12
[INFO] [stdout]     |
[INFO] [stdout] 198 | pub struct BlockStatement {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IfExpression` is never constructed
[INFO] [stdout]    --> src/ast.rs:203:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub struct IfExpression {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PrefixExpression` is never constructed
[INFO] [stdout]    --> src/ast.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub struct PrefixExpression {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InfixExpression` is never constructed
[INFO] [stdout]    --> src/ast.rs:216:12
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub struct InfixExpression {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ZERO_CHAR` is never used
[INFO] [stdout]  --> src/lexer.rs:3:7
[INFO] [stdout]   |
[INFO] [stdout] 3 | const ZERO_CHAR: char = '\u{0}';
[INFO] [stdout]   |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Lexer` is never constructed
[INFO] [stdout]  --> src/lexer.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Lexer {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/lexer.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl Lexer {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(input: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn read_char(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     fn skip_whitespace(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     fn skip_comment(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     fn peek_char(&mut self) -> char {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     fn read(&mut self, check_fn: fn(char) -> bool) -> String {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     fn read_ident(&mut self) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     fn read_number(&mut self) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     fn read_number_token(&mut self) -> Token {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     fn read_string(&mut self) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub fn next_token(&mut self) -> Token {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_letter` is never used
[INFO] [stdout]    --> src/lexer.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn is_letter(ch: char) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_digit` is never used
[INFO] [stdout]    --> src/lexer.rs:227:4
[INFO] [stdout]     |
[INFO] [stdout] 227 | fn is_digit(ch: char) -> bool {
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ParseError` is never used
[INFO] [stdout]   --> src/parser.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum ParseError {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ParseResult` is never used
[INFO] [stdout]   --> src/parser.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub type ParseResult<T> = Result<T, ParseError>;
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Precedence` is never used
[INFO] [stdout]   --> src/parser.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum Precedence {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Parser` is never constructed
[INFO] [stdout]   --> src/parser.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct Parser {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/parser.rs:44:12
[INFO] [stdout]     |
[INFO] [stdout]  43 | impl Parser {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  44 |     pub fn new(mut l: Lexer) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     fn next_token(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  64 |     pub fn parse_program(&mut self) -> ParseResult<Program> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     fn parse_statement(&mut self) -> ParseResult<Statement> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     fn parse_return_statement(&mut self) -> ParseResult<ReturnStatement> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     fn peek_error(&mut self, t: Type) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     fn expect_peek(&mut self, t: Type) -> ParseResult<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn parse_let_statement(&mut self) -> ParseResult<LetStatement> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn cur_token_is(&self, t: Type) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     fn peek_precedence(&self) -> Precedence {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn parse_expression(&mut self, precedence: Precedence) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     fn parse_ident(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     fn parse_int(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     fn parse_boolean(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     fn parse_float(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     fn prefix_parse_fns(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     fn parse_array_literal(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     fn parse_grouped_expression(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     fn parse_prefix_expression(&mut self) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     fn infix_parse_fns(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     fn parse_index_expression(&mut self, left: Expression) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     fn parse_expression_list(&mut self, end: Type) -> ParseResult<Vec<Expression>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     fn parse_call_expression(&mut self, function: Expression) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn parse_infix_expression(&mut self, left: Expression) -> ParseResult<Expression> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     fn parse_expression_statement(&mut self) -> ParseResult<ExpressionStatement> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `type_to_predence` is never used
[INFO] [stdout]    --> src/parser.rs:315:4
[INFO] [stdout]     |
[INFO] [stdout] 315 | fn type_to_predence(t: &Type) -> Precedence {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Type` is never used
[INFO] [stdout]  --> src/token.rs:2:10
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum Type {
[INFO] [stdout]   |          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Token` is never constructed
[INFO] [stdout]   --> src/token.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct Token {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lookup_ident` is never used
[INFO] [stdout]   --> src/token.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub fn lookup_ident(s: &str) -> Type {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `If`, `Function`, and `String` are never constructed
[INFO] [stdout]   --> src/ast.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub enum Expression {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 90 |     If(IfExpression),
[INFO] [stdout]    |     ^^
[INFO] [stdout] 91 |     Function(FunctionExpression),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 92 |     Call(CallExpression),
[INFO] [stdout] 93 |     String(String),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Expression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `errors` is never read
[INFO] [stdout]   --> src/parser.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct Parser {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 37 |     l: Lexer,
[INFO] [stdout] 38 |     errors: Vec<String>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `peek_error` is never used
[INFO] [stdout]   --> src/parser.rs:94:8
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl Parser {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 94 |     fn peek_error(&mut self, t: Type) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "95b5d3d37c967c9d73d96bd8a66ff14bf7faeb4529f25932799e36215a1f5083", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "95b5d3d37c967c9d73d96bd8a66ff14bf7faeb4529f25932799e36215a1f5083", kill_on_drop: false }`
[INFO] [stdout] 95b5d3d37c967c9d73d96bd8a66ff14bf7faeb4529f25932799e36215a1f5083
