mirror of
https://github.com/alexpasmantier/television.git
synced 2025-06-06 03:25:23 +00:00
perf: optimize entry ranges (#110)
This commit is contained in:
parent
758bfc290a
commit
a4d15af694
@ -3,6 +3,7 @@ use devicons::FileIcon;
|
|||||||
use ratatui::layout::Alignment;
|
use ratatui::layout::Alignment;
|
||||||
use ratatui::prelude::{Line, Style};
|
use ratatui::prelude::{Line, Style};
|
||||||
use ratatui::widgets::{Block, BorderType, Borders, ListDirection, Padding};
|
use ratatui::widgets::{Block, BorderType, Borders, ListDirection, Padding};
|
||||||
|
use television_channels::entry::merge_ranges;
|
||||||
use television_channels::entry::{Entry, PreviewType};
|
use television_channels::entry::{Entry, PreviewType};
|
||||||
use television_screen::colors::BORDER_COLOR;
|
use television_screen::colors::BORDER_COLOR;
|
||||||
use television_screen::results::build_results_list;
|
use television_screen::results::build_results_list;
|
||||||
@ -15,7 +16,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/LICENSE".to_string(),
|
name: "typeshed/LICENSE".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{f016}',
|
icon: '\u{f016}',
|
||||||
@ -27,7 +33,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/README.md".to_string(),
|
name: "typeshed/README.md".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{f48a}',
|
icon: '\u{f48a}',
|
||||||
@ -39,7 +50,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/re.pyi".to_string(),
|
name: "typeshed/stdlib/re.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -51,7 +67,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/io.pyi".to_string(),
|
name: "typeshed/stdlib/io.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -63,7 +84,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/gc.pyi".to_string(),
|
name: "typeshed/stdlib/gc.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -75,7 +101,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/uu.pyi".to_string(),
|
name: "typeshed/stdlib/uu.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -87,7 +118,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/nt.pyi".to_string(),
|
name: "typeshed/stdlib/nt.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -99,7 +135,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/dis.pyi".to_string(),
|
name: "typeshed/stdlib/dis.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -111,7 +152,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/imp.pyi".to_string(),
|
name: "typeshed/stdlib/imp.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -123,7 +169,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/bdb.pyi".to_string(),
|
name: "typeshed/stdlib/bdb.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -135,7 +186,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/abc.pyi".to_string(),
|
name: "typeshed/stdlib/abc.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -147,7 +203,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/cgi.pyi".to_string(),
|
name: "typeshed/stdlib/cgi.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -159,7 +220,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/bz2.pyi".to_string(),
|
name: "typeshed/stdlib/bz2.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -171,7 +237,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/grp.pyi".to_string(),
|
name: "typeshed/stdlib/grp.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -183,7 +254,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/ast.pyi".to_string(),
|
name: "typeshed/stdlib/ast.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -195,7 +271,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/csv.pyi".to_string(),
|
name: "typeshed/stdlib/csv.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -207,7 +288,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/pdb.pyi".to_string(),
|
name: "typeshed/stdlib/pdb.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -219,7 +305,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/pwd.pyi".to_string(),
|
name: "typeshed/stdlib/pwd.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -231,7 +322,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/ssl.pyi".to_string(),
|
name: "typeshed/stdlib/ssl.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -243,7 +339,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/tty.pyi".to_string(),
|
name: "typeshed/stdlib/tty.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -255,7 +356,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/nis.pyi".to_string(),
|
name: "typeshed/stdlib/nis.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -267,7 +373,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/pty.pyi".to_string(),
|
name: "typeshed/stdlib/pty.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -279,7 +390,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/cmd.pyi".to_string(),
|
name: "typeshed/stdlib/cmd.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -291,7 +407,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/tests/utils.py".to_string(),
|
name: "typeshed/tests/utils.py".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -303,7 +424,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/pyproject.toml".to_string(),
|
name: "typeshed/pyproject.toml".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e6b2}',
|
icon: '\u{e6b2}',
|
||||||
@ -315,7 +441,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/MAINTAINERS.md".to_string(),
|
name: "typeshed/MAINTAINERS.md".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{f48a}',
|
icon: '\u{f48a}',
|
||||||
@ -327,7 +458,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/enum.pyi".to_string(),
|
name: "typeshed/stdlib/enum.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -339,7 +475,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/hmac.pyi".to_string(),
|
name: "typeshed/stdlib/hmac.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -351,7 +492,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/uuid.pyi".to_string(),
|
name: "typeshed/stdlib/uuid.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -363,7 +509,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/glob.pyi".to_string(),
|
name: "typeshed/stdlib/glob.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -375,7 +526,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/_ast.pyi".to_string(),
|
name: "typeshed/stdlib/_ast.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -387,7 +543,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/_csv.pyi".to_string(),
|
name: "typeshed/stdlib/_csv.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -399,7 +560,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/code.pyi".to_string(),
|
name: "typeshed/stdlib/code.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -411,7 +577,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/spwd.pyi".to_string(),
|
name: "typeshed/stdlib/spwd.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -423,7 +594,12 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/_msi.pyi".to_string(),
|
name: "typeshed/stdlib/_msi.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
value_match_ranges: None,
|
value_match_ranges: None,
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
@ -435,14 +611,20 @@ pub fn results_list_benchmark(c: &mut Criterion) {
|
|||||||
Entry {
|
Entry {
|
||||||
name: "typeshed/stdlib/time.pyi".to_string(),
|
name: "typeshed/stdlib/time.pyi".to_string(),
|
||||||
value: None,
|
value: None,
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
|
||||||
value_match_ranges: None,
|
|
||||||
icon: Some(FileIcon {
|
icon: Some(FileIcon {
|
||||||
icon: '\u{e606}',
|
icon: '\u{e606}',
|
||||||
color: "#ffbc03",
|
color: "#ffbc03",
|
||||||
}),
|
}),
|
||||||
line_number: None,
|
line_number: None,
|
||||||
preview_type: PreviewType::Files,
|
preview_type: PreviewType::Files,
|
||||||
|
name_match_ranges: Some(merge_ranges(&vec![
|
||||||
|
(0, 1),
|
||||||
|
(1, 2),
|
||||||
|
(2, 3),
|
||||||
|
(3, 4),
|
||||||
|
])),
|
||||||
|
value_match_ranges: None,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -26,6 +26,25 @@ pub struct Entry {
|
|||||||
pub preview_type: PreviewType,
|
pub preview_type: PreviewType,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::needless_return)]
|
||||||
|
pub fn merge_ranges(ranges: &[(u32, u32)]) -> Vec<(u32, u32)> {
|
||||||
|
ranges.iter().fold(
|
||||||
|
Vec::new(),
|
||||||
|
|mut acc: Vec<(u32, u32)>, x: &(u32, u32)| {
|
||||||
|
if let Some(last) = acc.last_mut() {
|
||||||
|
if last.1 == x.0 {
|
||||||
|
last.1 = x.1;
|
||||||
|
} else {
|
||||||
|
acc.push(*x);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
acc.push(*x);
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
impl Entry {
|
impl Entry {
|
||||||
/// Create a new entry with the given name and preview type.
|
/// Create a new entry with the given name and preview type.
|
||||||
///
|
///
|
||||||
@ -65,36 +84,12 @@ impl Entry {
|
|||||||
self.value = Some(value);
|
self.value = Some(value);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
#[allow(clippy::needless_return)]
|
|
||||||
pub fn minimal_name_match_ranges(&self) -> Option<Vec<(u32, u32)>> {
|
|
||||||
// This method takes the existing `name_match_ranges`
|
|
||||||
// and merges contiguous ranges into the minimal equivalent
|
|
||||||
// set of ranges. If no ranges exist, it returns `None`.
|
|
||||||
if let Some(name_match_ranges) = &self.name_match_ranges {
|
|
||||||
let minimal_name_match_ranges: Vec<(u32, u32)> =
|
|
||||||
name_match_ranges.iter().fold(Vec::new(), |mut acc, x| {
|
|
||||||
if let Some(last) = acc.last_mut() {
|
|
||||||
if last.1 == x.0 {
|
|
||||||
last.1 = x.1;
|
|
||||||
} else {
|
|
||||||
acc.push(*x);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
acc.push(*x);
|
|
||||||
}
|
|
||||||
return acc;
|
|
||||||
});
|
|
||||||
Some(minimal_name_match_ranges)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_name_match_ranges(
|
pub fn with_name_match_ranges(
|
||||||
mut self,
|
mut self,
|
||||||
name_match_ranges: Vec<(u32, u32)>,
|
name_match_ranges: Vec<(u32, u32)>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
self.name_match_ranges = Some(name_match_ranges);
|
self.name_match_ranges = Some(merge_ranges(&name_match_ranges));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +97,7 @@ impl Entry {
|
|||||||
mut self,
|
mut self,
|
||||||
value_match_ranges: Vec<(u32, u32)>,
|
value_match_ranges: Vec<(u32, u32)>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
self.value_match_ranges = Some(value_match_ranges);
|
self.value_match_ranges = Some(merge_ranges(&value_match_ranges));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,79 +171,26 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_minimal_name_match_ranges_none() {
|
fn test_empty_input() {
|
||||||
let entry = Entry {
|
let ranges: Vec<(u32, u32)> = vec![];
|
||||||
name: "test".to_string(),
|
assert_eq!(merge_ranges(&ranges), Vec::<(u32, u32)>::new());
|
||||||
value: None,
|
|
||||||
name_match_ranges: None,
|
|
||||||
value_match_ranges: None,
|
|
||||||
icon: None,
|
|
||||||
line_number: None,
|
|
||||||
preview_type: PreviewType::Files,
|
|
||||||
};
|
|
||||||
assert_eq!(entry.minimal_name_match_ranges(), None);
|
|
||||||
}
|
|
||||||
#[test]
|
|
||||||
fn test_minimal_name_match_ranges_empty() {
|
|
||||||
let entry = Entry {
|
|
||||||
name: "test".to_string(),
|
|
||||||
value: None,
|
|
||||||
name_match_ranges: Some(vec![]),
|
|
||||||
value_match_ranges: None,
|
|
||||||
icon: None,
|
|
||||||
line_number: None,
|
|
||||||
preview_type: PreviewType::Files,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(entry.minimal_name_match_ranges(), Some(vec![]));
|
|
||||||
}
|
|
||||||
#[test]
|
|
||||||
fn test_minimal_name_match_ranges_non_contiguous() {
|
|
||||||
let entry = Entry {
|
|
||||||
name: "test".to_string(),
|
|
||||||
value: None,
|
|
||||||
name_match_ranges: Some(vec![(0, 1), (2, 4), (6, 9)]),
|
|
||||||
value_match_ranges: None,
|
|
||||||
icon: None,
|
|
||||||
line_number: None,
|
|
||||||
preview_type: PreviewType::Files,
|
|
||||||
};
|
|
||||||
assert_eq!(
|
|
||||||
entry.minimal_name_match_ranges(),
|
|
||||||
Some(vec![(0, 1), (2, 4), (6, 9)])
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_minimal_name_match_ranges_contiguous() {
|
fn test_single_range() {
|
||||||
let entry = Entry {
|
let ranges = vec![(1, 3)];
|
||||||
name: "test".to_string(),
|
assert_eq!(merge_ranges(&ranges), vec![(1, 3)]);
|
||||||
value: None,
|
|
||||||
name_match_ranges: Some(vec![(0, 1), (1, 2), (2, 3), (3, 4)]),
|
|
||||||
value_match_ranges: None,
|
|
||||||
icon: None,
|
|
||||||
line_number: None,
|
|
||||||
preview_type: PreviewType::Files,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(entry.minimal_name_match_ranges(), Some(vec![(0, 4)]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_minimal_name_match_ranges_both_contiguous_and_non_contiguous() {
|
fn test_contiguous_ranges() {
|
||||||
let entry = Entry {
|
let ranges = vec![(1, 2), (2, 3), (3, 4), (4, 5)];
|
||||||
name: "test".to_string(),
|
assert_eq!(merge_ranges(&ranges), vec![(1, 5)]);
|
||||||
value: None,
|
}
|
||||||
name_match_ranges: Some(vec![(0, 1), (2, 3), (3, 4)]),
|
|
||||||
value_match_ranges: None,
|
|
||||||
icon: None,
|
|
||||||
line_number: None,
|
|
||||||
preview_type: PreviewType::Files,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(
|
#[test]
|
||||||
entry.minimal_name_match_ranges(),
|
fn test_non_contiguous_ranges() {
|
||||||
Some(vec![(0, 1), (2, 4)])
|
let ranges = vec![(1, 2), (3, 4), (5, 6)];
|
||||||
);
|
assert_eq!(merge_ranges(&ranges), vec![(1, 2), (3, 4), (5, 6)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ where
|
|||||||
// entry name
|
// entry name
|
||||||
let (entry_name, name_match_ranges) = make_matched_string_printable(
|
let (entry_name, name_match_ranges) = make_matched_string_printable(
|
||||||
&entry.name,
|
&entry.name,
|
||||||
entry.minimal_name_match_ranges().as_deref(),
|
entry.name_match_ranges.as_deref(),
|
||||||
);
|
);
|
||||||
let mut last_match_end = 0;
|
let mut last_match_end = 0;
|
||||||
for (start, end) in name_match_ranges
|
for (start, end) in name_match_ranges
|
||||||
|
Loading…
x
Reference in New Issue
Block a user