Skip to main content

bbnf_analysis/features/
code_lens.rs

1use ls_types::*;
2
3use crate::state::DocumentState;
4
5pub fn code_lens(state: &DocumentState) -> Vec<CodeLens> {
6    state
7        .info
8        .rules
9        .iter()
10        .map(|rule| {
11            let ref_count: usize = state
12                .info
13                .rules
14                .iter()
15                .flat_map(|r| &r.references)
16                .filter(|r| r.name == rule.name)
17                .count();
18
19            let range = state.line_index.span_to_range(rule.name_span.0, rule.name_span.1);
20
21            CodeLens {
22                range,
23                command: Some(Command {
24                    title: format!(
25                        "{} reference{}",
26                        ref_count,
27                        if ref_count == 1 { "" } else { "s" }
28                    ),
29                    command: "editor.action.findReferences".into(),
30                    arguments: None,
31                }),
32                data: None,
33            }
34        })
35        .collect()
36}