1
0
mirror of https://github.com/j178/prek.git synced 2026-04-25 02:11:36 +02:00

Use fancy-regex (#62)

This commit is contained in:
Jo
2024-11-14 15:28:27 +08:00
committed by GitHub
parent 1c1ef91222
commit 175f102b69
5 changed files with 48 additions and 31 deletions
Generated
+27
View File
@@ -146,6 +146,21 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "bit-set"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
dependencies = [
"bit-vec",
]
[[package]]
name = "bit-vec"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
[[package]]
name = "bitflags"
version = "2.6.0"
@@ -368,6 +383,17 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
[[package]]
name = "fancy-regex"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298"
dependencies = [
"bit-set",
"regex-automata 0.4.8",
"regex-syntax 0.8.5",
]
[[package]]
name = "fastrand"
version = "2.1.1"
@@ -895,6 +921,7 @@ dependencies = [
"ctrlc",
"dunce",
"etcetera",
"fancy-regex",
"fs-err",
"fs2",
"futures",
+1 -1
View File
@@ -16,6 +16,7 @@ clap = { version = "4.5.16", features = ["derive", "env"] }
clap_complete = "4.5.37"
ctrlc = "3.4.5"
dunce = "1.0.5"
fancy-regex = "0.14.0"
fs-err = "2.11.0"
fs2 = "0.4.3"
futures = "0.3.31"
@@ -26,7 +27,6 @@ itertools = "0.13.0"
owo-colors = "4.1.0"
rand = "0.8.5"
rayon = "1.10.0"
regex = "1.11.0"
rusqlite = { version = "0.32.1", features = ["bundled"] }
serde = { version = "1.0.210", features = ["derive"] }
serde_yaml = "0.9.34"
+2 -2
View File
@@ -38,9 +38,9 @@ impl LanguageImpl for Fail {
out.extend(b"\n\n");
for f in filenames {
out.extend(f.as_bytes());
out.extend(b"\n");
out.push(b'\n');
}
out.extend(b"\n");
out.push(b'\n');
Ok((1, out))
}
+5 -5
View File
@@ -7,11 +7,11 @@ use std::path::Path;
use std::sync::Arc;
use anstream::ColorChoice;
use fancy_regex::{self as regex, Regex};
use owo_colors::{OwoColorize, Style};
use rand::prelude::{SliceRandom, StdRng};
use rand::SeedableRng;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use regex::Regex;
use tokio::process::Command;
use tokio::task::JoinSet;
use tracing::{error, trace};
@@ -32,7 +32,7 @@ pub struct FilenameFilter {
}
impl FilenameFilter {
pub fn new(include: Option<&str>, exclude: Option<&str>) -> Result<Self, regex::Error> {
pub fn new(include: Option<&str>, exclude: Option<&str>) -> Result<Self, Box<regex::Error>> {
let include = include.map(Regex::new).transpose()?;
let exclude = exclude.map(Regex::new).transpose()?;
Ok(Self { include, exclude })
@@ -41,19 +41,19 @@ impl FilenameFilter {
pub fn filter(&self, filename: impl AsRef<str>) -> bool {
let filename = filename.as_ref();
if let Some(re) = &self.include {
if !re.is_match(filename) {
if !re.is_match(filename).unwrap_or(false) {
return false;
}
}
if let Some(re) = &self.exclude {
if re.is_match(filename) {
if re.is_match(filename).unwrap_or(false) {
return false;
}
}
true
}
pub fn from_hook(hook: &Hook) -> Result<Self, regex::Error> {
pub fn from_hook(hook: &Hook) -> Result<Self, Box<regex::Error>> {
Self::new(hook.files.as_deref(), hook.exclude.as_deref())
}
}
+13 -23
View File
@@ -6,37 +6,27 @@ use assert_fs::prelude::*;
mod common;
#[test]
fn run_fail_language() -> Result<()> {
fn fail() -> Result<()> {
let context = TestContext::new();
context.init_project();
let cwd = context.workdir();
cwd.child("changelog").create_dir_all()?;
cwd.child("changelog/changelog.md").touch()?;
cwd.child(".pre-commit-config.yaml")
.write_str(indoc::indoc! {r"
repos:
- repo: local
- repo: local
hooks:
- id: changelogs-rst
name: changelogs must be rst
entry: changelog filenames must end in .rst
language: fail
files: 'changelog/.*\.rst$'
- id: changelogs-rst
name: changelogs must be rst
entry: changelog filenames must end in .rst
language: fail
files: 'changelog/.*(?<!\.rst)$'
"})?;
// Create a repository with some files.
let temp_dir = cwd.child("changelog");
temp_dir.create_dir_all()?;
temp_dir.child("changelog.rst").write_str("changelog")?;
temp_dir.child("test.md").write_str("test")?;
cwd.child("test.rst").write_str("Hello, world!\n")?;
cwd.child("valid.json").write_str("{}")?;
cwd.child("invalid.json").write_str("{}")?;
cwd.child("main.py").write_str(r#"print "abc" "#)?;
Command::new("git")
.current_dir(cwd)
.arg("init")
.assert()
.success();
Command::new("git")
.current_dir(cwd)
.arg("add")
@@ -53,7 +43,7 @@ fn run_fail_language() -> Result<()> {
- exit code: 1
changelog filenames must end in .rst
changelog/changelog.rst
changelog/changelog.md
----- stderr -----
"#);