mirror of
https://github.com/denoland/deno.git
synced 2025-01-09 15:48:16 -05:00
better error messages for 'relative import path not prefixed with / or ./ or ../' (#3405)
This commit is contained in:
parent
2a348144c6
commit
9712e0c315
6 changed files with 46 additions and 18 deletions
|
@ -140,7 +140,7 @@ impl GetErrorKind for ModuleResolutionError {
|
||||||
match self {
|
match self {
|
||||||
InvalidUrl(ref err) | InvalidBaseUrl(ref err) => err.kind(),
|
InvalidUrl(ref err) | InvalidBaseUrl(ref err) => err.kind(),
|
||||||
InvalidPath(_) => ErrorKind::InvalidPath,
|
InvalidPath(_) => ErrorKind::InvalidPath,
|
||||||
ImportPrefixMissing(_) => ErrorKind::ImportPrefixMissing,
|
ImportPrefixMissing(_, _) => ErrorKind::ImportPrefixMissing,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "bad-module.ts" not prefixed with / or ./ or ../
|
[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "bad-module.ts" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_011_bad_module_specifier.ts"
|
||||||
[WILDCARD]dispatch_json.ts:[WILDCARD]
|
[WILDCARD]dispatch_json.ts:[WILDCARD]
|
||||||
at DenoError ([WILDCARD]errors.ts:[WILDCARD])
|
at DenoError ([WILDCARD]errors.ts:[WILDCARD])
|
||||||
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
|
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "bad-module.ts" not prefixed with / or ./ or ../
|
[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "bad-module.ts" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_012_bad_dynamic_import_specifier.ts"
|
||||||
[WILDCARD]dispatch_json.ts:[WILDCARD]
|
[WILDCARD]dispatch_json.ts:[WILDCARD]
|
||||||
at DenoError ([WILDCARD]errors.ts:[WILDCARD])
|
at DenoError ([WILDCARD]errors.ts:[WILDCARD])
|
||||||
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
|
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
Caught direct dynamic import error.
|
Caught direct dynamic import error.
|
||||||
TypeError: relative import path "does not exist" not prefixed with / or ./ or ../
|
TypeError: relative import path "does not exist" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_014_catch_dynamic_import_error.js"
|
||||||
|
|
||||||
Caught indirect direct dynamic import error.
|
Caught indirect direct dynamic import error.
|
||||||
TypeError: relative import path "does not exist either" not prefixed with / or ./ or ../
|
TypeError: relative import path "does not exist either" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/indirect_import_error.js"
|
||||||
|
|
||||||
Caught error thrown by dynamically imported module.
|
Caught error thrown by dynamically imported module.
|
||||||
Error: An error
|
Error: An error
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "baz" not prefixed with / or ./ or ../
|
[WILDCARD]error: Uncaught ImportPrefixMissing: relative import path "baz" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/type_definitions/bar.d.ts"
|
||||||
[WILDCARD]dispatch_json.ts:[WILDCARD]
|
[WILDCARD]dispatch_json.ts:[WILDCARD]
|
||||||
at DenoError ([WILDCARD]errors.ts:[WILDCARD])
|
at DenoError ([WILDCARD]errors.ts:[WILDCARD])
|
||||||
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
|
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
|
||||||
|
|
|
@ -11,7 +11,7 @@ pub enum ModuleResolutionError {
|
||||||
InvalidUrl(ParseError),
|
InvalidUrl(ParseError),
|
||||||
InvalidBaseUrl(ParseError),
|
InvalidBaseUrl(ParseError),
|
||||||
InvalidPath(PathBuf),
|
InvalidPath(PathBuf),
|
||||||
ImportPrefixMissing(String),
|
ImportPrefixMissing(String, Option<String>),
|
||||||
}
|
}
|
||||||
use ModuleResolutionError::*;
|
use ModuleResolutionError::*;
|
||||||
|
|
||||||
|
@ -32,11 +32,19 @@ impl fmt::Display for ModuleResolutionError {
|
||||||
write!(f, "invalid base URL for relative import: {}", err)
|
write!(f, "invalid base URL for relative import: {}", err)
|
||||||
}
|
}
|
||||||
InvalidPath(ref path) => write!(f, "invalid module path: {:?}", path),
|
InvalidPath(ref path) => write!(f, "invalid module path: {:?}", path),
|
||||||
ImportPrefixMissing(ref specifier) => write!(
|
ImportPrefixMissing(ref specifier, ref maybe_referrer) => {
|
||||||
f,
|
let msg = format!(
|
||||||
"relative import path \"{}\" not prefixed with / or ./ or ../",
|
"relative import path \"{}\" not prefixed with / or ./ or ../",
|
||||||
specifier
|
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("./")
|
||||||
|| 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
|
// 3. Return the result of applying the URL parser to specifier with base
|
||||||
|
@ -282,27 +295,42 @@ mod tests {
|
||||||
(
|
(
|
||||||
"005_more_imports.ts",
|
"005_more_imports.ts",
|
||||||
"http://deno.land/core/tests/006_url_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",
|
".tomato",
|
||||||
"http://deno.land/core/tests/006_url_imports.ts",
|
"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",
|
"..zucchini.mjs",
|
||||||
"http://deno.land/core/tests/006_url_imports.ts",
|
"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",
|
r".\yam.es",
|
||||||
"http://deno.land/core/tests/006_url_imports.ts",
|
"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",
|
r"..\yam.es",
|
||||||
"http://deno.land/core/tests/006_url_imports.ts",
|
"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",
|
"https://eggplant:b/c",
|
||||||
|
|
Loading…
Reference in a new issue