mirror of
https://github.com/solaeus/nucleo.git
synced 2024-12-22 09:57:49 +00:00
expose last matched pattern to allow correct index rendering
This commit is contained in:
parent
af2c1e190c
commit
91a265eb6b
@ -64,7 +64,7 @@ impl Matcher {
|
|||||||
const UNMATCHED: ScoreCell = ScoreCell {
|
const UNMATCHED: ScoreCell = ScoreCell {
|
||||||
score: 0,
|
score: 0,
|
||||||
// if matched is true then the consecutive bonus
|
// if matched is true then the consecutive bonus
|
||||||
// is always alteast BONUS_CONSECUTIVE so
|
// is always atleast BONUS_CONSECUTIVE so
|
||||||
// this constant can never occur naturally
|
// this constant can never occur naturally
|
||||||
consecutive_bonus: 0,
|
consecutive_bonus: 0,
|
||||||
matched: true,
|
matched: true,
|
||||||
|
@ -90,6 +90,7 @@ pub struct Nucleo<T: Sync + Send + 'static> {
|
|||||||
item_count: u32,
|
item_count: u32,
|
||||||
pub matches: Vec<Match>,
|
pub matches: Vec<Match>,
|
||||||
pub pattern: MultiPattern,
|
pub pattern: MultiPattern,
|
||||||
|
pub last_matched_pattern: MultiPattern,
|
||||||
pub notify: Arc<(dyn Fn() + Sync + Send)>,
|
pub notify: Arc<(dyn Fn() + Sync + Send)>,
|
||||||
items: Arc<boxcar::Vec<T>>,
|
items: Arc<boxcar::Vec<T>>,
|
||||||
}
|
}
|
||||||
@ -110,6 +111,7 @@ impl<T: Sync + Send + 'static> Nucleo<T> {
|
|||||||
pool,
|
pool,
|
||||||
matches: Vec::with_capacity(2 * 1024),
|
matches: Vec::with_capacity(2 * 1024),
|
||||||
pattern: MultiPattern::new(&config, case_matching, columns as usize),
|
pattern: MultiPattern::new(&config, case_matching, columns as usize),
|
||||||
|
last_matched_pattern: MultiPattern::new(&config, case_matching, columns as usize),
|
||||||
worker: Arc::new(Mutex::new(worker)),
|
worker: Arc::new(Mutex::new(worker)),
|
||||||
cleared: false,
|
cleared: false,
|
||||||
item_count: 0,
|
item_count: 0,
|
||||||
@ -195,6 +197,7 @@ impl<T: Sync + Send + 'static> Nucleo<T> {
|
|||||||
inner.running = false;
|
inner.running = false;
|
||||||
if !inner.was_canceled {
|
if !inner.was_canceled {
|
||||||
self.item_count = inner.item_count();
|
self.item_count = inner.item_count();
|
||||||
|
self.last_matched_pattern.clone_from(&inner.pattern);
|
||||||
self.matches.clone_from(&inner.matches);
|
self.matches.clone_from(&inner.matches);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,11 +165,23 @@ pub enum Status {
|
|||||||
Rescore,
|
Rescore,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug)]
|
||||||
pub struct MultiPattern {
|
pub struct MultiPattern {
|
||||||
pub cols: Vec<Pattern>,
|
pub cols: Vec<Pattern>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Clone for MultiPattern {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Self {
|
||||||
|
cols: self.cols.clone(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn clone_from(&mut self, source: &Self) {
|
||||||
|
self.cols.clone_from(&source.cols)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl MultiPattern {
|
impl MultiPattern {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
matcher_config: &MatcherConfig,
|
matcher_config: &MatcherConfig,
|
||||||
@ -205,7 +217,7 @@ impl MultiPattern {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Pattern {
|
pub struct Pattern {
|
||||||
terms: Vec<PatternAtom>,
|
terms: Vec<PatternAtom>,
|
||||||
case_matching: CaseMatching,
|
case_matching: CaseMatching,
|
||||||
@ -351,6 +363,24 @@ impl Pattern {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Clone for Pattern {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Self {
|
||||||
|
terms: self.terms.clone(),
|
||||||
|
case_matching: self.case_matching,
|
||||||
|
normalize: self.normalize,
|
||||||
|
status: self.status,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn clone_from(&mut self, source: &Self) {
|
||||||
|
self.terms.clone_from(&source.terms);
|
||||||
|
self.case_matching = source.case_matching;
|
||||||
|
self.normalize = source.normalize;
|
||||||
|
self.status = source.status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn pattern_atoms(pattern: &str) -> impl Iterator<Item = &str> + '_ {
|
fn pattern_atoms(pattern: &str) -> impl Iterator<Item = &str> + '_ {
|
||||||
let mut saw_backslash = false;
|
let mut saw_backslash = false;
|
||||||
pattern.split(move |c| {
|
pattern.split(move |c| {
|
||||||
|
Loading…
Reference in New Issue
Block a user