From b4b8dd53e0d2fda4c422c6685e1a5b288ee02805 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 21 Nov 2021 23:00:12 +0100 Subject: [PATCH] Move stuff to files module --- src/eval.rs | 2 +- src/eval/entries.rs | 3 +-- src/files.rs | 15 ++++++++------ src/{ => files}/commands.rs | 6 ++++++ src/{ => files}/format.rs | 2 +- .../todayfile.pest => files/grammar.pest} | 0 src/{ => files}/parse.rs | 20 ++++++++++++------- src/main.rs | 3 --- 8 files changed, 31 insertions(+), 20 deletions(-) rename src/{ => files}/commands.rs (98%) rename src/{ => files}/format.rs (99%) rename src/{parse/todayfile.pest => files/grammar.pest} (100%) rename src/{ => files}/parse.rs (98%) diff --git a/src/eval.rs b/src/eval.rs index 42e90f4..3a36b56 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -3,7 +3,7 @@ use std::result; use chrono::{Datelike, NaiveDate}; -use crate::commands::{Birthday, Command, File, Note, Spec, Task}; +use crate::files::commands::{Birthday, Command, File, Note, Spec, Task}; use self::entries::{DateRange, Entry, EntryKind, EntryMap}; diff --git a/src/eval/entries.rs b/src/eval/entries.rs index 24ebcd5..4b3b434 100644 --- a/src/eval/entries.rs +++ b/src/eval/entries.rs @@ -1,10 +1,9 @@ use std::collections::HashMap; use std::ops::RangeInclusive; -use std::str::from_boxed_utf8_unchecked; use chrono::{Datelike, NaiveDate}; -use crate::commands::Time; +use crate::files::commands::Time; #[derive(Debug, PartialEq, Eq)] pub enum EntryKind { diff --git a/src/files.rs b/src/files.rs index 392525a..446265d 100644 --- a/src/files.rs +++ b/src/files.rs @@ -4,8 +4,11 @@ use std::{fs, io, result}; use chrono_tz::Tz; -use crate::commands::File; -use crate::parse; +use self::commands::File; + +pub mod commands; +mod format; +mod parse; #[derive(Debug)] pub struct Files { @@ -30,24 +33,24 @@ impl Files { timezone: None, }; - new.load_file(path)?; + new.load_file(path.to_owned())?; new.determine_timezone()?; Ok(new) } - fn load_file(&mut self, path: &Path) -> Result<()> { + fn load_file(&mut self, path: PathBuf) -> Result<()> { let canon_path = path.canonicalize()?; if self.files.contains_key(&canon_path) { // We've already loaded this exact file. return Ok(()); } - let content = fs::read_to_string(path)?; + let content = fs::read_to_string(&path)?; let file = parse::parse(path, &content)?; self.files.insert(canon_path, file); - // TODO Also load all imported files + // TODO Also load all included files Ok(()) } diff --git a/src/commands.rs b/src/files/commands.rs similarity index 98% rename from src/commands.rs rename to src/files/commands.rs index 6dc55e3..79139f0 100644 --- a/src/commands.rs +++ b/src/files/commands.rs @@ -1,4 +1,7 @@ +use std::path::PathBuf; + use chrono::NaiveDate; +use chrono_tz::Tz; #[derive(Debug)] pub struct Time { @@ -326,5 +329,8 @@ pub enum Command { #[derive(Debug)] pub struct File { + pub name: PathBuf, + pub includes: Vec, + pub timezone: Option, pub commands: Vec, } diff --git a/src/format.rs b/src/files/format.rs similarity index 99% rename from src/format.rs rename to src/files/format.rs index ab847ba..0e311e2 100644 --- a/src/format.rs +++ b/src/files/format.rs @@ -2,7 +2,7 @@ use std::fmt; use chrono::Datelike; -use crate::commands::{ +use super::commands::{ Birthday, BirthdaySpec, Command, DateSpec, Delta, DeltaStep, Done, Expr, File, FormulaSpec, Note, Spec, Task, Time, Var, Weekday, WeekdaySpec, }; diff --git a/src/parse/todayfile.pest b/src/files/grammar.pest similarity index 100% rename from src/parse/todayfile.pest rename to src/files/grammar.pest diff --git a/src/parse.rs b/src/files/parse.rs similarity index 98% rename from src/parse.rs rename to src/files/parse.rs index 2dbe5df..d523358 100644 --- a/src/parse.rs +++ b/src/files/parse.rs @@ -1,4 +1,4 @@ -use std::path::Path; +use std::path::PathBuf; use std::result; use chrono::NaiveDate; @@ -7,13 +7,13 @@ use pest::iterators::Pair; use pest::prec_climber::{Assoc, Operator, PrecClimber}; use pest::{Parser, Span}; -use crate::commands::{ +use super::commands::{ Birthday, BirthdaySpec, Command, DateSpec, Delta, DeltaStep, Done, Expr, File, FormulaSpec, Note, Spec, Task, Time, Var, Weekday, WeekdaySpec, }; #[derive(pest_derive::Parser)] -#[grammar = "parse/todayfile.pest"] +#[grammar = "files/grammar.pest"] struct TodayfileParser; pub type Error = pest::error::Error; @@ -703,8 +703,8 @@ fn parse_command(p: Pair) -> Result { } } -pub fn parse(path: &Path, input: &str) -> Result { - let path = path.to_string_lossy(); +pub fn parse(path: PathBuf, input: &str) -> Result { + let pathstr = path.to_string_lossy(); let mut pairs = TodayfileParser::parse(Rule::file, input)?; let file = pairs.next().unwrap(); let commands = file @@ -713,6 +713,12 @@ pub fn parse(path: &Path, input: &str) -> Result { .take_while(|p| p.as_rule() == Rule::command) .map(parse_command) .collect::>() - .map_err(|e| e.with_path(&path))?; - Ok(File { commands }) + .map_err(|e| e.with_path(&pathstr))?; + + Ok(File { + name: path, + includes: vec![], + timezone: None, + commands, + }) } diff --git a/src/main.rs b/src/main.rs index 1cec2d7..d800e6e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,11 +4,8 @@ use structopt::StructOpt; use crate::files::Files; -mod commands; mod eval; mod files; -mod format; -mod parse; #[derive(Debug, StructOpt)] pub struct Opt {