mirror of
https://github.com/denoland/deno.git
synced 2025-08-02 18:12:39 +00:00
feat(lsp): respect nested deno.json for fmt and lint config (#23159)
This commit is contained in:
parent
3b9fd1af80
commit
2b1c6e172e
9 changed files with 480 additions and 316 deletions
|
@ -334,11 +334,7 @@ impl LanguageServer {
|
|||
// do as much as possible in a read, then do a write outside
|
||||
let maybe_prepare_cache_result = {
|
||||
let inner = self.0.read().await; // ensure dropped
|
||||
match inner.prepare_cache(
|
||||
specifiers,
|
||||
referrer.clone(),
|
||||
force_global_cache,
|
||||
) {
|
||||
match inner.prepare_cache(specifiers, referrer, force_global_cache) {
|
||||
Ok(maybe_cache_result) => maybe_cache_result,
|
||||
Err(err) => {
|
||||
lsp_warn!("Error preparing caching: {:#}", err);
|
||||
|
@ -370,7 +366,7 @@ impl LanguageServer {
|
|||
}
|
||||
{
|
||||
let mut inner = self.0.write().await;
|
||||
let lockfile = inner.config.tree.lockfile_for_specifier(&referrer);
|
||||
let lockfile = inner.config.tree.root_lockfile().cloned();
|
||||
inner.documents.refresh_jsr_resolver(lockfile);
|
||||
inner.refresh_npm_specifiers().await;
|
||||
}
|
||||
|
@ -516,11 +512,8 @@ impl Inner {
|
|||
let cache_metadata = cache::CacheMetadata::new(deps_http_cache.clone());
|
||||
let performance = Arc::new(Performance::default());
|
||||
let config = Config::default();
|
||||
let ts_server = Arc::new(TsServer::new(
|
||||
performance.clone(),
|
||||
deps_http_cache.clone(),
|
||||
config.tree.clone(),
|
||||
));
|
||||
let ts_server =
|
||||
Arc::new(TsServer::new(performance.clone(), deps_http_cache.clone()));
|
||||
let diagnostics_state = Arc::new(DiagnosticsState::default());
|
||||
let diagnostics_server = DiagnosticsServer::new(
|
||||
client.clone(),
|
||||
|
@ -765,7 +758,10 @@ impl Inner {
|
|||
));
|
||||
let maybe_local_cache =
|
||||
self.config.tree.root_vendor_dir().map(|local_path| {
|
||||
Arc::new(LocalLspHttpCache::new(local_path, global_cache.clone()))
|
||||
Arc::new(LocalLspHttpCache::new(
|
||||
local_path.clone(),
|
||||
global_cache.clone(),
|
||||
))
|
||||
});
|
||||
let cache: Arc<dyn HttpCache> = maybe_local_cache
|
||||
.clone()
|
||||
|
@ -1154,42 +1150,33 @@ impl Inner {
|
|||
|
||||
async fn refresh_config_tree(&mut self) {
|
||||
let file_fetcher = self.create_file_fetcher(CacheSetting::RespectHeaders);
|
||||
if let Some(root_uri) = self.config.root_uri() {
|
||||
self
|
||||
.config
|
||||
.tree
|
||||
.refresh(
|
||||
&self.config.settings,
|
||||
root_uri,
|
||||
&self.workspace_files,
|
||||
&file_fetcher,
|
||||
)
|
||||
.await;
|
||||
for config_file in self.config.tree.config_files() {
|
||||
if let Ok((compiler_options, _)) = config_file.to_compiler_options() {
|
||||
if let Some(compiler_options_obj) = compiler_options.as_object() {
|
||||
if let Some(jsx_import_source) =
|
||||
compiler_options_obj.get("jsxImportSource")
|
||||
{
|
||||
if let Some(jsx_import_source) = jsx_import_source.as_str() {
|
||||
let specifiers = vec![Url::parse(&format!(
|
||||
"data:application/typescript;base64,{}",
|
||||
base64::engine::general_purpose::STANDARD.encode(format!(
|
||||
"import '{jsx_import_source}/jsx-runtime';"
|
||||
))
|
||||
))
|
||||
.unwrap()];
|
||||
let referrer = config_file.specifier.clone();
|
||||
self.task_queue.queue_task(Box::new(|ls: LanguageServer| {
|
||||
spawn(async move {
|
||||
if let Err(err) =
|
||||
ls.cache(specifiers, referrer, false).await
|
||||
{
|
||||
lsp_warn!("{:#}", err);
|
||||
}
|
||||
});
|
||||
}));
|
||||
}
|
||||
self
|
||||
.config
|
||||
.tree
|
||||
.refresh(&self.config.settings, &self.workspace_files, &file_fetcher)
|
||||
.await;
|
||||
for config_file in self.config.tree.config_files() {
|
||||
if let Ok((compiler_options, _)) = config_file.to_compiler_options() {
|
||||
if let Some(compiler_options_obj) = compiler_options.as_object() {
|
||||
if let Some(jsx_import_source) =
|
||||
compiler_options_obj.get("jsxImportSource")
|
||||
{
|
||||
if let Some(jsx_import_source) = jsx_import_source.as_str() {
|
||||
let specifiers = vec![Url::parse(&format!(
|
||||
"data:application/typescript;base64,{}",
|
||||
base64::engine::general_purpose::STANDARD
|
||||
.encode(format!("import '{jsx_import_source}/jsx-runtime';"))
|
||||
))
|
||||
.unwrap()];
|
||||
let referrer = config_file.specifier.clone();
|
||||
self.task_queue.queue_task(Box::new(|ls: LanguageServer| {
|
||||
spawn(async move {
|
||||
if let Err(err) = ls.cache(specifiers, referrer, false).await
|
||||
{
|
||||
lsp_warn!("{:#}", err);
|
||||
}
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1383,7 +1370,7 @@ impl Inner {
|
|||
_ => return None,
|
||||
};
|
||||
Some(lsp_custom::DenoConfigurationChangeEvent {
|
||||
scope_uri: t.0,
|
||||
scope_uri: t.0.clone(),
|
||||
file_uri: e.uri.clone(),
|
||||
typ: lsp_custom::DenoConfigurationChangeType::from_file_change_type(
|
||||
e.typ,
|
||||
|
@ -1407,7 +1394,7 @@ impl Inner {
|
|||
_ => return None,
|
||||
};
|
||||
Some(lsp_custom::DenoConfigurationChangeEvent {
|
||||
scope_uri: t.0,
|
||||
scope_uri: t.0.clone(),
|
||||
file_uri: e.uri.clone(),
|
||||
typ: lsp_custom::DenoConfigurationChangeType::from_file_change_type(
|
||||
e.typ,
|
||||
|
@ -2010,11 +1997,11 @@ impl Inner {
|
|||
|
||||
pub fn get_ts_response_import_mapper(
|
||||
&self,
|
||||
referrer: &ModuleSpecifier,
|
||||
_referrer: &ModuleSpecifier,
|
||||
) -> TsResponseImportMapper {
|
||||
TsResponseImportMapper::new(
|
||||
&self.documents,
|
||||
self.config.tree.import_map_for_specifier(referrer),
|
||||
self.config.tree.root_import_map().map(|i| i.as_ref()),
|
||||
self.npm.node_resolver.as_deref(),
|
||||
self.npm.resolver.as_deref(),
|
||||
)
|
||||
|
@ -2327,7 +2314,7 @@ impl Inner {
|
|||
&self.jsr_search_api,
|
||||
&self.npm.search_api,
|
||||
&self.documents,
|
||||
self.config.tree.import_map_for_specifier(&specifier),
|
||||
self.config.tree.root_import_map().map(|i| i.as_ref()),
|
||||
)
|
||||
.await;
|
||||
}
|
||||
|
@ -3112,7 +3099,7 @@ impl tower_lsp::LanguageServer for LanguageServer {
|
|||
}
|
||||
|
||||
let mut config_events = vec![];
|
||||
for (scope_uri, config_data) in ls.config.tree.data_by_scope() {
|
||||
for (scope_uri, config_data) in ls.config.tree.data_by_scope().iter() {
|
||||
if let Some(config_file) = &config_data.config_file {
|
||||
config_events.push(lsp_custom::DenoConfigurationChangeEvent {
|
||||
scope_uri: scope_uri.clone(),
|
||||
|
@ -3493,7 +3480,7 @@ impl Inner {
|
|||
let mark = self
|
||||
.performance
|
||||
.mark_with_args("lsp.cache", (&specifiers, &referrer));
|
||||
let config_data = self.config.tree.data_for_specifier(&referrer);
|
||||
let config_data = self.config.tree.root_data();
|
||||
let roots = if !specifiers.is_empty() {
|
||||
specifiers
|
||||
} else {
|
||||
|
@ -3508,7 +3495,7 @@ impl Inner {
|
|||
unsafely_ignore_certificate_errors: workspace_settings
|
||||
.unsafely_ignore_certificate_errors
|
||||
.clone(),
|
||||
import_map_path: config_data.as_ref().and_then(|d| {
|
||||
import_map_path: config_data.and_then(|d| {
|
||||
if d.import_map_from_settings {
|
||||
return Some(d.import_map.as_ref()?.base_url().to_string());
|
||||
}
|
||||
|
@ -3516,7 +3503,6 @@ impl Inner {
|
|||
}),
|
||||
node_modules_dir: Some(
|
||||
config_data
|
||||
.as_ref()
|
||||
.and_then(|d| d.node_modules_dir.as_ref())
|
||||
.is_some(),
|
||||
),
|
||||
|
@ -3525,13 +3511,9 @@ impl Inner {
|
|||
..Default::default()
|
||||
},
|
||||
self.initial_cwd.clone(),
|
||||
config_data
|
||||
.as_ref()
|
||||
.and_then(|d| d.config_file.as_deref().cloned()),
|
||||
config_data.as_ref().and_then(|d| d.lockfile.clone()),
|
||||
config_data
|
||||
.as_ref()
|
||||
.and_then(|d| d.package_json.as_deref().cloned()),
|
||||
config_data.and_then(|d| d.config_file.as_deref().cloned()),
|
||||
config_data.and_then(|d| d.lockfile.clone()),
|
||||
config_data.and_then(|d| d.package_json.as_deref().cloned()),
|
||||
force_global_cache,
|
||||
)?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue