Skip to content

Commit

Permalink
refactor(dict): Speed up build times by caching codegen
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Oct 6, 2019
1 parent caaadb0 commit 23faf30
Show file tree
Hide file tree
Showing 8 changed files with 36,067 additions and 418 deletions.
6 changes: 6 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ matrix:
- rustup component add rustfmt
script:
- cargo fmt --all -- --check
- env: CodeGen
rust: 1.35.0 # `stable`: Locking down for consistent behavior
install:
- rustup component add rustfmt
script:
- cargo run --package typos-codegen -- --input typos-dict/assets/words.csv --output typos-dict/src/dict_codegen.rs --check
- env: RUSTFLAGS="-D warnings"
rust: 1.35.0 # `stable`: Locking down for consistent behavior
install:
Expand Down
743 changes: 366 additions & 377 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = ["typos", "typos-dict"]
members = ["codegen", "typos", "typos-dict"]

[package]
name = "typos-cli"
Expand Down
24 changes: 24 additions & 0 deletions codegen/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[package]
name = "typos-codegen"
version = "1.0.0"
authors = ["Ed Page <eopage@gmail.com>"]
description = "Source Code Spelling Correction"
repository = "https://github.com/crate-ci/imperative"
documentation = "https://docs.rs/imperative"
readme = "README.md"
categories = ["text-processing"]
license = "MIT"
edition = "2018"
publish = false

[badges]
travis-ci = { repository = "epage/typos" }
appveyor = { repository = "epage/typos" }

[dependencies]
phf = { version = "0.7", features = ["unicase"] }
phf_codegen = "0.7"
csv = "1.0"
unicase = "1.1"
codegenrs = "0.1"
structopt = "0.3"
62 changes: 62 additions & 0 deletions codegen/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
use structopt::StructOpt;

fn generate<W: std::io::Write>(input: &[u8], file: &mut W) {
writeln!(
file,
"// This file is code-genned by {}",
env!("CARGO_PKG_NAME")
)
.unwrap();
writeln!(file).unwrap();
writeln!(file, "use unicase::UniCase;").unwrap();

writeln!(
file,
"pub(crate) static WORD_DICTIONARY: phf::Map<unicase::UniCase<&'static str>, &'static str> = "
)
.unwrap();
let mut builder = phf_codegen::Map::new();
let records: Vec<_> = csv::Reader::from_reader(input)
.records()
.map(|r| r.unwrap())
.collect();
for record in &records {
let value = format!(r#""{}""#, &record[1]);
builder.entry(unicase::UniCase(&record[0]), &value);
}
builder.build(file).unwrap();
writeln!(file, ";").unwrap();
}

#[derive(Debug, StructOpt)]
#[structopt(rename_all = "kebab-case")]
struct Options {
#[structopt(long, parse(from_os_str))]
input: std::path::PathBuf,
#[structopt(flatten)]
codegen: codegenrs::CodeGenArgs,
#[structopt(flatten)]
rustmft: codegenrs::RustfmtArgs,
}

fn run() -> Result<i32, Box<dyn std::error::Error>> {
let options = Options::from_args();

let content = {
let mut content = vec![];
let input = std::fs::read(&options.input)?;
generate(&input, &mut content);
content
};

let content = String::from_utf8(content)?;
let content = options.rustmft.reformat(&content)?;
options.codegen.write_str(&content)?;

Ok(0)
}

fn main() {
let code = run().unwrap();
std::process::exit(code);
}
5 changes: 0 additions & 5 deletions typos-dict/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,3 @@ typos = { version = "0.1", path = "../typos" }
phf = { version = "0.7", features = ["unicase"] }
unicase = "1.1"
log = "0.4"

[build-dependencies]
phf_codegen = "0.7"
csv = "1.0"
unicase = "1.1"
33 changes: 0 additions & 33 deletions typos-dict/build.rs

This file was deleted.

Loading

0 comments on commit 23faf30

Please sign in to comment.