comparison rust/hg-core/src/filepatterns.rs @ 52338:f33b87b46135

rust-lib: move `PatternError` to the `filepatterns` module This is where it belongs
author Rapha?l Gom?s <rgomes@octobus.net>
date Mon, 04 Nov 2024 11:21:43 +0100
parents e4b9f8a74d5f
children 2ff004fb491c
comparison
equal deleted inserted replaced
52337:79e8118cd846 52338:f33b87b46135
11 utils::{ 11 utils::{
12 files::{canonical_path, get_bytes_from_path, get_path_from_bytes}, 12 files::{canonical_path, get_bytes_from_path, get_path_from_bytes},
13 hg_path::{path_to_hg_path_buf, HgPathBuf, HgPathError}, 13 hg_path::{path_to_hg_path_buf, HgPathBuf, HgPathError},
14 SliceExt, 14 SliceExt,
15 }, 15 },
16 FastHashMap, PatternError, 16 FastHashMap,
17 }; 17 };
18 use lazy_static::lazy_static; 18 use lazy_static::lazy_static;
19 use regex::bytes::{NoExpand, Regex}; 19 use regex::bytes::{NoExpand, Regex};
20 use std::ops::Deref;
21 use std::path::{Path, PathBuf}; 20 use std::path::{Path, PathBuf};
22 use std::vec::Vec; 21 use std::vec::Vec;
22 use std::{fmt, ops::Deref};
23
24 #[derive(Debug, derive_more::From)]
25 pub enum PatternError {
26 #[from]
27 Path(HgPathError),
28 UnsupportedSyntax(String),
29 UnsupportedSyntaxInFile(String, String, usize),
30 TooLong(usize),
31 #[from]
32 IO(std::io::Error),
33 /// Needed a pattern that can be turned into a regex but got one that
34 /// can't. This should only happen through programmer error.
35 NonRegexPattern(IgnorePattern),
36 }
37
38 impl fmt::Display for PatternError {
39 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
40 match self {
41 PatternError::UnsupportedSyntax(syntax) => {
42 write!(f, "Unsupported syntax {}", syntax)
43 }
44 PatternError::UnsupportedSyntaxInFile(syntax, file_path, line) => {
45 write!(
46 f,
47 "{}:{}: unsupported syntax {}",
48 file_path, line, syntax
49 )
50 }
51 PatternError::TooLong(size) => {
52 write!(f, "matcher pattern is too long ({} bytes)", size)
53 }
54 PatternError::IO(error) => error.fmt(f),
55 PatternError::Path(error) => error.fmt(f),
56 PatternError::NonRegexPattern(pattern) => {
57 write!(f, "'{:?}' cannot be turned into a regex", pattern)
58 }
59 }
60 }
61 }
23 62
24 lazy_static! { 63 lazy_static! {
25 static ref RE_ESCAPE: Vec<Vec<u8>> = { 64 static ref RE_ESCAPE: Vec<Vec<u8>> = {
26 let mut v: Vec<Vec<u8>> = (0..=255).map(|byte| vec![byte]).collect(); 65 let mut v: Vec<Vec<u8>> = (0..=255).map(|byte| vec![byte]).collect();
27 let to_escape = b"()[]{}?*+-|^$\\.&~#\t\n\r\x0b\x0c"; 66 let to_escape = b"()[]{}?*+-|^$\\.&~#\t\n\r\x0b\x0c";