File: highlighting.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (69 lines) | stat: -rw-r--r-- 2,307 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
use criterion::{Bencher, Criterion, criterion_group, criterion_main};
use syntect::parsing::{SyntaxSet, ScopeStack};
use syntect::highlighting::{ThemeSet};
use syntect::html::highlighted_html_for_string;
use std::str::FromStr;

mod highlight_utils;
mod utils;

fn highlight_file(b: &mut Bencher, file: &str) {
    let path = utils::get_test_file_path(file);

    // don't load from dump so we don't count lazy regex compilation time
    let ss = SyntaxSet::load_defaults_nonewlines();
    let ts = ThemeSet::load_defaults();

    let syntax = ss.find_syntax_for_file(path).unwrap().unwrap();
    let s = std::fs::read_to_string(path).unwrap();

    b.iter(|| {
        highlight_utils::do_highlight(&s, &ss, syntax, &ts.themes["base16-ocean.dark"])
    });
}

fn stack_matching(b: &mut Bencher) {
    let s = "source.js meta.group.js meta.group.js meta.block.js meta.function-call.method.js meta.group.js meta.object-literal.js meta.block.js meta.function-call.method.js meta.group.js variable.other.readwrite.js";
    let stack = ScopeStack::from_str(s).unwrap();
    let selector = ScopeStack::from_str("source meta.function-call.method").unwrap();
    b.iter(|| {
        selector.does_match(stack.as_slice())
    });
}

fn highlight_html(b: &mut Bencher) {
    let ss = SyntaxSet::load_defaults_newlines();
    let ts = ThemeSet::load_defaults();

    let path = "testdata/parser.rs";
    let syntax = ss.find_syntax_for_file(path).unwrap().unwrap();
    let s = std::fs::read_to_string(path).unwrap();

    b.iter(|| {
        highlighted_html_for_string(&s, &ss, syntax, &ts.themes["base16-ocean.dark"])
    });
}

fn highlighting_benchmark(c: &mut Criterion) {
    c.bench_function("stack_matching", stack_matching);
    c.bench_function("highlight_html", highlight_html);
    let mut highlight = c.benchmark_group("highlight");
    for input in &[
        "highlight_test.erb",
        "InspiredGitHub.tmTheme",
        "Ruby.sublime-syntax",
        "jquery.js",
        "parser.rs",
        "scope.rs",
    ] {
        highlight.bench_with_input(format!("\"{}\"", input), input, |b, s| highlight_file(b, s));
    }
    highlight.finish();
}

criterion_group! {
    name = benches;
    config = Criterion::default().sample_size(10);
    targets = highlighting_benchmark
}
criterion_main!(benches);