diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-03-30 12:15:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-30 16:15:21 +0000 |
commit | c4f82cab31d1ec09b2bce1f0155f92c7d7bd50e0 (patch) | |
tree | 88794a5bffffa78faf05c13be7a892ea44ff9d5c /cli/lsp/language_server.rs | |
parent | cc7f5c10156333acae8cf9d004bb859ba5c58115 (diff) |
fix(lsp): `textDocument/references` should respect `includeDeclaration` (#18496)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 2d0bbd140..164c9734f 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1953,27 +1953,23 @@ impl Inner { let mark = self.performance.mark("references", Some(¶ms)); let asset_or_doc = self.get_asset_or_document(&specifier)?; let line_index = asset_or_doc.line_index(); - let req = tsc::RequestMethod::GetReferences(( - specifier.clone(), - line_index.offset_tsc(params.text_document_position.position)?, - )); - let maybe_references: Option<Vec<tsc::ReferenceEntry>> = self + let maybe_referenced_symbols = self .ts_server - .request(self.snapshot(), req) - .await - .map_err(|err| { - error!("Unable to get references from TypeScript: {}", err); - LspError::internal_error() - })?; + .find_references( + self.snapshot(), + &specifier, + line_index.offset_tsc(params.text_document_position.position)?, + ) + .await?; - if let Some(references) = maybe_references { + if let Some(symbols) = maybe_referenced_symbols { let mut results = Vec::new(); - for reference in references { + for reference in symbols.iter().flat_map(|s| &s.references) { if !params.context.include_declaration && reference.is_definition { continue; } let reference_specifier = - resolve_url(&reference.document_span.file_name).unwrap(); + resolve_url(&reference.entry.document_span.file_name).unwrap(); let reference_line_index = if reference_specifier == specifier { line_index.clone() } else { @@ -1981,8 +1977,11 @@ impl Inner { self.get_asset_or_document(&reference_specifier)?; asset_or_doc.line_index() }; - results - .push(reference.to_location(reference_line_index, &self.url_map)); + results.push( + reference + .entry + .to_location(reference_line_index, &self.url_map), + ); } self.performance.measure(mark); |