summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/deno_error.rs4
-rw-r--r--core/module_specifier.rs36
-rw-r--r--tests/error_011_bad_module_specifier.ts.out2
-rw-r--r--tests/error_012_bad_dynamic_import_specifier.ts.out2
4 files changed, 24 insertions, 20 deletions
diff --git a/cli/deno_error.rs b/cli/deno_error.rs
index ebcda1c8e..2bc021f52 100644
--- a/cli/deno_error.rs
+++ b/cli/deno_error.rs
@@ -118,8 +118,8 @@ impl GetErrorKind for ModuleResolutionError {
use ModuleResolutionError::*;
match self {
InvalidUrl(ref err) | InvalidBaseUrl(ref err) => err.kind(),
- InvalidPath => ErrorKind::InvalidPath,
- ImportPrefixMissing => ErrorKind::ImportPrefixMissing,
+ InvalidPath(_) => ErrorKind::InvalidPath,
+ ImportPrefixMissing(_) => ErrorKind::ImportPrefixMissing,
}
}
}
diff --git a/core/module_specifier.rs b/core/module_specifier.rs
index 957705426..631b0c924 100644
--- a/core/module_specifier.rs
+++ b/core/module_specifier.rs
@@ -1,16 +1,17 @@
use std::env::current_dir;
use std::error::Error;
use std::fmt;
+use std::path::PathBuf;
use url::ParseError;
use url::Url;
/// Error indicating the reason resolving a module specifier failed.
-#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+#[derive(Clone, Debug, Eq, PartialEq)]
pub enum ModuleResolutionError {
InvalidUrl(ParseError),
InvalidBaseUrl(ParseError),
- InvalidPath,
- ImportPrefixMissing,
+ InvalidPath(PathBuf),
+ ImportPrefixMissing(String),
}
use ModuleResolutionError::*;
@@ -30,10 +31,12 @@ impl fmt::Display for ModuleResolutionError {
InvalidBaseUrl(ref err) => {
write!(f, "invalid base URL for relative import: {}", err)
}
- InvalidPath => write!(f, "invalid module path"),
- ImportPrefixMissing => {
- write!(f, "relative import path not prefixed with / or ./ or ../")
- }
+ InvalidPath(ref path) => write!(f, "invalid module path: {:?}", path),
+ ImportPrefixMissing(ref specifier) => write!(
+ f,
+ "relative import path \"{}\" not prefixed with / or ./ or ../",
+ specifier
+ ),
}
}
}
@@ -67,7 +70,7 @@ impl ModuleSpecifier {
|| specifier.starts_with("./")
|| specifier.starts_with("../")) =>
{
- Err(ImportPrefixMissing)?
+ Err(ImportPrefixMissing(specifier.to_string()))?
}
// 3. Return the result of applying the URL parser to specifier with base
@@ -119,9 +122,9 @@ impl ModuleSpecifier {
path_str: &str,
) -> Result<ModuleSpecifier, ModuleResolutionError> {
let path = current_dir().unwrap().join(path_str);
- Url::from_file_path(path)
+ Url::from_file_path(path.clone())
.map(ModuleSpecifier)
- .map_err(|()| ModuleResolutionError::InvalidPath)
+ .map_err(|()| ModuleResolutionError::InvalidPath(path))
}
/// Returns true if the input string starts with a sequence of characters
@@ -260,27 +263,27 @@ mod tests {
(
"005_more_imports.ts",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing,
+ ImportPrefixMissing("005_more_imports.ts".to_string()),
),
(
".tomato",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing,
+ ImportPrefixMissing(".tomato".to_string()),
),
(
"..zucchini.mjs",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing,
+ ImportPrefixMissing("..zucchini.mjs".to_string()),
),
(
r".\yam.es",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing,
+ ImportPrefixMissing(r".\yam.es".to_string()),
),
(
r"..\yam.es",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing,
+ ImportPrefixMissing(r"..\yam.es".to_string()),
),
(
"https://eggplant:b/c",
@@ -409,7 +412,8 @@ mod tests {
("https://:8080/a/b/c", InvalidUrl(EmptyHost)),
];
if cfg!(target_os = "windows") {
- tests.push((r"\\.\c:/stuff/deno/script.ts", InvalidPath));
+ let p = r"\\.\c:/stuff/deno/script.ts";
+ tests.push((p, InvalidPath(PathBuf::from(p))));
}
for (specifier, expected_err) in tests {
diff --git a/tests/error_011_bad_module_specifier.ts.out b/tests/error_011_bad_module_specifier.ts.out
index 468885ba0..fa02d6df5 100644
--- a/tests/error_011_bad_module_specifier.ts.out
+++ b/tests/error_011_bad_module_specifier.ts.out
@@ -1,4 +1,4 @@
-[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path not prefixed with / or ./ or ../
+[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "bad-module.ts" not prefixed with / or ./ or ../
[WILDCARD] js/errors.ts:[WILDCARD]
at DenoError (js/errors.ts:[WILDCARD])
at maybeError (js/errors.ts:[WILDCARD])
diff --git a/tests/error_012_bad_dynamic_import_specifier.ts.out b/tests/error_012_bad_dynamic_import_specifier.ts.out
index 108416db1..7417498e6 100644
--- a/tests/error_012_bad_dynamic_import_specifier.ts.out
+++ b/tests/error_012_bad_dynamic_import_specifier.ts.out
@@ -1,4 +1,4 @@
-[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path not prefixed with / or ./ or ../
+[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "bad-module.ts" not prefixed with / or ./ or ../
[WILDCARD] js/errors.ts:[WILDCARD]
at DenoError (js/errors.ts:[WILDCARD])
at maybeError (js/errors.ts:[WILDCARD])