Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ignore): Typos-specific ignores #136

Merged
merged 1 commit into from Aug 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/reference.md
Expand Up @@ -15,6 +15,7 @@ Configuration is read from the following (in precedence order)
| Field | Argument | Format | Description |
|------------------------|-------------------|--------|-------------|
| files.binary | --binary | bool | Check binary files as text |
| files.ignore-patterns | | list of strings | Typos-specific ignore globs (gitignore syntax) |
| files.ignore-hidden | --hidden | bool | Skip hidden files and directories. |
| files.ignore-files | --ignore | bool | Respect ignore files. |
| files.ignore-dot | --ignore-dot | bool | Respect .ignore files. |
Expand Down
37 changes: 36 additions & 1 deletion src/config.rs
Expand Up @@ -16,6 +16,16 @@ pub trait WalkSource {
None
}

/// The root for `ignore_patterns`
fn ignore_root(&self) -> Option<&std::path::Path> {
None
}

/// Ignore the specified patterns (gitignore syntax)
fn ignore_patterns(&self) -> Option<&[String]> {
None
}

/// Skip hidden files and directories.
fn ignore_hidden(&self) -> Option<bool> {
None
Expand Down Expand Up @@ -101,7 +111,9 @@ impl Config {
let mut file = std::fs::File::open(path)?;
let mut s = String::new();
file.read_to_string(&mut s)?;
Self::from_toml(&s)
let mut c = Self::from_toml(&s)?;
c.files.ignore_root = path.parent().map(|p| p.to_owned());
Ok(c)
}

pub fn from_toml(data: &str) -> Result<Self, anyhow::Error> {
Expand Down Expand Up @@ -138,6 +150,9 @@ impl ConfigSource for Config {
#[serde(rename_all = "kebab-case")]
pub struct Walk {
pub binary: Option<bool>,
#[serde(skip)]
pub ignore_root: Option<std::path::PathBuf>,
pub ignore_patterns: Option<Vec<String>>,
pub ignore_hidden: Option<bool>,
pub ignore_files: Option<bool>,
pub ignore_dot: Option<bool>,
Expand All @@ -151,6 +166,10 @@ impl Walk {
if let Some(source) = source.binary() {
self.binary = Some(source);
}
if let (Some(root), Some(source)) = (source.ignore_root(), source.ignore_patterns()) {
self.ignore_root = Some(root.to_owned());
self.ignore_patterns = Some(source.to_owned());
}
if let Some(source) = source.ignore_hidden() {
self.ignore_hidden = Some(source);
}
Expand Down Expand Up @@ -180,6 +199,14 @@ impl Walk {
self.binary.unwrap_or(false)
}

pub fn ignore_root(&self) -> Option<&std::path::Path> {
self.ignore_root.as_deref()
}

pub fn ignore_patterns(&self) -> Option<&[String]> {
self.ignore_patterns.as_deref()
}

pub fn ignore_hidden(&self) -> bool {
self.ignore_hidden.unwrap_or(true)
}
Expand Down Expand Up @@ -215,6 +242,14 @@ impl WalkSource for Walk {
self.binary
}

fn ignore_root(&self) -> Option<&std::path::Path> {
self.ignore_root.as_deref()
}

fn ignore_patterns(&self) -> Option<&[String]> {
self.ignore_patterns.as_deref()
}

fn ignore_hidden(&self) -> Option<bool> {
self.ignore_hidden
}
Expand Down
10 changes: 10 additions & 0 deletions src/main.rs
Expand Up @@ -75,6 +75,16 @@ fn run() -> Result<i32, anyhow::Error> {
.git_ignore(config.files.ignore_vcs())
.git_exclude(config.files.ignore_vcs())
.parents(config.files.ignore_parent());
if let (Some(root), Some(patterns)) =
(config.files.ignore_root(), config.files.ignore_patterns())
{
let mut overrides = ignore::overrides::OverrideBuilder::new(root);
for pattern in patterns {
overrides.add(pattern)?;
}
let overrides = overrides.build()?;
walk.overrides(overrides);
}

let mut reporter = args.format.reporter();
let replace_reporter = replace::Replace::new(reporter);
Expand Down