Skip to content

Commit da3c4b8

Browse files
committed
Reimplemented glob stripping with regex.
1 parent ac474a7 commit da3c4b8

2 files changed

Lines changed: 18 additions & 59 deletions

File tree

src/patch/peripheral.rs

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -524,81 +524,47 @@ pub(crate) trait RegisterBlockExt: Name {
524524

525525
/// Delete substring from the beginning of register names inside ptag
526526
fn strip_start(&mut self, prefix: &str) -> PatchResult {
527-
let len = prefix.len();
528-
let glob = globset::Glob::new(&(prefix.to_string() + "*"))?.compile_matcher();
527+
let re = regex::Regex::new(&globset::Glob::new(prefix)?.regex().replace("(?-u)", "").replace("*", "*?").strip_suffix("$").unwrap())?;
529528
for rtag in self.regs_mut() {
530-
if glob.is_match(&rtag.name) {
531-
rtag.name.drain(..len);
532-
}
529+
rtag.name = re.replace(&rtag.name, "").to_string();
533530
if let Some(dname) = rtag.display_name.as_mut() {
534-
if glob.is_match(dname.as_str()) {
535-
dname.drain(..len);
536-
}
531+
*dname = re.replace(dname, "").to_string();
537532
}
538533
if let Some(name) = rtag.alternate_register.as_mut() {
539-
if glob.is_match(name.as_str()) {
540-
name.drain(..len);
541-
}
534+
*name = re.replace(name, "").to_string();
542535
}
543536
}
544537
for ctag in self.clstrs_mut() {
545-
if glob.is_match(&ctag.name) {
546-
ctag.name.drain(..len);
547-
}
538+
ctag.name = re.replace(&ctag.name, "").to_string();
548539
if let Some(dname) = ctag.header_struct_name.as_mut() {
549-
if glob.is_match(dname.as_str()) {
550-
dname.drain(..len);
551-
}
540+
*dname = re.replace(dname, "").to_string();
552541
}
553542
if let Some(name) = ctag.alternate_cluster.as_mut() {
554-
if glob.is_match(name.as_str()) {
555-
name.drain(..len);
556-
}
543+
*name = re.replace(name, "").to_string();
557544
}
558545
}
559546
Ok(())
560547
}
561548

562549
/// Delete substring from the ending of register names inside ptag
563550
fn strip_end(&mut self, suffix: &str) -> PatchResult {
564-
let len = suffix.len();
565-
let glob = globset::Glob::new(&("*".to_string() + suffix))
566-
.unwrap()
567-
.compile_matcher();
551+
let re = regex::Regex::new(&globset::Glob::new(suffix)?.regex().replace("(?-u)^", "").replace("*", "*?"))?;
568552
for rtag in self.regs_mut() {
569-
if glob.is_match(&rtag.name) {
570-
let nlen = rtag.name.len();
571-
rtag.name.truncate(nlen - len);
572-
}
553+
rtag.name = re.replace(&rtag.name, "").to_string();
573554
if let Some(dname) = rtag.display_name.as_mut() {
574-
if glob.is_match(dname.as_str()) {
575-
let nlen = dname.len();
576-
dname.truncate(nlen - len);
577-
}
555+
*dname = re.replace(dname, "").to_string();
578556
}
579557
if let Some(name) = rtag.alternate_register.as_mut() {
580-
if glob.is_match(name.as_str()) {
581-
let nlen = name.len();
582-
name.truncate(nlen - len);
583-
}
558+
*name = re.replace(name, "").to_string();
584559
}
585560
}
586561
for ctag in self.clstrs_mut() {
587-
if glob.is_match(&ctag.name) {
588-
let nlen = ctag.name.len();
589-
ctag.name.truncate(nlen - len);
590-
}
562+
ctag.name = re.replace(&ctag.name, "").to_string();
591563
if let Some(dname) = ctag.header_struct_name.as_mut() {
592-
if glob.is_match(dname.as_str()) {
593-
let nlen = dname.len();
594-
dname.truncate(nlen - len);
595-
}
564+
*dname = re.replace(dname, "").to_string();
596565
}
597566
if let Some(name) = ctag.alternate_cluster.as_mut() {
598-
if glob.is_match(name.as_str()) {
599-
let nlen = name.len();
600-
name.truncate(nlen - len);
601-
}
567+
*name = re.replace(name, "").to_string();
602568
}
603569
}
604570
Ok(())

src/patch/register.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -283,24 +283,17 @@ impl RegisterExt for Register {
283283
}
284284

285285
fn strip_start(&mut self, substr: &str) -> PatchResult {
286-
let len = substr.len();
287-
let glob = globset::Glob::new(&(substr.to_string() + "*"))?.compile_matcher();
286+
let re = regex::Regex::new(&globset::Glob::new(substr)?.regex().replace("(?-u)", "").replace("*", "*?").strip_suffix("$").unwrap())?;
288287
for ftag in self.fields_mut() {
289-
if glob.is_match(&ftag.name) {
290-
ftag.name.drain(..len);
291-
}
288+
ftag.name = re.replace(&ftag.name, "").to_string();
292289
}
293290
Ok(())
294291
}
295292

296293
fn strip_end(&mut self, substr: &str) -> PatchResult {
297-
let len = substr.len();
298-
let glob = globset::Glob::new(&("*".to_string() + substr))?.compile_matcher();
294+
let re = regex::Regex::new(&globset::Glob::new(substr)?.regex().replace("(?-u)^", "").replace("*", "*?"))?;
299295
for ftag in self.fields_mut() {
300-
if glob.is_match(&ftag.name) {
301-
let nlen = ftag.name.len();
302-
ftag.name.truncate(nlen - len);
303-
}
296+
ftag.name = re.replace(&ftag.name, "").to_string();
304297
}
305298
Ok(())
306299
}

0 commit comments

Comments
 (0)