blob: 380471e6cfd8446d60eb23b67b4b643ef345a604 (
plain)
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
|
use base_db::{FeatureParams, Workspace};
use references::{ReferenceKind, ReferenceParams};
use crate::util::line_index_ext::LineIndexExt;
pub fn find_all(
workspace: &Workspace,
params: lsp_types::ReferenceParams,
) -> Option<Vec<lsp_types::Location>> {
let uri_and_pos = params.text_document_position;
let include_declaration = params.context.include_declaration;
let document = workspace.lookup(&uri_and_pos.text_document.uri)?;
let offset = document.line_index.offset_lsp(uri_and_pos.position)?;
let feature = FeatureParams::new(workspace, document);
let mut results = Vec::new();
for result in references::find_all(ReferenceParams { feature, offset })
.into_iter()
.filter(|result| result.kind == ReferenceKind::Reference || include_declaration)
{
let document = result.location.document;
let uri = document.uri.clone();
if let Some(range) = document
.line_index
.line_col_lsp_range(result.location.range)
{
let location = lsp_types::Location::new(uri, range);
results.push(location);
}
}
Some(results)
}
|