🙃
This commit is contained in:
1275
backend/.test/Cargo.lock
generated
Normal file
1275
backend/.test/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
7
backend/.test/Cargo.toml
Normal file
7
backend/.test/Cargo.toml
Normal file
@@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "lead-rust"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
websocket = "0.27.1"
|
||||
102
backend/flake.lock
generated
Normal file
102
backend/flake.lock
generated
Normal file
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"nodes": {
|
||||
"fenix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"naersk",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752475459,
|
||||
"narHash": "sha256-z6QEu4ZFuHiqdOPbYss4/Q8B0BFhacR8ts6jO/F/aOU=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "bf0d6f70f4c9a9cf8845f992105652173f4b617f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"naersk": {
|
||||
"inputs": {
|
||||
"fenix": "fenix",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752689277,
|
||||
"narHash": "sha256-uldUBFkZe/E7qbvxa3mH1ItrWZyT6w1dBKJQF/3ZSsc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"rev": "0e72363d0938b0208d6c646d10649164c43f4d64",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1752077645,
|
||||
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "be9e214982e20b8310878ac2baa063a961c1bdf6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1756542300,
|
||||
"narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d7600c775f877cd87b4f5a831c28aa94137377aa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"naersk": "naersk",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1752428706,
|
||||
"narHash": "sha256-EJcdxw3aXfP8Ex1Nm3s0awyH9egQvB2Gu+QEnJn2Sfg=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "591e3b7624be97e4443ea7b5542c191311aa141d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rust-lang",
|
||||
"ref": "nightly",
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
24
backend/flake.nix
Normal file
24
backend/flake.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
description = "lead-rust";
|
||||
|
||||
inputs = {
|
||||
naersk.url = "github:nix-community/naersk";
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = {
|
||||
self,
|
||||
naersk,
|
||||
nixpkgs,
|
||||
}: let
|
||||
system = "x86_64-linux";
|
||||
pkgs = import nixpkgs {inherit system;};
|
||||
naerskLib = pkgs.callPackage naersk {};
|
||||
in {
|
||||
packages.${system}.default = naerskLib.buildPackage {
|
||||
src = ./.;
|
||||
buildInputs = [pkgs.openssl];
|
||||
nativeBuildInputs = [pkgs.pkg-config];
|
||||
};
|
||||
};
|
||||
}
|
||||
99
backend/src/cell.rs
Normal file
99
backend/src/cell.rs
Normal file
@@ -0,0 +1,99 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use crate::evaluator::*;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Cell {
|
||||
eval: Eval,
|
||||
raw: String,
|
||||
i_dep: HashSet<CellRef>,
|
||||
they_dep: HashSet<CellRef>,
|
||||
}
|
||||
|
||||
impl Cell {
|
||||
pub fn new(eval: Eval, raw: String) -> Self {
|
||||
Self {
|
||||
eval,
|
||||
raw,
|
||||
i_dep: HashSet::new(),
|
||||
they_dep: HashSet::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn raw(&self) -> String {
|
||||
self.raw.clone()
|
||||
}
|
||||
|
||||
pub fn eval(&self) -> Eval {
|
||||
self.eval.clone()
|
||||
}
|
||||
|
||||
pub fn add_i_dep(&mut self, dep: CellRef) {
|
||||
self.i_dep.insert(dep);
|
||||
}
|
||||
|
||||
pub fn add_they_dep(&mut self, dep: CellRef) {
|
||||
self.they_dep.insert(dep);
|
||||
}
|
||||
|
||||
pub fn clear_i_dep(&mut self) {
|
||||
self.i_dep.clear();
|
||||
}
|
||||
|
||||
pub fn clear_they_dep(&mut self) {
|
||||
self.they_dep.clear();
|
||||
}
|
||||
|
||||
pub fn set_eval(&mut self, eval: Eval) {
|
||||
self.eval = eval;
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
|
||||
pub struct CellRef {
|
||||
pub row: i64,
|
||||
pub col: i64,
|
||||
}
|
||||
|
||||
impl CellRef {
|
||||
pub fn new(s: String) -> Result<CellRef, String> {
|
||||
let s = s.trim();
|
||||
let mut col: i64 = 0;
|
||||
let mut i = 0;
|
||||
|
||||
// consume leading letters for the column
|
||||
for (idx, ch) in s.char_indices() {
|
||||
if ch.is_ascii_alphabetic() {
|
||||
let u = ch.to_ascii_uppercase() as u8;
|
||||
let val = (u - b'A' + 1) as i64; // A->1 ... Z->26
|
||||
col = col * 26 + val;
|
||||
i = idx + ch.len_utf8();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if col <= 0 {
|
||||
return Err(format!(
|
||||
"Parse error: missing column letters in cell ref: {s}"
|
||||
));
|
||||
}
|
||||
|
||||
let row_part = &s[i..];
|
||||
if row_part.is_empty() {
|
||||
return Err(format!(
|
||||
"Parse error: missing column letters in cell ref: {s}"
|
||||
));
|
||||
} else if !row_part.chars().all(|c| c.is_ascii_digit()) {
|
||||
return Err(format!(
|
||||
"Parse error: row part must be numeric in cell ref: {s}"
|
||||
));
|
||||
}
|
||||
|
||||
if let Ok(row) = row_part.parse::<i64>() {
|
||||
Ok(CellRef { row, col })
|
||||
} else {
|
||||
Err(format!("Parse error: invalid row number."))
|
||||
}
|
||||
}
|
||||
}
|
||||
168
backend/src/evaluator.rs
Normal file
168
backend/src/evaluator.rs
Normal file
@@ -0,0 +1,168 @@
|
||||
use crate::cell::{Cell, CellRef};
|
||||
use crate::parser::*;
|
||||
use crate::tokenizer::Literal;
|
||||
use std::collections::HashMap;
|
||||
use std::fmt;
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum Eval {
|
||||
Literal(Literal),
|
||||
}
|
||||
|
||||
impl fmt::Display for Eval {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
Eval::Literal(lit) => write!(f, "{lit:?}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Evaluator {
|
||||
cells: HashMap<CellRef, Cell>,
|
||||
}
|
||||
|
||||
impl Evaluator {
|
||||
pub fn new() -> Evaluator {
|
||||
return Evaluator {
|
||||
cells: HashMap::new(),
|
||||
};
|
||||
}
|
||||
|
||||
pub fn set_cell(&mut self, cell_ref: CellRef, raw_val: String) -> Result<(), String> {
|
||||
if self.cells.contains_key(&cell_ref) && self.cells[&cell_ref].raw() == raw_val {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let eval: Eval;
|
||||
|
||||
if let Some(c) = raw_val.chars().nth(0)
|
||||
&& c == '='
|
||||
{
|
||||
eval = self.evaluate(raw_val[1..].to_owned())?;
|
||||
} else {
|
||||
match self.evaluate(raw_val.to_owned()) {
|
||||
Ok(e) => {
|
||||
eval = e;
|
||||
}
|
||||
Err(_) => eval = Eval::Literal(Literal::String(raw_val.to_owned())),
|
||||
}
|
||||
}
|
||||
|
||||
self.cells.insert(cell_ref, Cell::new(eval, raw_val));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_cell(&mut self, cell_ref: CellRef) -> Result<(String, Eval), String> {
|
||||
if !self.cells.contains_key(&cell_ref) {
|
||||
return Err(format!("Cell at {:?} not found.", cell_ref));
|
||||
}
|
||||
|
||||
let cell = &self.cells[&cell_ref];
|
||||
|
||||
Ok((cell.raw(), cell.eval()))
|
||||
}
|
||||
|
||||
pub fn evaluate(&mut self, str: String) -> Result<Eval, String> {
|
||||
let (mut expr, mut deps) = parse(&str)?;
|
||||
|
||||
self.evaluate_expr(&mut expr)
|
||||
}
|
||||
|
||||
fn evaluate_expr(&mut self, expr: &mut Expr) -> Result<Eval, String> {
|
||||
let res = match expr {
|
||||
Expr::Literal(lit) => Eval::Literal(lit.clone()),
|
||||
Expr::CellRef(re) => self.get_cell(re.to_owned())?.1,
|
||||
Expr::Infix { op, lhs, rhs } => {
|
||||
let lval = self.evaluate_expr(lhs)?;
|
||||
let rval = self.evaluate_expr(rhs)?;
|
||||
|
||||
match op {
|
||||
InfixOp::ADD => eval_add(&lval, &rval)?,
|
||||
InfixOp::SUB => eval_sub(&lval, &rval)?,
|
||||
InfixOp::MUL => eval_mul(&lval, &rval)?,
|
||||
InfixOp::DIV => eval_div(&lval, &rval)?,
|
||||
_ => return Err(format!("Evaluation error: Unsupported operator {:?}", op)),
|
||||
}
|
||||
}
|
||||
it => return Err(format!("Evaluation error: Unsupported expression {:?}", it)),
|
||||
};
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
fn eval_add(lval: &Eval, rval: &Eval) -> Result<Eval, String> {
|
||||
match (lval, rval) {
|
||||
(Eval::Literal(a), Eval::Literal(b)) => {
|
||||
if let Some(res) = eval_numeric_infix(a, b, |x, y| x + y, |x, y| x + y) {
|
||||
return Ok(Eval::Literal(res));
|
||||
}
|
||||
|
||||
// Try string concatenation
|
||||
if let (Literal::String(x), Literal::String(y)) = (a, b) {
|
||||
let mut res = x.to_owned();
|
||||
res.push_str(y);
|
||||
return Ok(Eval::Literal(Literal::String(res)));
|
||||
}
|
||||
|
||||
Err("Evaluation error: expected string or numeric types for ADD function.".to_string())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn eval_sub(lval: &Eval, rval: &Eval) -> Result<Eval, String> {
|
||||
match (lval, rval) {
|
||||
(Eval::Literal(a), Eval::Literal(b)) => {
|
||||
if let Some(res) = eval_numeric_infix(a, b, |x, y| x - y, |x, y| x - y) {
|
||||
return Ok(Eval::Literal(res));
|
||||
}
|
||||
|
||||
Err("Evaluation error: expected string or numeric types for SUB function.".to_string())
|
||||
}
|
||||
}
|
||||
}
|
||||
fn eval_mul(lval: &Eval, rval: &Eval) -> Result<Eval, String> {
|
||||
match (lval, rval) {
|
||||
(Eval::Literal(a), Eval::Literal(b)) => {
|
||||
if let Some(res) = eval_numeric_infix(a, b, |x, y| x * y, |x, y| x * y) {
|
||||
return Ok(Eval::Literal(res));
|
||||
}
|
||||
|
||||
Err("Evaluation error: expected string or numeric types for MUL function.".to_string())
|
||||
}
|
||||
}
|
||||
}
|
||||
fn eval_div(lval: &Eval, rval: &Eval) -> Result<Eval, String> {
|
||||
match (lval, rval) {
|
||||
(Eval::Literal(a), Eval::Literal(b)) => {
|
||||
if let Some(res) = eval_numeric_infix(a, b, |x, y| x / y, |x, y| x / y) {
|
||||
return Ok(Eval::Literal(res));
|
||||
}
|
||||
|
||||
Err("Evaluation error: expected string or numeric types for DIV function.".to_string())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn eval_numeric_infix<FInt, FDouble>(
|
||||
lhs: &Literal,
|
||||
rhs: &Literal,
|
||||
int_op: FInt,
|
||||
double_op: FDouble,
|
||||
) -> Option<Literal>
|
||||
where
|
||||
FInt: Fn(i64, i64) -> i64,
|
||||
FDouble: Fn(f64, f64) -> f64,
|
||||
{
|
||||
match (lhs, rhs) {
|
||||
(Literal::Integer(a), Literal::Integer(b)) => Some(Literal::Integer(int_op(*a, *b))),
|
||||
(Literal::Double(a), Literal::Double(b)) => Some(Literal::Double(double_op(*a, *b))),
|
||||
(Literal::Integer(a), Literal::Double(b)) => {
|
||||
Some(Literal::Double(double_op(*a as f64, *b)))
|
||||
}
|
||||
(Literal::Double(a), Literal::Integer(b)) => {
|
||||
Some(Literal::Double(double_op(*a, *b as f64)))
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
69
backend/src/main.rs
Normal file
69
backend/src/main.rs
Normal file
@@ -0,0 +1,69 @@
|
||||
mod cell;
|
||||
mod evaluator;
|
||||
mod parser;
|
||||
mod tokenizer;
|
||||
|
||||
use std::io;
|
||||
|
||||
use websocket::server::WsServer;
|
||||
|
||||
use crate::{cell::CellRef, evaluator::Evaluator};
|
||||
|
||||
fn main() {
|
||||
// let mut input = String::new();
|
||||
// io::stdin().read_line(&mut input).expect("Expected input.");
|
||||
|
||||
// let mut ast = parser::parse(&input).unwrap();
|
||||
// println!("{}", ast.pretty());
|
||||
let mut evaluator = Evaluator::new();
|
||||
// // println!("{}", evaluator.evaluate(input).unwrap());
|
||||
// let a1 = CellRef { row: 1, col: 2 };
|
||||
// evaluator.set_cell(a1, input).unwrap();
|
||||
// println!("{:?}", evaluator.get_cell(a1).unwrap());
|
||||
|
||||
println!("CMDS : set <cell_ref>, get <cell_ref>");
|
||||
loop {
|
||||
let mut input = String::new();
|
||||
io::stdin().read_line(&mut input).expect("Expected input.");
|
||||
|
||||
let cmds = ["set", "get"];
|
||||
let cmd = &input[0..3];
|
||||
if !cmds.iter().any(|c| c == &cmd) {
|
||||
println!("{} is an invalid command!", cmd);
|
||||
println!("CMDS : set <cell_ref>, get <cell_ref>");
|
||||
continue;
|
||||
}
|
||||
|
||||
let rest = &input[4..];
|
||||
let mut parts = rest.splitn(2, char::is_whitespace);
|
||||
|
||||
let raw_ref = parts.next().unwrap_or("").trim(); // cell reference
|
||||
let raw_str = parts.next().unwrap_or("").trim(); // rest of the string (value)
|
||||
// println!("{} {}", raw_ref, raw_str);
|
||||
|
||||
if let Ok(cell_ref) = CellRef::new(raw_ref.to_owned()) {
|
||||
match cmd {
|
||||
"set" => match evaluator.set_cell(cell_ref, raw_str.to_owned()) {
|
||||
Ok(_) => println!("Successfully set cell {} to {}.", raw_ref, raw_str),
|
||||
Err(e) => println!("{}", e),
|
||||
},
|
||||
"get" => match evaluator.get_cell(cell_ref) {
|
||||
Ok(res) => println!("{:?}", res),
|
||||
Err(e) => println!("{}", e),
|
||||
},
|
||||
_ => {
|
||||
panic!("Impossible.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
println!("{} is an invalid cell reference!", raw_ref);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
let rt = Runtime::new().unwrap();
|
||||
let handle = rt.handle().clone();
|
||||
let addr = "127.0.0.1:7050";
|
||||
|
||||
let socket = WsServer::bind(addr, handle);
|
||||
}
|
||||
291
backend/src/parser.rs
Normal file
291
backend/src/parser.rs
Normal file
@@ -0,0 +1,291 @@
|
||||
use crate::{cell::CellRef, tokenizer::*};
|
||||
use std::{collections::HashSet, fmt};
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum PrefixOp {
|
||||
POS,
|
||||
NEG,
|
||||
NOT,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum PostfixOp {
|
||||
PERCENT,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum InfixOp {
|
||||
MUL,
|
||||
DIV,
|
||||
ADD,
|
||||
SUB,
|
||||
AND,
|
||||
OR,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum Expr {
|
||||
Literal(Literal),
|
||||
CellRef(CellRef),
|
||||
Function {
|
||||
name: String,
|
||||
args: Vec<Expr>,
|
||||
},
|
||||
Group(Box<Expr>),
|
||||
Prefix {
|
||||
op: PrefixOp,
|
||||
expr: Box<Expr>,
|
||||
},
|
||||
Postfix {
|
||||
op: PostfixOp,
|
||||
expr: Box<Expr>,
|
||||
},
|
||||
Infix {
|
||||
op: InfixOp,
|
||||
lhs: Box<Expr>,
|
||||
rhs: Box<Expr>,
|
||||
},
|
||||
}
|
||||
|
||||
// Ref: https://matklad.github.io/2020/04/13/simple-but-powerful-pratt-parsing.html
|
||||
// We have left and right precedence as to allow associative operators
|
||||
// to parse as you would more expect and to break ties in a predictable manner
|
||||
pub trait Precedence {
|
||||
fn prec(&self) -> (u8, u8);
|
||||
}
|
||||
|
||||
impl Precedence for InfixOp {
|
||||
fn prec(&self) -> (u8, u8) {
|
||||
match self {
|
||||
InfixOp::MUL | InfixOp::DIV | InfixOp::AND => (3, 4),
|
||||
InfixOp::ADD | InfixOp::SUB | InfixOp::OR => (1, 2),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl Precedence for PrefixOp {
|
||||
fn prec(&self) -> (u8, u8) {
|
||||
match self {
|
||||
_it => (0, 5),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl Precedence for PostfixOp {
|
||||
fn prec(&self) -> (u8, u8) {
|
||||
match self {
|
||||
_it => (6, 0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Expr {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
Expr::Literal(lit) => write!(f, "{lit:?}"),
|
||||
Expr::Group(expr) => write!(f, "({expr})"),
|
||||
Expr::Prefix { op, expr } => write!(f, "({op:?} {expr})"),
|
||||
Expr::Postfix { op, expr } => write!(f, "({op:?} {expr})"),
|
||||
Expr::Infix { op, lhs, rhs } => write!(f, "({lhs} {op:?} {rhs})"),
|
||||
Expr::Function { name, args } => write!(f, "{name}({args:?})"),
|
||||
Expr::CellRef(it) => write!(f, "{it:?}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
impl Expr {
|
||||
pub fn pretty(&self) -> String {
|
||||
// entry point for users — root printed without └──
|
||||
let mut result = String::new();
|
||||
result.push_str(&format!("{}\n", self.node_name()));
|
||||
result.push_str(&self.pretty_subtree("", true));
|
||||
result
|
||||
}
|
||||
|
||||
fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {
|
||||
let mut result = String::new();
|
||||
let new_prefix = if is_tail {
|
||||
format!("{} ", prefix)
|
||||
} else {
|
||||
format!("{}│ ", prefix)
|
||||
};
|
||||
|
||||
match self {
|
||||
Expr::Literal(_) => {}
|
||||
Expr::CellRef(_) => {}
|
||||
Expr::Group(expr) => {
|
||||
result.push_str(&expr.pretty_branch(&new_prefix, true));
|
||||
}
|
||||
Expr::Prefix { expr, .. } => {
|
||||
result.push_str(&expr.pretty_branch(&new_prefix, true));
|
||||
}
|
||||
Expr::Postfix { expr, .. } => {
|
||||
result.push_str(&expr.pretty_branch(&new_prefix, true));
|
||||
}
|
||||
Expr::Infix { lhs, rhs, .. } => {
|
||||
result.push_str(&lhs.pretty_branch(&new_prefix, false));
|
||||
result.push_str(&rhs.pretty_branch(&new_prefix, true));
|
||||
}
|
||||
Expr::Function { args, .. } => {
|
||||
for (idx, arg) in args.iter().enumerate() {
|
||||
result.push_str(&arg.pretty_branch(&new_prefix, idx == args.len() - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {
|
||||
let mut result = String::new();
|
||||
let branch = if is_tail { "└── " } else { "├── " };
|
||||
result.push_str(&format!("{}{}{}\n", prefix, branch, self.node_name()));
|
||||
result.push_str(&self.pretty_subtree(prefix, is_tail));
|
||||
result
|
||||
}
|
||||
|
||||
fn node_name(&self) -> String {
|
||||
match self {
|
||||
Expr::Literal(lit) => format!("Literal({:?})", lit),
|
||||
Expr::Group(_) => "Group".to_string(),
|
||||
Expr::Prefix { op, .. } => format!("Prefix({:?})", op),
|
||||
Expr::Postfix { op, .. } => format!("Postfix({:?})", op),
|
||||
Expr::Infix { op, .. } => format!("Infix({:?})", op),
|
||||
Expr::Function { name, .. } => format!("Function({:?})", name),
|
||||
Expr::CellRef(it) => format!("{:?}", it),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse(input: &str) -> Result<(Expr, HashSet<CellRef>), String> {
|
||||
let mut tokenizer = Tokenizer::new(input)?;
|
||||
// println!("{:?}", tokenizer.tokens);
|
||||
let mut deps = HashSet::new();
|
||||
Ok((_parse(&mut tokenizer, 0, &mut deps)?, deps))
|
||||
}
|
||||
|
||||
pub fn _parse(
|
||||
input: &mut Tokenizer,
|
||||
min_prec: u8,
|
||||
deps: &mut HashSet<CellRef>,
|
||||
) -> Result<Expr, String> {
|
||||
let mut lhs = match input.next() {
|
||||
Token::Literal(it) => Expr::Literal(it),
|
||||
Token::Identifier(id) if id == "true" => Expr::Literal(Literal::Boolean(true)),
|
||||
Token::Identifier(id) if id == "false" => Expr::Literal(Literal::Boolean(false)),
|
||||
Token::Paren('(') => {
|
||||
let lhs = _parse(input, 0, deps)?;
|
||||
if input.next() != Token::Paren(')') {
|
||||
return Err(format!("Parse error: expected closing paren."));
|
||||
}
|
||||
Expr::Group(Box::new(lhs))
|
||||
}
|
||||
Token::Operator(op) => {
|
||||
let prefix_op = match op {
|
||||
'+' => PrefixOp::POS,
|
||||
'-' => PrefixOp::NEG,
|
||||
'!' => PrefixOp::NOT,
|
||||
it => return Err(format!("Parse error: unknown prefix operator {:?}.", it)),
|
||||
};
|
||||
|
||||
let rhs = _parse(input, prefix_op.prec().1, deps)?;
|
||||
|
||||
Expr::Prefix {
|
||||
op: prefix_op,
|
||||
expr: Box::new(rhs),
|
||||
}
|
||||
}
|
||||
Token::Identifier(id) => match input.peek() {
|
||||
Token::Paren('(') => {
|
||||
input.next();
|
||||
|
||||
let mut args: Vec<Expr> = Vec::new();
|
||||
loop {
|
||||
let nxt = input.peek();
|
||||
|
||||
if nxt == Token::Paren(')') {
|
||||
input.next();
|
||||
break;
|
||||
} else if nxt != Token::Comma && args.len() != 0 {
|
||||
return Err(format!(
|
||||
"Parse error: expected comma while parsing argument of function {:?}.",
|
||||
id
|
||||
));
|
||||
}
|
||||
|
||||
if args.len() != 0 {
|
||||
input.next(); // Skip comma
|
||||
}
|
||||
|
||||
let arg = _parse(input, 0, deps)?;
|
||||
args.push(arg);
|
||||
}
|
||||
|
||||
Expr::Function {
|
||||
name: id,
|
||||
args: args,
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
let cell_ref = CellRef::new(id)?;
|
||||
deps.insert(cell_ref);
|
||||
Expr::CellRef(cell_ref)
|
||||
}
|
||||
},
|
||||
|
||||
it => return Err(format!("Parse error: did not expect token {:?}.", it)),
|
||||
};
|
||||
|
||||
// In the reference article this is a loop with match
|
||||
// statement that breaks on Eof and closing paren but this is simpler and works as expected
|
||||
while let Token::Operator(op) = input.peek() {
|
||||
if "+-*/&|".contains(op) {
|
||||
let infix_op = match op {
|
||||
'+' => InfixOp::ADD,
|
||||
'-' => InfixOp::SUB,
|
||||
'*' => InfixOp::MUL,
|
||||
'/' => InfixOp::DIV,
|
||||
'&' => InfixOp::AND,
|
||||
'|' => InfixOp::OR,
|
||||
it => {
|
||||
return Err(format!("Parse error: do not know infix operator {:?}.", it));
|
||||
}
|
||||
};
|
||||
|
||||
let (l_prec, r_prec) = infix_op.prec();
|
||||
if l_prec < min_prec {
|
||||
break;
|
||||
}
|
||||
|
||||
input.next();
|
||||
let rhs = _parse(input, r_prec, deps)?;
|
||||
lhs = Expr::Infix {
|
||||
op: infix_op,
|
||||
lhs: Box::new(lhs),
|
||||
rhs: Box::new(rhs),
|
||||
};
|
||||
} else if "%".contains(op) {
|
||||
let postfix_op = match op {
|
||||
'%' => PostfixOp::PERCENT,
|
||||
it => {
|
||||
return Err(format!(
|
||||
"Parse error: do not know postfix operator {:?}.",
|
||||
it
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
let (l_prec, _) = postfix_op.prec();
|
||||
if l_prec < min_prec {
|
||||
break;
|
||||
}
|
||||
|
||||
input.next();
|
||||
lhs = Expr::Postfix {
|
||||
op: postfix_op,
|
||||
expr: Box::new(lhs),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ok(lhs)
|
||||
}
|
||||
136
backend/src/tokenizer.rs
Normal file
136
backend/src/tokenizer.rs
Normal file
@@ -0,0 +1,136 @@
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum Literal {
|
||||
Integer(i64),
|
||||
Double(f64),
|
||||
Boolean(bool),
|
||||
String(String),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum Token {
|
||||
Identifier(String), // Could be a function
|
||||
Literal(Literal),
|
||||
Operator(char),
|
||||
Paren(char),
|
||||
Comma,
|
||||
Eof,
|
||||
}
|
||||
|
||||
pub struct Tokenizer {
|
||||
pub tokens: Vec<Token>,
|
||||
}
|
||||
|
||||
impl Tokenizer {
|
||||
pub fn new(input: &str) -> Result<Tokenizer, String> {
|
||||
let mut tokens = Vec::new();
|
||||
let mut chars = input.chars().peekable();
|
||||
|
||||
while let Some(&c) = chars.peek() {
|
||||
if c.is_whitespace() {
|
||||
chars.next();
|
||||
} else if c.is_ascii_alphabetic() {
|
||||
// parse identifier
|
||||
let mut ident = String::new();
|
||||
while let Some(&ch) = chars.peek() {
|
||||
if ch.is_ascii_alphanumeric() || ch == '_' {
|
||||
ident.push(ch);
|
||||
chars.next();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
tokens.push(Token::Identifier(ident));
|
||||
} else if c.is_ascii_digit() {
|
||||
// parse number
|
||||
let mut number = String::new();
|
||||
let mut is_decimal = false;
|
||||
|
||||
while let Some(&ch) = chars.peek() {
|
||||
if ch.is_ascii_digit() {
|
||||
number.push(ch);
|
||||
chars.next();
|
||||
} else if ch == '.' && !is_decimal {
|
||||
is_decimal = true;
|
||||
number.push(ch);
|
||||
chars.next();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if is_decimal {
|
||||
tokens.push(Token::Literal(Literal::Double(number.parse().unwrap())))
|
||||
} else {
|
||||
tokens.push(Token::Literal(Literal::Integer(number.parse().unwrap())))
|
||||
};
|
||||
} else if c == '"' || c == '\'' {
|
||||
// parse string literal
|
||||
let mut string = String::new();
|
||||
|
||||
let quote = c;
|
||||
let mut escapes = 0;
|
||||
chars.next(); // consume opening quote
|
||||
|
||||
while let Some(&ch) = chars.peek() {
|
||||
chars.next();
|
||||
if ch == quote && escapes % 2 == 0 {
|
||||
break;
|
||||
}
|
||||
|
||||
if ch == '\\' {
|
||||
escapes += 1;
|
||||
} else {
|
||||
escapes = 0;
|
||||
}
|
||||
|
||||
string.push(ch);
|
||||
}
|
||||
tokens.push(Token::Literal(Literal::String(string)));
|
||||
} else if "+-*/^!%&|".contains(c) {
|
||||
tokens.push(Token::Operator(c));
|
||||
chars.next();
|
||||
} else if "()".contains(c) {
|
||||
tokens.push(Token::Paren(c));
|
||||
chars.next();
|
||||
} else if c == ',' {
|
||||
tokens.push(Token::Comma);
|
||||
chars.next();
|
||||
} else {
|
||||
return Err(format!("Encountered unknown token char: {c}"));
|
||||
}
|
||||
}
|
||||
|
||||
tokens.reverse(); // Since we want FIFO and next + peek are implemented as LILO
|
||||
Ok(Tokenizer { tokens })
|
||||
}
|
||||
|
||||
pub fn next(&mut self) -> Token {
|
||||
self.tokens.pop().unwrap_or(Token::Eof)
|
||||
}
|
||||
pub fn peek(&mut self) -> Token {
|
||||
self.tokens.last().cloned().unwrap_or(Token::Eof)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_tokenizer() {
|
||||
let raw = "hello hello 1.23 this 5 (1+2)";
|
||||
let expected: Vec<Token> = vec![
|
||||
Token::Identifier("hello".to_string()),
|
||||
Token::Identifier("hello".to_string()),
|
||||
Token::Literal(Literal::Double(1.23)),
|
||||
Token::Identifier("this".to_string()),
|
||||
Token::Literal(Literal::Integer(5)),
|
||||
Token::Paren('('),
|
||||
Token::Literal(Literal::Integer(1)),
|
||||
Token::Operator('+'),
|
||||
Token::Literal(Literal::Integer(2)),
|
||||
Token::Paren(')'),
|
||||
];
|
||||
let t = Tokenizer::new(&raw).unwrap();
|
||||
assert_eq!(t.tokens, expected);
|
||||
}
|
||||
}
|
||||
1
backend/target/.rustc_info.json
Normal file
1
backend/target/.rustc_info.json
Normal file
@@ -0,0 +1 @@
|
||||
{"rustc_fingerprint":11413234463364555679,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.88.0 (6b00bc388 2025-06-23) (built from a source tarball)\nbinary: rustc\ncommit-hash: 6b00bc3880198600130e1cf62b8f8a93494488cc\ncommit-date: 2025-06-23\nhost: x86_64-unknown-linux-gnu\nrelease: 1.88.0\nLLVM version: 20.1.6\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/nix/store/xhjgrhhjbf0kilrvy8g6dffsw1qz9qfk-rustc-1.88.0\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"11857020428658561806":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/nix/store/xhjgrhhjbf0kilrvy8g6dffsw1qz9qfk-rustc-1.88.0\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}
|
||||
3
backend/target/CACHEDIR.TAG
Normal file
3
backend/target/CACHEDIR.TAG
Normal file
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
0
backend/target/debug/.cargo-lock
Normal file
0
backend/target/debug/.cargo-lock
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
6f4076a60f572e20
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"extra-platforms\", \"serde\", \"std\"]","target":15971911772774047941,"profile":13827760451848848284,"path":17495929375310606232,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bytes-b7a8adba472fd3d1/dep-lib-bytes","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
14595fcc7dbc8a28
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":10248144769085601448,"profile":2241668132362809309,"path":636161265678825063,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fnv-03ef42a39b0f64e6/dep-lib-fnv","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
c4164fa71ffab791
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":12592702405390259930,"profile":2241668132362809309,"path":5373269520517302921,"deps":[[1345404220202658316,"fnv",false,2921354556788922644],[7695812897323945497,"itoa",false,17283172376607960751],[16066129441945555748,"bytes",false,2318886582871277679]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/http-3fdccdd8122c83bd/dep-lib-http","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
afae8fd3b429daef
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[\"no-panic\"]","target":8239509073162986830,"profile":2241668132362809309,"path":9277145852362913373,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/itoa-b2865fe037c8910d/dep-lib-itoa","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
0d2d5581515f0468
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[]","target":9940818901061922722,"profile":17672942494452627365,"path":4942398508502643691,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lead-rust-79c563f084c6ab18/dep-bin-lead-rust","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1,6 @@
|
||||
{"$message_type":"diagnostic","message":"unused variable: `deps`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/evaluator.rs","byte_start":1716,"byte_end":1720,"line_start":66,"line_end":66,"column_start":28,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":28,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/evaluator.rs","byte_start":1716,"byte_end":1720,"line_start":66,"line_end":66,"column_start":28,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":28,"highlight_end":32}],"label":null,"suggested_replacement":"_deps","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `deps`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/evaluator.rs:66:28\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m66\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (mut expr, mut deps) = parse(&str)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_deps`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"src/evaluator.rs","byte_start":1712,"byte_end":1720,"line_start":66,"line_end":66,"column_start":24,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":24,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_mut)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"src/evaluator.rs","byte_start":1712,"byte_end":1716,"line_start":66,"line_end":66,"column_start":24,"column_end":28,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":24,"highlight_end":28}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/evaluator.rs:66:24\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m66\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (mut expr, mut deps) = parse(&str)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_mut)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"field `deps` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/cell.rs","byte_start":86,"byte_end":90,"line_start":6,"line_end":6,"column_start":12,"column_end":16,"is_primary":false,"text":[{"text":"pub struct Cell {","highlight_start":12,"highlight_end":16}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":130,"byte_end":134,"line_start":9,"line_end":9,"column_start":5,"column_end":9,"is_primary":true,"text":[{"text":" deps: HashSet<CellRef>,","highlight_start":5,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: field `deps` is never read\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/cell.rs:9:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mpub struct Cell {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mfield in this struct\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m9\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m deps: HashSet<CellRef>,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"methods `add_dep`, `clear_deps`, and `set_eval` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/cell.rs","byte_start":157,"byte_end":166,"line_start":12,"line_end":12,"column_start":1,"column_end":10,"is_primary":false,"text":[{"text":"impl Cell {","highlight_start":1,"highlight_end":10}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":463,"byte_end":470,"line_start":29,"line_end":29,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":" pub fn add_dep(&mut self, dep: CellRef) {","highlight_start":12,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":547,"byte_end":557,"line_start":33,"line_end":33,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":" pub fn clear_deps(&mut self) {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":616,"byte_end":624,"line_start":37,"line_end":37,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn set_eval(&mut self, eval: Eval) {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: methods `add_dep`, `clear_deps`, and `set_eval` are never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/cell.rs:29:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m12\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mimpl Cell {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m---------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mmethods in this implementation\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m29\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn add_dep(&mut self, dep: CellRef) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m33\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn clear_deps(&mut self) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m37\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn set_eval(&mut self, eval: Eval) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"methods `pretty`, `pretty_subtree`, `pretty_branch`, and `node_name` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":2144,"byte_end":2153,"line_start":94,"line_end":94,"column_start":1,"column_end":10,"is_primary":false,"text":[{"text":"impl Expr {","highlight_start":1,"highlight_end":10}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":2167,"byte_end":2173,"line_start":95,"line_end":95,"column_start":12,"column_end":18,"is_primary":true,"text":[{"text":" pub fn pretty(&self) -> String {","highlight_start":12,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":2448,"byte_end":2462,"line_start":103,"line_end":103,"column_start":8,"column_end":22,"is_primary":true,"text":[{"text":" fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {","highlight_start":8,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":3644,"byte_end":3657,"line_start":136,"line_end":136,"column_start":8,"column_end":21,"is_primary":true,"text":[{"text":" fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {","highlight_start":8,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":3992,"byte_end":4001,"line_start":144,"line_end":144,"column_start":8,"column_end":17,"is_primary":true,"text":[{"text":" fn node_name(&self) -> String {","highlight_start":8,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: methods `pretty`, `pretty_subtree`, `pretty_branch`, and `node_name` are never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:95:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m94\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mimpl Expr {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m---------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mmethods in this implementation\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m95\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn pretty(&self) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m103\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m136\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m144\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn node_name(&self) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"5 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 5 warnings emitted\u001b[0m\n\n"}
|
||||
@@ -0,0 +1 @@
|
||||
fe5c2ff0ffcbd9e4
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[]","target":9940818901061922722,"profile":8731458305071235362,"path":4942398508502643691,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lead-rust-8715280d3338b630/dep-bin-lead-rust","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1,6 @@
|
||||
{"$message_type":"diagnostic","message":"unused variable: `deps`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/evaluator.rs","byte_start":1716,"byte_end":1720,"line_start":66,"line_end":66,"column_start":28,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":28,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/evaluator.rs","byte_start":1716,"byte_end":1720,"line_start":66,"line_end":66,"column_start":28,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":28,"highlight_end":32}],"label":null,"suggested_replacement":"_deps","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `deps`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/evaluator.rs:66:28\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m66\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (mut expr, mut deps) = parse(&str)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_deps`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"src/evaluator.rs","byte_start":1712,"byte_end":1720,"line_start":66,"line_end":66,"column_start":24,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":24,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_mut)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"src/evaluator.rs","byte_start":1712,"byte_end":1716,"line_start":66,"line_end":66,"column_start":24,"column_end":28,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":24,"highlight_end":28}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/evaluator.rs:66:24\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m66\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (mut expr, mut deps) = parse(&str)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_mut)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"field `deps` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/cell.rs","byte_start":86,"byte_end":90,"line_start":6,"line_end":6,"column_start":12,"column_end":16,"is_primary":false,"text":[{"text":"pub struct Cell {","highlight_start":12,"highlight_end":16}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":130,"byte_end":134,"line_start":9,"line_end":9,"column_start":5,"column_end":9,"is_primary":true,"text":[{"text":" deps: HashSet<CellRef>,","highlight_start":5,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: field `deps` is never read\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/cell.rs:9:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mpub struct Cell {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mfield in this struct\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m9\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m deps: HashSet<CellRef>,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"methods `add_dep`, `clear_deps`, and `set_eval` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/cell.rs","byte_start":157,"byte_end":166,"line_start":12,"line_end":12,"column_start":1,"column_end":10,"is_primary":false,"text":[{"text":"impl Cell {","highlight_start":1,"highlight_end":10}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":463,"byte_end":470,"line_start":29,"line_end":29,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":" pub fn add_dep(&mut self, dep: CellRef) {","highlight_start":12,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":547,"byte_end":557,"line_start":33,"line_end":33,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":" pub fn clear_deps(&mut self) {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":616,"byte_end":624,"line_start":37,"line_end":37,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn set_eval(&mut self, eval: Eval) {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: methods `add_dep`, `clear_deps`, and `set_eval` are never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/cell.rs:29:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m12\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mimpl Cell {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m---------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mmethods in this implementation\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m29\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn add_dep(&mut self, dep: CellRef) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m33\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn clear_deps(&mut self) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m37\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn set_eval(&mut self, eval: Eval) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"methods `pretty`, `pretty_subtree`, `pretty_branch`, and `node_name` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":2144,"byte_end":2153,"line_start":94,"line_end":94,"column_start":1,"column_end":10,"is_primary":false,"text":[{"text":"impl Expr {","highlight_start":1,"highlight_end":10}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":2167,"byte_end":2173,"line_start":95,"line_end":95,"column_start":12,"column_end":18,"is_primary":true,"text":[{"text":" pub fn pretty(&self) -> String {","highlight_start":12,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":2448,"byte_end":2462,"line_start":103,"line_end":103,"column_start":8,"column_end":22,"is_primary":true,"text":[{"text":" fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {","highlight_start":8,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":3644,"byte_end":3657,"line_start":136,"line_end":136,"column_start":8,"column_end":21,"is_primary":true,"text":[{"text":" fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {","highlight_start":8,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":3992,"byte_end":4001,"line_start":144,"line_end":144,"column_start":8,"column_end":17,"is_primary":true,"text":[{"text":" fn node_name(&self) -> String {","highlight_start":8,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: methods `pretty`, `pretty_subtree`, `pretty_branch`, and `node_name` are never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:95:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m94\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mimpl Expr {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m---------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mmethods in this implementation\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m95\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn pretty(&self) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m103\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m136\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m144\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn node_name(&self) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"5 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 5 warnings emitted\u001b[0m\n\n"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1,6 @@
|
||||
{"$message_type":"diagnostic","message":"unused variable: `deps`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/evaluator.rs","byte_start":1716,"byte_end":1720,"line_start":66,"line_end":66,"column_start":28,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":28,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/evaluator.rs","byte_start":1716,"byte_end":1720,"line_start":66,"line_end":66,"column_start":28,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":28,"highlight_end":32}],"label":null,"suggested_replacement":"_deps","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `deps`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/evaluator.rs:66:28\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m66\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (mut expr, mut deps) = parse(&str)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_deps`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"src/evaluator.rs","byte_start":1712,"byte_end":1720,"line_start":66,"line_end":66,"column_start":24,"column_end":32,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":24,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_mut)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"src/evaluator.rs","byte_start":1712,"byte_end":1716,"line_start":66,"line_end":66,"column_start":24,"column_end":28,"is_primary":true,"text":[{"text":" let (mut expr, mut deps) = parse(&str)?;","highlight_start":24,"highlight_end":28}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/evaluator.rs:66:24\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m66\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (mut expr, mut deps) = parse(&str)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_mut)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"field `deps` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/cell.rs","byte_start":86,"byte_end":90,"line_start":6,"line_end":6,"column_start":12,"column_end":16,"is_primary":false,"text":[{"text":"pub struct Cell {","highlight_start":12,"highlight_end":16}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":130,"byte_end":134,"line_start":9,"line_end":9,"column_start":5,"column_end":9,"is_primary":true,"text":[{"text":" deps: HashSet<CellRef>,","highlight_start":5,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: field `deps` is never read\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/cell.rs:9:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mpub struct Cell {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mfield in this struct\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m9\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m deps: HashSet<CellRef>,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"methods `add_dep`, `clear_deps`, and `set_eval` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/cell.rs","byte_start":157,"byte_end":166,"line_start":12,"line_end":12,"column_start":1,"column_end":10,"is_primary":false,"text":[{"text":"impl Cell {","highlight_start":1,"highlight_end":10}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":463,"byte_end":470,"line_start":29,"line_end":29,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":" pub fn add_dep(&mut self, dep: CellRef) {","highlight_start":12,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":547,"byte_end":557,"line_start":33,"line_end":33,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":" pub fn clear_deps(&mut self) {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/cell.rs","byte_start":616,"byte_end":624,"line_start":37,"line_end":37,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn set_eval(&mut self, eval: Eval) {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: methods `add_dep`, `clear_deps`, and `set_eval` are never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/cell.rs:29:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m12\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mimpl Cell {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m---------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mmethods in this implementation\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m29\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn add_dep(&mut self, dep: CellRef) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m33\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn clear_deps(&mut self) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m37\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn set_eval(&mut self, eval: Eval) {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"methods `pretty`, `pretty_subtree`, `pretty_branch`, and `node_name` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":2144,"byte_end":2153,"line_start":94,"line_end":94,"column_start":1,"column_end":10,"is_primary":false,"text":[{"text":"impl Expr {","highlight_start":1,"highlight_end":10}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":2167,"byte_end":2173,"line_start":95,"line_end":95,"column_start":12,"column_end":18,"is_primary":true,"text":[{"text":" pub fn pretty(&self) -> String {","highlight_start":12,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":2448,"byte_end":2462,"line_start":103,"line_end":103,"column_start":8,"column_end":22,"is_primary":true,"text":[{"text":" fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {","highlight_start":8,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":3644,"byte_end":3657,"line_start":136,"line_end":136,"column_start":8,"column_end":21,"is_primary":true,"text":[{"text":" fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {","highlight_start":8,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":3992,"byte_end":4001,"line_start":144,"line_end":144,"column_start":8,"column_end":17,"is_primary":true,"text":[{"text":" fn node_name(&self) -> String {","highlight_start":8,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: methods `pretty`, `pretty_subtree`, `pretty_branch`, and `node_name` are never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:95:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m94\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mimpl Expr {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m---------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mmethods in this implementation\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m95\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m pub fn pretty(&self) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m103\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn pretty_subtree(&self, prefix: &str, is_tail: bool) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m136\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn pretty_branch(&self, prefix: &str, is_tail: bool) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m144\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m fn node_name(&self) -> String {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"5 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 5 warnings emitted\u001b[0m\n\n"}
|
||||
@@ -0,0 +1 @@
|
||||
5af63d6694482d90
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[]","target":9940818901061922722,"profile":3316208278650011218,"path":4942398508502643691,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lead-rust-ac923cdbaa8c6285/dep-test-bin-lead-rust","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
6d3f3133b1ba55b5
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[]","target":9940818901061922722,"profile":17672942494452627365,"path":4942398508502643691,"deps":[[9010263965687315507,"http",false,10500136070095509188]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lead-rust-c5d8fd89dd3e5c59/dep-bin-lead-rust","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1,3 @@
|
||||
{"$message_type":"diagnostic","message":"variants `Identifier`, `Operator`, `Paren`, and `Unknown` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/tokenizer.rs","byte_start":37,"byte_end":42,"line_start":2,"line_end":2,"column_start":10,"column_end":15,"is_primary":false,"text":[{"text":"pub enum Token {","highlight_start":10,"highlight_end":15}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/tokenizer.rs","byte_start":49,"byte_end":59,"line_start":3,"line_end":3,"column_start":5,"column_end":15,"is_primary":true,"text":[{"text":" Identifier(String),","highlight_start":5,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/tokenizer.rs","byte_start":90,"byte_end":98,"line_start":5,"line_end":5,"column_start":5,"column_end":13,"is_primary":true,"text":[{"text":" Operator(char),","highlight_start":5,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/tokenizer.rs","byte_start":110,"byte_end":115,"line_start":6,"line_end":6,"column_start":5,"column_end":10,"is_primary":true,"text":[{"text":" Paren(char),","highlight_start":5,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/tokenizer.rs","byte_start":127,"byte_end":134,"line_start":7,"line_end":7,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":" Unknown(char),","highlight_start":5,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`Token` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variants `Identifier`, `Operator`, `Paren`, and `Unknown` are never constructed\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/tokenizer.rs:3:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m2\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mpub enum Token {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-----\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mvariants in this enum\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m3\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Identifier(String),\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m4\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Number(i64),\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m5\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Operator(char),\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Paren(char),\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m7\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Unknown(char),\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `Token` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"function `tokenize` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/tokenizer.rs","byte_start":152,"byte_end":160,"line_start":10,"line_end":10,"column_start":8,"column_end":16,"is_primary":true,"text":[{"text":"pub fn tokenize(input: &str) -> Vec<Token> {","highlight_start":8,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: function `tokenize` is never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/tokenizer.rs:10:8\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mpub fn tokenize(input: &str) -> Vec<Token> {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"2 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 2 warnings emitted\u001b[0m\n\n"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
65ae1691789a65a9
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[]","target":9940818901061922722,"profile":3316208278650011218,"path":4942398508502643691,"deps":[[9010263965687315507,"http",false,10500136070095509188]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lead-rust-d2081f88ebedd77c/dep-test-bin-lead-rust","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1,2 @@
|
||||
{"$message_type":"diagnostic","message":"unused import: `crate::parser::*`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":57,"byte_end":73,"line_start":5,"line_end":5,"column_start":5,"column_end":21,"is_primary":true,"text":[{"text":"use crate::parser::*;","highlight_start":5,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/main.rs","byte_start":53,"byte_end":75,"line_start":5,"line_end":6,"column_start":1,"column_end":1,"is_primary":true,"text":[{"text":"use crate::parser::*;","highlight_start":1,"highlight_end":22},{"text":"use std::io;","highlight_start":1,"highlight_end":1}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `crate::parser::*`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:5:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m5\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse crate::parser::*;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"1 warning emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 1 warning emitted\u001b[0m\n\n"}
|
||||
@@ -0,0 +1 @@
|
||||
c6b4605e20992aba
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":7392355663475926777,"features":"[]","declared_features":"[]","target":9940818901061922722,"profile":1722584277633009122,"path":4942398508502643691,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lead-rust-f42cf83cbde4bc5a/dep-test-bin-lead-rust","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
22
backend/target/debug/deps/bytes-b7a8adba472fd3d1.d
Normal file
22
backend/target/debug/deps/bytes-b7a8adba472fd3d1.d
Normal file
@@ -0,0 +1,22 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/bytes-b7a8adba472fd3d1.d: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/lib.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_impl.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_mut.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/chain.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/iter.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/limit.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/reader.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/take.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/uninit_slice.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/vec_deque.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/writer.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes_mut.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/debug.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/hex.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/loom.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/libbytes-b7a8adba472fd3d1.rmeta: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/lib.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_impl.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_mut.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/chain.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/iter.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/limit.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/reader.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/take.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/uninit_slice.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/vec_deque.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/writer.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes_mut.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/debug.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/hex.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/loom.rs
|
||||
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/lib.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/mod.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_impl.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/buf_mut.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/chain.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/iter.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/limit.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/reader.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/take.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/uninit_slice.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/vec_deque.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/buf/writer.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/bytes_mut.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/mod.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/debug.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/fmt/hex.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bytes-1.10.1/src/loom.rs:
|
||||
5
backend/target/debug/deps/fnv-03ef42a39b0f64e6.d
Normal file
5
backend/target/debug/deps/fnv-03ef42a39b0f64e6.d
Normal file
@@ -0,0 +1,5 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/fnv-03ef42a39b0f64e6.d: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/fnv-1.0.7/lib.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/libfnv-03ef42a39b0f64e6.rmeta: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/fnv-1.0.7/lib.rs
|
||||
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/fnv-1.0.7/lib.rs:
|
||||
24
backend/target/debug/deps/http-3fdccdd8122c83bd.d
Normal file
24
backend/target/debug/deps/http-3fdccdd8122c83bd.d
Normal file
@@ -0,0 +1,24 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/http-3fdccdd8122c83bd.d: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/lib.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/convert.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/map.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/name.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/value.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/method.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/request.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/response.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/status.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/authority.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/builder.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/path.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/port.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/scheme.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/version.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/byte_str.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/error.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/extensions.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/libhttp-3fdccdd8122c83bd.rmeta: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/lib.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/convert.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/map.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/name.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/value.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/method.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/request.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/response.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/status.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/mod.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/authority.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/builder.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/path.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/port.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/scheme.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/version.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/byte_str.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/error.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/extensions.rs
|
||||
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/lib.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/convert.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/mod.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/map.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/name.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/header/value.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/method.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/request.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/response.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/status.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/mod.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/authority.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/builder.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/path.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/port.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/uri/scheme.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/version.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/byte_str.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/error.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/http-1.3.1/src/extensions.rs:
|
||||
6
backend/target/debug/deps/itoa-b2865fe037c8910d.d
Normal file
6
backend/target/debug/deps/itoa-b2865fe037c8910d.d
Normal file
@@ -0,0 +1,6 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/itoa-b2865fe037c8910d.d: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/itoa-1.0.15/src/lib.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/itoa-1.0.15/src/udiv128.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/libitoa-b2865fe037c8910d.rmeta: /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/itoa-1.0.15/src/lib.rs /home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/itoa-1.0.15/src/udiv128.rs
|
||||
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/itoa-1.0.15/src/lib.rs:
|
||||
/home/lloyd/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/itoa-1.0.15/src/udiv128.rs:
|
||||
9
backend/target/debug/deps/lead_rust-79c563f084c6ab18.d
Normal file
9
backend/target/debug/deps/lead_rust-79c563f084c6ab18.d
Normal file
@@ -0,0 +1,9 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-79c563f084c6ab18.d: src/main.rs src/cell.rs src/evaluator.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/liblead_rust-79c563f084c6ab18.rmeta: src/main.rs src/cell.rs src/evaluator.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
src/main.rs:
|
||||
src/cell.rs:
|
||||
src/evaluator.rs:
|
||||
src/parser.rs:
|
||||
src/tokenizer.rs:
|
||||
BIN
backend/target/debug/deps/lead_rust-8715280d3338b630
Executable file
BIN
backend/target/debug/deps/lead_rust-8715280d3338b630
Executable file
Binary file not shown.
9
backend/target/debug/deps/lead_rust-8715280d3338b630.d
Normal file
9
backend/target/debug/deps/lead_rust-8715280d3338b630.d
Normal file
@@ -0,0 +1,9 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-8715280d3338b630.d: src/main.rs src/cell.rs src/evaluator.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-8715280d3338b630: src/main.rs src/cell.rs src/evaluator.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
src/main.rs:
|
||||
src/cell.rs:
|
||||
src/evaluator.rs:
|
||||
src/parser.rs:
|
||||
src/tokenizer.rs:
|
||||
9
backend/target/debug/deps/lead_rust-ac923cdbaa8c6285.d
Normal file
9
backend/target/debug/deps/lead_rust-ac923cdbaa8c6285.d
Normal file
@@ -0,0 +1,9 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-ac923cdbaa8c6285.d: src/main.rs src/cell.rs src/evaluator.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/liblead_rust-ac923cdbaa8c6285.rmeta: src/main.rs src/cell.rs src/evaluator.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
src/main.rs:
|
||||
src/cell.rs:
|
||||
src/evaluator.rs:
|
||||
src/parser.rs:
|
||||
src/tokenizer.rs:
|
||||
6
backend/target/debug/deps/lead_rust-c5d8fd89dd3e5c59.d
Normal file
6
backend/target/debug/deps/lead_rust-c5d8fd89dd3e5c59.d
Normal file
@@ -0,0 +1,6 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-c5d8fd89dd3e5c59.d: src/main.rs src/tokenizer.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/liblead_rust-c5d8fd89dd3e5c59.rmeta: src/main.rs src/tokenizer.rs
|
||||
|
||||
src/main.rs:
|
||||
src/tokenizer.rs:
|
||||
6
backend/target/debug/deps/lead_rust-d2081f88ebedd77c.d
Normal file
6
backend/target/debug/deps/lead_rust-d2081f88ebedd77c.d
Normal file
@@ -0,0 +1,6 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-d2081f88ebedd77c.d: src/main.rs src/tokenizer.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/liblead_rust-d2081f88ebedd77c.rmeta: src/main.rs src/tokenizer.rs
|
||||
|
||||
src/main.rs:
|
||||
src/tokenizer.rs:
|
||||
BIN
backend/target/debug/deps/lead_rust-f42cf83cbde4bc5a
Executable file
BIN
backend/target/debug/deps/lead_rust-f42cf83cbde4bc5a
Executable file
Binary file not shown.
7
backend/target/debug/deps/lead_rust-f42cf83cbde4bc5a.d
Normal file
7
backend/target/debug/deps/lead_rust-f42cf83cbde4bc5a.d
Normal file
@@ -0,0 +1,7 @@
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-f42cf83cbde4bc5a.d: src/main.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
/home/lloyd/projects/lead-rust/target/debug/deps/lead_rust-f42cf83cbde4bc5a: src/main.rs src/parser.rs src/tokenizer.rs
|
||||
|
||||
src/main.rs:
|
||||
src/parser.rs:
|
||||
src/tokenizer.rs:
|
||||
BIN
backend/target/debug/deps/libbytes-b7a8adba472fd3d1.rmeta
Normal file
BIN
backend/target/debug/deps/libbytes-b7a8adba472fd3d1.rmeta
Normal file
Binary file not shown.
BIN
backend/target/debug/deps/libfnv-03ef42a39b0f64e6.rmeta
Normal file
BIN
backend/target/debug/deps/libfnv-03ef42a39b0f64e6.rmeta
Normal file
Binary file not shown.
BIN
backend/target/debug/deps/libhttp-3fdccdd8122c83bd.rmeta
Normal file
BIN
backend/target/debug/deps/libhttp-3fdccdd8122c83bd.rmeta
Normal file
Binary file not shown.
BIN
backend/target/debug/deps/libitoa-b2865fe037c8910d.rmeta
Normal file
BIN
backend/target/debug/deps/libitoa-b2865fe037c8910d.rmeta
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user