mirror of
https://github.com/denoland/deno.git
synced 2025-09-26 20:29:11 +00:00
refactor(lsp): pass module parameters to tsc requests (#29674)
This commit is contained in:
parent
ccc30edcb5
commit
cb9245c69a
4 changed files with 518 additions and 639 deletions
|
@ -1090,13 +1090,7 @@ async fn generate_ts_diagnostics(
|
||||||
let mut enabled_modules_with_diagnostics = Vec::new();
|
let mut enabled_modules_with_diagnostics = Vec::new();
|
||||||
for ((scope, notebook_uri), enabled_modules) in enabled_modules_by_scope {
|
for ((scope, notebook_uri), enabled_modules) in enabled_modules_by_scope {
|
||||||
let (diagnostics_list, ambient_modules) = ts_server
|
let (diagnostics_list, ambient_modules) = ts_server
|
||||||
.get_diagnostics(
|
.get_diagnostics(snapshot.clone(), &enabled_modules, &token)
|
||||||
snapshot.clone(),
|
|
||||||
enabled_modules.iter().map(|m| m.specifier.as_ref()),
|
|
||||||
scope.as_ref(),
|
|
||||||
notebook_uri.as_ref(),
|
|
||||||
&token,
|
|
||||||
)
|
|
||||||
.await?;
|
.await?;
|
||||||
enabled_modules_with_diagnostics
|
enabled_modules_with_diagnostics
|
||||||
.extend(enabled_modules.into_iter().zip(diagnostics_list));
|
.extend(enabled_modules.into_iter().zip(diagnostics_list));
|
||||||
|
|
|
@ -1354,6 +1354,7 @@ impl DocumentModules {
|
||||||
|
|
||||||
/// This will not store any module entries, only retrieve existing entries or
|
/// This will not store any module entries, only retrieve existing entries or
|
||||||
/// create temporary entries for scopes where one doesn't exist.
|
/// create temporary entries for scopes where one doesn't exist.
|
||||||
|
// TODO(nayeemrmn): Support notebook scopes here.
|
||||||
pub fn inspect_or_temp_modules_by_scope(
|
pub fn inspect_or_temp_modules_by_scope(
|
||||||
&self,
|
&self,
|
||||||
document: &Document,
|
document: &Document,
|
||||||
|
|
|
@ -659,13 +659,7 @@ impl Inner {
|
||||||
.get_or_try_init(|| async {
|
.get_or_try_init(|| async {
|
||||||
self
|
self
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_navigation_tree(
|
.get_navigation_tree(self.snapshot(), module, token)
|
||||||
self.snapshot(),
|
|
||||||
&module.specifier,
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.map(Arc::new)
|
.map(Arc::new)
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
|
@ -1218,7 +1212,7 @@ impl Inner {
|
||||||
// a @types/node package and now's a good time to do that anyway
|
// a @types/node package and now's a good time to do that anyway
|
||||||
self.refresh_dep_info().await;
|
self.refresh_dep_info().await;
|
||||||
|
|
||||||
self.project_changed([], ProjectScopesChange::Config);
|
self.project_changed(vec![], ProjectScopesChange::Config);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(feature = "lsp-tracing", tracing::instrument(skip_all))]
|
#[cfg_attr(feature = "lsp-tracing", tracing::instrument(skip_all))]
|
||||||
|
@ -1260,14 +1254,11 @@ impl Inner {
|
||||||
if document.is_diagnosable() {
|
if document.is_diagnosable() {
|
||||||
self.check_semantic_tokens_capabilities();
|
self.check_semantic_tokens_capabilities();
|
||||||
self.refresh_dep_info().await;
|
self.refresh_dep_info().await;
|
||||||
|
self.diagnostics_server.invalidate(&[document.uri.as_ref()]);
|
||||||
self.project_changed(
|
self.project_changed(
|
||||||
self
|
vec![(Document::Open(document), ChangeKind::Opened)],
|
||||||
.document_modules
|
|
||||||
.primary_specifier(&Document::Open(document.clone()))
|
|
||||||
.map(|s| (s, ChangeKind::Opened)),
|
|
||||||
ProjectScopesChange::None,
|
ProjectScopesChange::None,
|
||||||
);
|
);
|
||||||
self.diagnostics_server.invalidate(&[document.uri.as_ref()]);
|
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
self.send_testing_update();
|
self.send_testing_update();
|
||||||
}
|
}
|
||||||
|
@ -1310,18 +1301,15 @@ impl Inner {
|
||||||
{
|
{
|
||||||
config_changed = true;
|
config_changed = true;
|
||||||
}
|
}
|
||||||
|
self.diagnostics_server.invalidate(&[&document.uri]);
|
||||||
self.project_changed(
|
self.project_changed(
|
||||||
self
|
vec![(Document::Open(document), ChangeKind::Modified)],
|
||||||
.document_modules
|
|
||||||
.primary_specifier(&Document::Open(document.clone()))
|
|
||||||
.map(|s| (s, ChangeKind::Modified)),
|
|
||||||
if config_changed {
|
if config_changed {
|
||||||
ProjectScopesChange::Config
|
ProjectScopesChange::Config
|
||||||
} else {
|
} else {
|
||||||
ProjectScopesChange::None
|
ProjectScopesChange::None
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
self.diagnostics_server.invalidate(&[&document.uri]);
|
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
self.send_testing_update();
|
self.send_testing_update();
|
||||||
}
|
}
|
||||||
|
@ -1416,14 +1404,10 @@ impl Inner {
|
||||||
if document.is_diagnosable() {
|
if document.is_diagnosable() {
|
||||||
self.refresh_dep_info().await;
|
self.refresh_dep_info().await;
|
||||||
self.diagnostics_server.invalidate(&[&document.uri]);
|
self.diagnostics_server.invalidate(&[&document.uri]);
|
||||||
let changed_specifier = self
|
self.project_changed(
|
||||||
.document_modules
|
vec![(Document::Open(document), ChangeKind::Closed)],
|
||||||
.primary_specifier(&Document::Open(document.clone()))
|
ProjectScopesChange::None,
|
||||||
.map(|s| (s, ChangeKind::Closed));
|
);
|
||||||
// Invalidate the weak references of `document` before calling
|
|
||||||
// `self.project_changed()` so its module entries will be dropped.
|
|
||||||
drop(document);
|
|
||||||
self.project_changed(changed_specifier, ProjectScopesChange::None);
|
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
self.send_testing_update();
|
self.send_testing_update();
|
||||||
}
|
}
|
||||||
|
@ -1437,30 +1421,25 @@ impl Inner {
|
||||||
params.cell_text_documents,
|
params.cell_text_documents,
|
||||||
);
|
);
|
||||||
let diagnosable_documents = documents
|
let diagnosable_documents = documents
|
||||||
.iter()
|
.into_iter()
|
||||||
.filter(|d| d.is_diagnosable())
|
.filter(|d| d.is_diagnosable())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
if !diagnosable_documents.is_empty() {
|
if !diagnosable_documents.is_empty() {
|
||||||
self.check_semantic_tokens_capabilities();
|
self.check_semantic_tokens_capabilities();
|
||||||
self.refresh_dep_info().await;
|
self.refresh_dep_info().await;
|
||||||
self.project_changed(
|
|
||||||
diagnosable_documents
|
|
||||||
.iter()
|
|
||||||
.flat_map(|d| {
|
|
||||||
let specifier = self
|
|
||||||
.document_modules
|
|
||||||
.primary_specifier(&Document::Open((*d).clone()))?;
|
|
||||||
Some((specifier, ChangeKind::Opened))
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>(),
|
|
||||||
ProjectScopesChange::OpenNotebooks,
|
|
||||||
);
|
|
||||||
self.diagnostics_server.invalidate(
|
self.diagnostics_server.invalidate(
|
||||||
&diagnosable_documents
|
&diagnosable_documents
|
||||||
.iter()
|
.iter()
|
||||||
.map(|d| d.uri.as_ref())
|
.map(|d| d.uri.as_ref())
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
);
|
);
|
||||||
|
self.project_changed(
|
||||||
|
diagnosable_documents
|
||||||
|
.into_iter()
|
||||||
|
.map(|d| (Document::Open(d), ChangeKind::Opened))
|
||||||
|
.collect(),
|
||||||
|
ProjectScopesChange::OpenNotebooks,
|
||||||
|
);
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1479,7 +1458,7 @@ impl Inner {
|
||||||
cells.text_content,
|
cells.text_content,
|
||||||
);
|
);
|
||||||
let diagnosable_documents = documents
|
let diagnosable_documents = documents
|
||||||
.iter()
|
.into_iter()
|
||||||
.filter(|(d, _)| d.is_diagnosable())
|
.filter(|(d, _)| d.is_diagnosable())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
if !diagnosable_documents.is_empty() {
|
if !diagnosable_documents.is_empty() {
|
||||||
|
@ -1494,28 +1473,23 @@ impl Inner {
|
||||||
{
|
{
|
||||||
config_changed = true;
|
config_changed = true;
|
||||||
}
|
}
|
||||||
self.project_changed(
|
|
||||||
diagnosable_documents
|
|
||||||
.iter()
|
|
||||||
.flat_map(|(d, k)| {
|
|
||||||
let specifier = self
|
|
||||||
.document_modules
|
|
||||||
.primary_specifier(&Document::Open(d.clone()))?;
|
|
||||||
Some((specifier, *k))
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>(),
|
|
||||||
if config_changed {
|
|
||||||
ProjectScopesChange::Config
|
|
||||||
} else {
|
|
||||||
ProjectScopesChange::None
|
|
||||||
},
|
|
||||||
);
|
|
||||||
self.diagnostics_server.invalidate(
|
self.diagnostics_server.invalidate(
|
||||||
&diagnosable_documents
|
&diagnosable_documents
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(d, _)| d.uri.as_ref())
|
.map(|(d, _)| d.uri.as_ref())
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
);
|
);
|
||||||
|
self.project_changed(
|
||||||
|
diagnosable_documents
|
||||||
|
.into_iter()
|
||||||
|
.map(|(d, k)| (Document::Open(d), k))
|
||||||
|
.collect(),
|
||||||
|
if config_changed {
|
||||||
|
ProjectScopesChange::Config
|
||||||
|
} else {
|
||||||
|
ProjectScopesChange::None
|
||||||
|
},
|
||||||
|
);
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1554,7 +1528,7 @@ impl Inner {
|
||||||
.document_modules
|
.document_modules
|
||||||
.close_notebook_document(¶ms.notebook_document.uri);
|
.close_notebook_document(¶ms.notebook_document.uri);
|
||||||
let diagnosable_documents = documents
|
let diagnosable_documents = documents
|
||||||
.iter()
|
.into_iter()
|
||||||
.filter(|d| d.is_diagnosable())
|
.filter(|d| d.is_diagnosable())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
if !diagnosable_documents.is_empty() {
|
if !diagnosable_documents.is_empty() {
|
||||||
|
@ -1565,20 +1539,11 @@ impl Inner {
|
||||||
.map(|d| d.uri.as_ref())
|
.map(|d| d.uri.as_ref())
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
);
|
);
|
||||||
let changed_specifiers = diagnosable_documents
|
|
||||||
.iter()
|
|
||||||
.flat_map(|d| {
|
|
||||||
let specifier = self
|
|
||||||
.document_modules
|
|
||||||
.primary_specifier(&Document::Open((*d).clone()))?;
|
|
||||||
Some((specifier, ChangeKind::Closed))
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
// Invalidate the weak references of `documents` before calling
|
|
||||||
// `self.project_changed()` so their module entries will be dropped.
|
|
||||||
drop(documents);
|
|
||||||
self.project_changed(
|
self.project_changed(
|
||||||
changed_specifiers,
|
diagnosable_documents
|
||||||
|
.into_iter()
|
||||||
|
.map(|d| (Document::Open(d), ChangeKind::Closed))
|
||||||
|
.collect(),
|
||||||
ProjectScopesChange::OpenNotebooks,
|
ProjectScopesChange::OpenNotebooks,
|
||||||
);
|
);
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
|
@ -1673,23 +1638,18 @@ impl Inner {
|
||||||
self.update_cache();
|
self.update_cache();
|
||||||
self.refresh_resolver().await;
|
self.refresh_resolver().await;
|
||||||
self.refresh_documents_config().await;
|
self.refresh_documents_config().await;
|
||||||
|
self.diagnostics_server.invalidate_all();
|
||||||
self.project_changed(
|
self.project_changed(
|
||||||
changes
|
changes
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|(_, e)| {
|
.filter_map(|(_, e)| {
|
||||||
let document = self.document_modules.documents.inspect(&e.uri)?;
|
let document = self.document_modules.documents.inspect(&e.uri)?;
|
||||||
if !document.is_diagnosable() {
|
Some((document, ChangeKind::Modified))
|
||||||
return None;
|
|
||||||
}
|
|
||||||
let specifier =
|
|
||||||
self.document_modules.primary_specifier(&document)?;
|
|
||||||
Some((specifier, ChangeKind::Modified))
|
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
ProjectScopesChange::None,
|
ProjectScopesChange::None,
|
||||||
);
|
);
|
||||||
self.ts_server.cleanup_semantic_cache(self.snapshot()).await;
|
self.ts_server.cleanup_semantic_cache(self.snapshot()).await;
|
||||||
self.diagnostics_server.invalidate_all();
|
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
self.send_testing_update();
|
self.send_testing_update();
|
||||||
deno_config_changes.extend(changes.iter().filter_map(|(s, e)| {
|
deno_config_changes.extend(changes.iter().filter_map(|(s, e)| {
|
||||||
|
@ -1956,14 +1916,7 @@ impl Inner {
|
||||||
.offset_tsc(params.text_document_position_params.position)?;
|
.offset_tsc(params.text_document_position_params.position)?;
|
||||||
let maybe_quick_info = self
|
let maybe_quick_info = self
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_quick_info(
|
.get_quick_info(self.snapshot(), &module, position, token)
|
||||||
self.snapshot(),
|
|
||||||
&module.specifier,
|
|
||||||
position,
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
if token.is_cancelled() {
|
if token.is_cancelled() {
|
||||||
|
@ -2092,22 +2045,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_code_fixes(
|
.get_code_fixes(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module.line_index.offset_tsc(diagnostic.range.start)?
|
module.line_index.offset_tsc(diagnostic.range.start)?
|
||||||
..module.line_index.offset_tsc(diagnostic.range.end)?,
|
..module.line_index.offset_tsc(diagnostic.range.end)?,
|
||||||
codes,
|
codes,
|
||||||
(&self
|
|
||||||
.config
|
|
||||||
.tree
|
|
||||||
.fmt_config_for_specifier(&module.specifier)
|
|
||||||
.options)
|
|
||||||
.into(),
|
|
||||||
tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
),
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2210,17 +2151,11 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_applicable_refactors(
|
.get_applicable_refactors(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module.line_index.offset_tsc(params.range.start)?
|
module.line_index.offset_tsc(params.range.start)?
|
||||||
..module.line_index.offset_tsc(params.range.end)?,
|
..module.line_index.offset_tsc(params.range.end)?,
|
||||||
Some(tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
)),
|
|
||||||
params.context.trigger_kind,
|
params.context.trigger_kind,
|
||||||
only,
|
only,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2308,20 +2243,8 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_combined_code_fix(
|
.get_combined_code_fix(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
&code_action_data.fix_id,
|
&code_action_data.fix_id,
|
||||||
(&self
|
|
||||||
.config
|
|
||||||
.tree
|
|
||||||
.fmt_config_for_specifier(&module.specifier)
|
|
||||||
.options)
|
|
||||||
.into(),
|
|
||||||
tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
),
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2389,23 +2312,11 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_edits_for_refactor(
|
.get_edits_for_refactor(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
(&self
|
|
||||||
.config
|
|
||||||
.tree
|
|
||||||
.fmt_config_for_specifier(&module.specifier)
|
|
||||||
.options)
|
|
||||||
.into(),
|
|
||||||
module.line_index.offset_tsc(action_data.range.start)?
|
module.line_index.offset_tsc(action_data.range.start)?
|
||||||
..module.line_index.offset_tsc(action_data.range.end)?,
|
..module.line_index.offset_tsc(action_data.range.end)?,
|
||||||
action_data.refactor_name.clone(),
|
action_data.refactor_name.clone(),
|
||||||
action_data.action_name.clone(),
|
action_data.action_name.clone(),
|
||||||
Some(tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
)),
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2612,13 +2523,11 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_document_highlights(
|
.get_document_highlights(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position_params.position)?,
|
.offset_tsc(params.text_document_position_params.position)?,
|
||||||
vec![module.specifier.as_ref().clone()],
|
vec![module.specifier.as_ref().clone()],
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2674,9 +2583,10 @@ impl Inner {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
let mut locations = IndexSet::new();
|
let mut locations = IndexSet::new();
|
||||||
for (scope, module) in self
|
for module in self
|
||||||
.document_modules
|
.document_modules
|
||||||
.inspect_or_temp_modules_by_scope(&document)
|
.inspect_or_temp_modules_by_scope(&document)
|
||||||
|
.into_values()
|
||||||
{
|
{
|
||||||
if token.is_cancelled() {
|
if token.is_cancelled() {
|
||||||
return Err(LspError::request_cancelled());
|
return Err(LspError::request_cancelled());
|
||||||
|
@ -2685,13 +2595,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.find_references(
|
.find_references(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position.position)?,
|
.offset_tsc(params.text_document_position.position)?,
|
||||||
scope.as_ref(),
|
|
||||||
// TODO(nayeemrmn): Support notebook scopes here.
|
|
||||||
None,
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2753,12 +2660,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_definition(
|
.get_definition(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position_params.position)?,
|
.offset_tsc(params.text_document_position_params.position)?,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2816,12 +2721,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_type_definition(
|
.get_type_definition(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position_params.position)?,
|
.offset_tsc(params.text_document_position_params.position)?,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -2912,15 +2815,6 @@ impl Inner {
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
if response.is_none() {
|
if response.is_none() {
|
||||||
let (trigger_character, trigger_kind) =
|
|
||||||
if let Some(context) = ¶ms.context {
|
|
||||||
(
|
|
||||||
context.trigger_character.clone(),
|
|
||||||
Some(context.trigger_kind.into()),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
(None, None)
|
|
||||||
};
|
|
||||||
let position = module
|
let position = module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position.position)?;
|
.offset_tsc(params.text_document_position.position)?;
|
||||||
|
@ -2928,24 +2822,13 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_completions(
|
.get_completions(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
position,
|
position,
|
||||||
tsc::GetCompletionsAtPositionOptions {
|
params
|
||||||
user_preferences: tsc::UserPreferences::from_config_for_specifier(
|
.context
|
||||||
&self.config,
|
.as_ref()
|
||||||
&module.specifier,
|
.and_then(|c| c.trigger_character.clone()),
|
||||||
),
|
params.context.as_ref().map(|c| c.trigger_kind.into()),
|
||||||
trigger_character,
|
|
||||||
trigger_kind,
|
|
||||||
},
|
|
||||||
(&self
|
|
||||||
.config
|
|
||||||
.tree
|
|
||||||
.fmt_config_for_specifier(&module.specifier)
|
|
||||||
.options)
|
|
||||||
.into(),
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3021,25 +2904,11 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_completion_details(
|
.get_completion_details(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
data.position,
|
data.position,
|
||||||
data.name.clone(),
|
data.name.clone(),
|
||||||
Some(
|
|
||||||
(&self
|
|
||||||
.config
|
|
||||||
.tree
|
|
||||||
.fmt_config_for_specifier(&module.specifier)
|
|
||||||
.options)
|
|
||||||
.into(),
|
|
||||||
),
|
|
||||||
data.source.clone(),
|
data.source.clone(),
|
||||||
Some(tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
)),
|
|
||||||
data.data.clone(),
|
data.data.clone(),
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
@ -3107,9 +2976,10 @@ impl Inner {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
let mut implementations_with_modules = IndexMap::new();
|
let mut implementations_with_modules = IndexMap::new();
|
||||||
for (scope, module) in self
|
for module in self
|
||||||
.document_modules
|
.document_modules
|
||||||
.inspect_or_temp_modules_by_scope(&document)
|
.inspect_or_temp_modules_by_scope(&document)
|
||||||
|
.into_values()
|
||||||
{
|
{
|
||||||
if token.is_cancelled() {
|
if token.is_cancelled() {
|
||||||
return Err(LspError::request_cancelled());
|
return Err(LspError::request_cancelled());
|
||||||
|
@ -3118,12 +2988,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_implementations(
|
.get_implementations(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position_params.position)?,
|
.offset_tsc(params.text_document_position_params.position)?,
|
||||||
scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3186,13 +3054,7 @@ impl Inner {
|
||||||
};
|
};
|
||||||
let outlining_spans = self
|
let outlining_spans = self
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_outlining_spans(
|
.get_outlining_spans(self.snapshot(), &module, token)
|
||||||
self.snapshot(),
|
|
||||||
&module.specifier,
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
if token.is_cancelled() {
|
if token.is_cancelled() {
|
||||||
|
@ -3244,9 +3106,10 @@ impl Inner {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
let mut incoming_calls_with_modules = IndexMap::new();
|
let mut incoming_calls_with_modules = IndexMap::new();
|
||||||
for (scope, module) in self
|
for module in self
|
||||||
.document_modules
|
.document_modules
|
||||||
.inspect_or_temp_modules_by_scope(&document)
|
.inspect_or_temp_modules_by_scope(&document)
|
||||||
|
.into_values()
|
||||||
{
|
{
|
||||||
if token.is_cancelled() {
|
if token.is_cancelled() {
|
||||||
return Err(LspError::request_cancelled());
|
return Err(LspError::request_cancelled());
|
||||||
|
@ -3255,12 +3118,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.provide_call_hierarchy_incoming_calls(
|
.provide_call_hierarchy_incoming_calls(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.item.selection_range.start)?,
|
.offset_tsc(params.item.selection_range.start)?,
|
||||||
scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3323,12 +3184,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.provide_call_hierarchy_outgoing_calls(
|
.provide_call_hierarchy_outgoing_calls(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.item.selection_range.start)?,
|
.offset_tsc(params.item.selection_range.start)?,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3386,12 +3245,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.prepare_call_hierarchy(
|
.prepare_call_hierarchy(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position_params.position)?,
|
.offset_tsc(params.text_document_position_params.position)?,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3471,17 +3328,10 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.find_rename_locations(
|
.find_rename_locations(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position.position)?,
|
.offset_tsc(params.text_document_position.position)?,
|
||||||
tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
),
|
|
||||||
scope.as_ref(),
|
|
||||||
// TODO(nayeemrmn): Support notebook scopes here.
|
|
||||||
None,
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3555,10 +3405,8 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_smart_selection_range(
|
.get_smart_selection_range(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module.line_index.offset_tsc(position)?,
|
module.line_index.offset_tsc(position)?,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3609,10 +3457,8 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_encoded_semantic_classifications(
|
.get_encoded_semantic_classifications(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
0..module.line_index.text_content_length_utf16().into(),
|
0..module.line_index.text_content_length_utf16().into(),
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3677,11 +3523,9 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_encoded_semantic_classifications(
|
.get_encoded_semantic_classifications(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module.line_index.offset_tsc(params.range.start)?
|
module.line_index.offset_tsc(params.range.start)?
|
||||||
..module.line_index.offset_tsc(params.range.end)?,
|
..module.line_index.offset_tsc(params.range.end)?,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3744,13 +3588,11 @@ impl Inner {
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_signature_help_items(
|
.get_signature_help_items(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
module
|
module
|
||||||
.line_index
|
.line_index
|
||||||
.offset_tsc(params.text_document_position_params.position)?,
|
.offset_tsc(params.text_document_position_params.position)?,
|
||||||
options,
|
options,
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3822,26 +3664,12 @@ impl Inner {
|
||||||
if options.enabled == UpdateImportsOnFileMoveEnabled::Never {
|
if options.enabled == UpdateImportsOnFileMoveEnabled::Never {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let format_code_settings = (&self
|
|
||||||
.config
|
|
||||||
.tree
|
|
||||||
.fmt_config_for_specifier(&module.specifier)
|
|
||||||
.options)
|
|
||||||
.into();
|
|
||||||
let changes = self
|
let changes = self
|
||||||
.ts_server
|
.ts_server
|
||||||
.get_edits_for_file_rename(
|
.get_edits_for_file_rename(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
&module.specifier,
|
&module,
|
||||||
&uri_to_url(&Uri::from_str(&rename.new_uri).unwrap()),
|
&uri_to_url(&Uri::from_str(&rename.new_uri).unwrap()),
|
||||||
format_code_settings,
|
|
||||||
tsc::UserPreferences {
|
|
||||||
allow_text_changes_in_new_files: Some(true),
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
scope.as_ref(),
|
|
||||||
// TODO(nayeemrmn): Support notebook scopes here.
|
|
||||||
None,
|
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -3887,7 +3715,6 @@ impl Inner {
|
||||||
params.query.clone(),
|
params.query.clone(),
|
||||||
// this matches vscode's hard coded result count
|
// this matches vscode's hard coded result count
|
||||||
Some(256),
|
Some(256),
|
||||||
None,
|
|
||||||
scope.as_ref(),
|
scope.as_ref(),
|
||||||
// TODO(nayeemrmn): Support notebook scopes here.
|
// TODO(nayeemrmn): Support notebook scopes here.
|
||||||
None,
|
None,
|
||||||
|
@ -3925,14 +3752,13 @@ impl Inner {
|
||||||
#[cfg_attr(feature = "lsp-tracing", tracing::instrument(skip_all))]
|
#[cfg_attr(feature = "lsp-tracing", tracing::instrument(skip_all))]
|
||||||
fn project_changed(
|
fn project_changed(
|
||||||
&mut self,
|
&mut self,
|
||||||
changed_specifiers: impl IntoIterator<Item = (Arc<Url>, ChangeKind)>,
|
documents: Vec<(Document, ChangeKind)>,
|
||||||
scopes_change: ProjectScopesChange,
|
scopes_change: ProjectScopesChange,
|
||||||
) {
|
) {
|
||||||
self.project_version += 1; // increment before getting the snapshot
|
self.project_version += 1; // increment before getting the snapshot
|
||||||
let changed_specifiers = changed_specifiers.into_iter().collect::<Vec<_>>();
|
|
||||||
self.ts_server.project_changed(
|
self.ts_server.project_changed(
|
||||||
self.snapshot(),
|
self.snapshot(),
|
||||||
changed_specifiers.iter().map(|(u, k)| (u.as_ref(), *k)),
|
&documents,
|
||||||
matches!(scopes_change, ProjectScopesChange::Config).then(|| {
|
matches!(scopes_change, ProjectScopesChange::Config).then(|| {
|
||||||
self
|
self
|
||||||
.config
|
.config
|
||||||
|
@ -3961,6 +3787,9 @@ impl Inner {
|
||||||
.collect()
|
.collect()
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
// Invalidate the weak references of `documents` before removing expired
|
||||||
|
// entries.
|
||||||
|
drop(documents);
|
||||||
self.document_modules.remove_expired_modules();
|
self.document_modules.remove_expired_modules();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4660,7 +4489,7 @@ impl Inner {
|
||||||
self.resolver.did_cache();
|
self.resolver.did_cache();
|
||||||
self.refresh_dep_info().await;
|
self.refresh_dep_info().await;
|
||||||
self.diagnostics_server.invalidate_all();
|
self.diagnostics_server.invalidate_all();
|
||||||
self.project_changed([], ProjectScopesChange::Config);
|
self.project_changed(vec![], ProjectScopesChange::Config);
|
||||||
self.ts_server.cleanup_semantic_cache(self.snapshot()).await;
|
self.ts_server.cleanup_semantic_cache(self.snapshot()).await;
|
||||||
self.send_diagnostics_update();
|
self.send_diagnostics_update();
|
||||||
self.send_testing_update();
|
self.send_testing_update();
|
||||||
|
@ -4812,18 +4641,7 @@ impl Inner {
|
||||||
})?;
|
})?;
|
||||||
let maybe_inlay_hints = self
|
let maybe_inlay_hints = self
|
||||||
.ts_server
|
.ts_server
|
||||||
.provide_inlay_hints(
|
.provide_inlay_hints(self.snapshot(), &module, text_span, token)
|
||||||
self.snapshot(),
|
|
||||||
&module.specifier,
|
|
||||||
text_span,
|
|
||||||
tsc::UserPreferences::from_config_for_specifier(
|
|
||||||
&self.config,
|
|
||||||
&module.specifier,
|
|
||||||
),
|
|
||||||
module.scope.as_ref(),
|
|
||||||
module.notebook_uri.as_ref(),
|
|
||||||
token,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
if token.is_cancelled() {
|
if token.is_cancelled() {
|
||||||
|
|
810
cli/lsp/tsc.rs
810
cli/lsp/tsc.rs
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue