mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-08-17 21:23:48 -07:00
globset: add Candidate::from_bytes
constructor
This is already technically possible to do on Unix by going through `OsStr` and `&[u8]` conversions. This just makes it easier to do in all circumstances and is reasonable to intentionally support. Closes #2954, Closes #2955
This commit is contained in:
committed by
Andrew Gallant
parent
48bf394585
commit
6fb52964fc
@@ -598,7 +598,23 @@ impl<'a> std::fmt::Debug for Candidate<'a> {
|
|||||||
impl<'a> Candidate<'a> {
|
impl<'a> Candidate<'a> {
|
||||||
/// Create a new candidate for matching from the given path.
|
/// Create a new candidate for matching from the given path.
|
||||||
pub fn new<P: AsRef<Path> + ?Sized>(path: &'a P) -> Candidate<'a> {
|
pub fn new<P: AsRef<Path> + ?Sized>(path: &'a P) -> Candidate<'a> {
|
||||||
let path = normalize_path(Vec::from_path_lossy(path.as_ref()));
|
Self::from_cow(Vec::from_path_lossy(path.as_ref()))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a new candidate for matching from the given path as a sequence
|
||||||
|
/// of bytes.
|
||||||
|
///
|
||||||
|
/// Generally speaking, this routine expects the bytes to be
|
||||||
|
/// _conventionally_ UTF-8. It is legal for the byte sequence to contain
|
||||||
|
/// invalid UTF-8. However, if the bytes are in some other encoding that
|
||||||
|
/// isn't ASCII compatible (for example, UTF-16), then the results of
|
||||||
|
/// matching are unspecified.
|
||||||
|
pub fn from_bytes<P: AsRef<[u8]> + ?Sized>(path: &'a P) -> Candidate<'a> {
|
||||||
|
Self::from_cow(Cow::Borrowed(path.as_ref()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_cow(path: Cow<'a, [u8]>) -> Candidate<'a> {
|
||||||
|
let path = normalize_path(path);
|
||||||
let basename = file_name(&path).unwrap_or(Cow::Borrowed(B("")));
|
let basename = file_name(&path).unwrap_or(Cow::Borrowed(B("")));
|
||||||
let ext = file_name_ext(&basename).unwrap_or(Cow::Borrowed(B("")));
|
let ext = file_name_ext(&basename).unwrap_or(Cow::Borrowed(B("")));
|
||||||
Candidate { path, basename, ext }
|
Candidate { path, basename, ext }
|
||||||
|
Reference in New Issue
Block a user