summaryrefslogtreecommitdiff
path: root/cli/graph_util.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-12-08 09:57:06 -0500
committerGitHub <noreply@github.com>2023-12-08 09:57:06 -0500
commitddfbe71cedbfe2ac31dbc7dbcf25761e5a7a1dce (patch)
treec25bc149f07c8f19b8cbf9029d97c7135425f57c /cli/graph_util.rs
parent6596912d5ae824bf68452f824a20e74d58a2e365 (diff)
feat(lsp): provide quick fixes for specifiers that could be resolved sloppily (#21506)
Diffstat (limited to 'cli/graph_util.rs')
-rw-r--r--cli/graph_util.rs97
1 files changed, 6 insertions, 91 deletions
diff --git a/cli/graph_util.rs b/cli/graph_util.rs
index eba88e4d0..95351ba86 100644
--- a/cli/graph_util.rs
+++ b/cli/graph_util.rs
@@ -12,7 +12,6 @@ use crate::errors::get_error_class_name;
use crate::file_fetcher::FileFetcher;
use crate::npm::CliNpmResolver;
use crate::resolver::CliGraphResolver;
-use crate::resolver::SloppyImportsResolution;
use crate::resolver::SloppyImportsResolver;
use crate::tools::check;
use crate::tools::check::TypeChecker;
@@ -20,7 +19,6 @@ use crate::util::file_watcher::WatcherCommunicator;
use crate::util::sync::TaskQueue;
use crate::util::sync::TaskQueuePermit;
-use deno_ast::MediaType;
use deno_core::anyhow::bail;
use deno_core::anyhow::Context;
use deno_core::error::custom_error;
@@ -61,7 +59,7 @@ pub struct GraphValidOptions {
/// error statically reachable from `roots` and not a dynamic import.
pub fn graph_valid_with_cli_options(
graph: &ModuleGraph,
- fs: &Arc<dyn FileSystem>,
+ fs: &dyn FileSystem,
roots: &[ModuleSpecifier],
options: &CliOptions,
) -> Result<(), AnyError> {
@@ -86,7 +84,7 @@ pub fn graph_valid_with_cli_options(
/// for the CLI.
pub fn graph_valid(
graph: &ModuleGraph,
- fs: &Arc<dyn FileSystem>,
+ fs: &dyn FileSystem,
roots: &[ModuleSpecifier],
options: GraphValidOptions,
) -> Result<(), AnyError> {
@@ -366,7 +364,7 @@ impl ModuleGraphBuilder {
let graph = Arc::new(graph);
graph_valid_with_cli_options(
&graph,
- &self.fs,
+ self.fs.as_ref(),
&graph.roots,
&self.options,
)?;
@@ -538,12 +536,13 @@ pub fn enhanced_resolution_error_message(error: &ResolutionError) -> String {
}
pub fn enhanced_module_error_message(
- fs: &Arc<dyn FileSystem>,
+ fs: &dyn FileSystem,
error: &ModuleError,
) -> String {
let additional_message = match error {
ModuleError::Missing(specifier, _) => {
- maybe_sloppy_imports_suggestion_message(fs, specifier)
+ SloppyImportsResolver::resolve_with_fs(fs, specifier)
+ .as_suggestion_message()
}
_ => None,
};
@@ -557,48 +556,6 @@ pub fn enhanced_module_error_message(
}
}
-pub fn maybe_sloppy_imports_suggestion_message(
- fs: &Arc<dyn FileSystem>,
- original_specifier: &ModuleSpecifier,
-) -> Option<String> {
- let sloppy_imports_resolver = SloppyImportsResolver::new(fs.clone());
- let resolution = sloppy_imports_resolver.resolve(original_specifier);
- sloppy_import_resolution_to_suggestion_message(&resolution)
-}
-
-fn sloppy_import_resolution_to_suggestion_message(
- resolution: &SloppyImportsResolution,
-) -> Option<String> {
- match resolution {
- SloppyImportsResolution::None(_) => None,
- SloppyImportsResolution::JsToTs(specifier) => {
- let media_type = MediaType::from_specifier(specifier);
- Some(format!(
- "Maybe change the extension to '{}'",
- media_type.as_ts_extension()
- ))
- }
- SloppyImportsResolution::NoExtension(specifier) => {
- let media_type = MediaType::from_specifier(specifier);
- Some(format!(
- "Maybe add a '{}' extension",
- media_type.as_ts_extension()
- ))
- }
- SloppyImportsResolution::Directory(specifier) => {
- let file_name = specifier
- .path()
- .rsplit_once('/')
- .map(|(_, file_name)| file_name)
- .unwrap_or(specifier.path());
- Some(format!(
- "Maybe specify path to '{}' file in directory instead",
- file_name
- ))
- }
- }
-}
-
pub fn get_resolution_error_bare_node_specifier(
error: &ResolutionError,
) -> Option<&str> {
@@ -972,46 +929,4 @@ mod test {
assert_eq!(get_resolution_error_bare_node_specifier(&err), output,);
}
}
-
- #[test]
- fn test_sloppy_import_resolution_to_message() {
- // none
- let url = ModuleSpecifier::parse("file:///dir/index.js").unwrap();
- assert_eq!(
- sloppy_import_resolution_to_suggestion_message(
- &SloppyImportsResolution::None(&url)
- ),
- None,
- );
- // directory
- assert_eq!(
- sloppy_import_resolution_to_suggestion_message(
- &SloppyImportsResolution::Directory(
- ModuleSpecifier::parse("file:///dir/index.js").unwrap()
- )
- )
- .unwrap(),
- "Maybe specify path to 'index.js' file in directory instead"
- );
- // no ext
- assert_eq!(
- sloppy_import_resolution_to_suggestion_message(
- &SloppyImportsResolution::NoExtension(
- ModuleSpecifier::parse("file:///dir/index.mjs").unwrap()
- )
- )
- .unwrap(),
- "Maybe add a '.mjs' extension"
- );
- // js to ts
- assert_eq!(
- sloppy_import_resolution_to_suggestion_message(
- &SloppyImportsResolution::JsToTs(
- ModuleSpecifier::parse("file:///dir/index.mts").unwrap()
- )
- )
- .unwrap(),
- "Maybe change the extension to '.mts'"
- );
- }
}