summaryrefslogtreecommitdiff
path: root/core/module_specifier.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/module_specifier.rs')
-rw-r--r--core/module_specifier.rs52
1 files changed, 40 insertions, 12 deletions
diff --git a/core/module_specifier.rs b/core/module_specifier.rs
index dbab0ce9b..ad24616ff 100644
--- a/core/module_specifier.rs
+++ b/core/module_specifier.rs
@@ -11,7 +11,7 @@ pub enum ModuleResolutionError {
InvalidUrl(ParseError),
InvalidBaseUrl(ParseError),
InvalidPath(PathBuf),
- ImportPrefixMissing(String),
+ ImportPrefixMissing(String, Option<String>),
}
use ModuleResolutionError::*;
@@ -32,11 +32,19 @@ impl fmt::Display for ModuleResolutionError {
write!(f, "invalid base URL for relative import: {}", err)
}
InvalidPath(ref path) => write!(f, "invalid module path: {:?}", path),
- ImportPrefixMissing(ref specifier) => write!(
- f,
- "relative import path \"{}\" not prefixed with / or ./ or ../",
- specifier
- ),
+ ImportPrefixMissing(ref specifier, ref maybe_referrer) => {
+ let msg = format!(
+ "relative import path \"{}\" not prefixed with / or ./ or ../",
+ specifier
+ );
+ let msg = if let Some(referrer) = maybe_referrer {
+ format!("{} Imported from \"{}\"", msg, referrer)
+ } else {
+ msg
+ };
+
+ write!(f, "{}", msg)
+ }
}
}
}
@@ -78,7 +86,12 @@ impl ModuleSpecifier {
|| specifier.starts_with("./")
|| specifier.starts_with("../")) =>
{
- return Err(ImportPrefixMissing(specifier.to_string()))
+ let maybe_referrer = if base.is_empty() {
+ None
+ } else {
+ Some(base.to_string())
+ };
+ return Err(ImportPrefixMissing(specifier.to_string(), maybe_referrer));
}
// 3. Return the result of applying the URL parser to specifier with base
@@ -282,27 +295,42 @@ mod tests {
(
"005_more_imports.ts",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing("005_more_imports.ts".to_string()),
+ ImportPrefixMissing(
+ "005_more_imports.ts".to_string(),
+ Some("http://deno.land/core/tests/006_url_imports.ts".to_string()),
+ ),
),
(
".tomato",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing(".tomato".to_string()),
+ ImportPrefixMissing(
+ ".tomato".to_string(),
+ Some("http://deno.land/core/tests/006_url_imports.ts".to_string()),
+ ),
),
(
"..zucchini.mjs",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing("..zucchini.mjs".to_string()),
+ ImportPrefixMissing(
+ "..zucchini.mjs".to_string(),
+ Some("http://deno.land/core/tests/006_url_imports.ts".to_string()),
+ ),
),
(
r".\yam.es",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing(r".\yam.es".to_string()),
+ ImportPrefixMissing(
+ r".\yam.es".to_string(),
+ Some("http://deno.land/core/tests/006_url_imports.ts".to_string()),
+ ),
),
(
r"..\yam.es",
"http://deno.land/core/tests/006_url_imports.ts",
- ImportPrefixMissing(r"..\yam.es".to_string()),
+ ImportPrefixMissing(
+ r"..\yam.es".to_string(),
+ Some("http://deno.land/core/tests/006_url_imports.ts".to_string()),
+ ),
),
(
"https://eggplant:b/c",