summaryrefslogtreecommitdiff
path: root/cli/deno_error.rs
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2019-06-30 19:45:59 +0200
committerBert Belder <bertbelder@gmail.com>2019-06-30 19:46:32 +0200
commit32cde32e54a0c8c73b7bc3da9a3ade8d739cc0b5 (patch)
treeca39f7f51e38bb84f6869cc12e0c6fa8af783b87 /cli/deno_error.rs
parent9d18f97327e94ecf6fd0ae7b75a88abfeac07d7e (diff)
core: return useful error when import path has no prefix like ./
Diffstat (limited to 'cli/deno_error.rs')
-rw-r--r--cli/deno_error.rs56
1 files changed, 39 insertions, 17 deletions
diff --git a/cli/deno_error.rs b/cli/deno_error.rs
index 6e14f3902..2e683c504 100644
--- a/cli/deno_error.rs
+++ b/cli/deno_error.rs
@@ -7,6 +7,7 @@ use crate::resolve_addr::ResolveAddrError;
use crate::source_maps::apply_source_map;
use crate::source_maps::SourceMapGetter;
use deno::JSError;
+use deno::ModuleResolutionError;
use hyper;
#[cfg(unix)]
use nix::{errno::Errno, Error as UnixError};
@@ -30,6 +31,7 @@ enum Repr {
UrlErr(url::ParseError),
HyperErr(hyper::Error),
ImportMapErr(import_map::ImportMapError),
+ ModuleResolutionErr(ModuleResolutionError),
Diagnostic(diagnostics::Diagnostic),
JSError(JSError),
}
@@ -42,6 +44,24 @@ pub fn new(kind: ErrorKind, msg: String) -> DenoError {
}
impl DenoError {
+ fn url_error_kind(err: url::ParseError) -> ErrorKind {
+ use url::ParseError::*;
+ match err {
+ EmptyHost => ErrorKind::EmptyHost,
+ IdnaError => ErrorKind::IdnaError,
+ InvalidPort => ErrorKind::InvalidPort,
+ InvalidIpv4Address => ErrorKind::InvalidIpv4Address,
+ InvalidIpv6Address => ErrorKind::InvalidIpv6Address,
+ InvalidDomainCharacter => ErrorKind::InvalidDomainCharacter,
+ RelativeUrlWithoutBase => ErrorKind::RelativeUrlWithoutBase,
+ RelativeUrlWithCannotBeABaseBase => {
+ ErrorKind::RelativeUrlWithCannotBeABaseBase
+ }
+ SetHostOnCannotBeABaseUrl => ErrorKind::SetHostOnCannotBeABaseUrl,
+ Overflow => ErrorKind::Overflow,
+ }
+ }
+
pub fn kind(&self) -> ErrorKind {
match self.repr {
Repr::Simple(kind, ref _msg) => kind,
@@ -70,23 +90,7 @@ impl DenoError {
_ => unreachable!(),
}
}
- Repr::UrlErr(ref err) => {
- use url::ParseError::*;
- match err {
- EmptyHost => ErrorKind::EmptyHost,
- IdnaError => ErrorKind::IdnaError,
- InvalidPort => ErrorKind::InvalidPort,
- InvalidIpv4Address => ErrorKind::InvalidIpv4Address,
- InvalidIpv6Address => ErrorKind::InvalidIpv6Address,
- InvalidDomainCharacter => ErrorKind::InvalidDomainCharacter,
- RelativeUrlWithoutBase => ErrorKind::RelativeUrlWithoutBase,
- RelativeUrlWithCannotBeABaseBase => {
- ErrorKind::RelativeUrlWithCannotBeABaseBase
- }
- SetHostOnCannotBeABaseUrl => ErrorKind::SetHostOnCannotBeABaseUrl,
- Overflow => ErrorKind::Overflow,
- }
- }
+ Repr::UrlErr(err) => Self::url_error_kind(err),
Repr::HyperErr(ref err) => {
// For some reason hyper::errors::Kind is private.
if err.is_parse() {
@@ -102,6 +106,13 @@ impl DenoError {
}
}
Repr::ImportMapErr(ref _err) => ErrorKind::ImportMapError,
+ Repr::ModuleResolutionErr(err) => {
+ use ModuleResolutionError::*;
+ match err {
+ InvalidUrl(err) | InvalidBaseUrl(err) => Self::url_error_kind(err),
+ ImportPathPrefixMissing => ErrorKind::ImportPathPrefixMissing,
+ }
+ }
Repr::Diagnostic(ref _err) => ErrorKind::Diagnostic,
Repr::JSError(ref _err) => ErrorKind::JSError,
}
@@ -126,6 +137,7 @@ impl fmt::Display for DenoError {
Repr::UrlErr(ref err) => err.fmt(f),
Repr::HyperErr(ref err) => err.fmt(f),
Repr::ImportMapErr(ref err) => f.pad(&err.msg),
+ Repr::ModuleResolutionErr(ref err) => err.fmt(f),
Repr::Diagnostic(ref err) => err.fmt(f),
Repr::JSError(ref err) => JSErrorColor(err).fmt(f),
}
@@ -140,6 +152,7 @@ impl std::error::Error for DenoError {
Repr::UrlErr(ref err) => err.description(),
Repr::HyperErr(ref err) => err.description(),
Repr::ImportMapErr(ref err) => &err.msg,
+ Repr::ModuleResolutionErr(ref err) => err.description(),
Repr::Diagnostic(ref err) => &err.items[0].message,
Repr::JSError(ref err) => &err.description(),
}
@@ -152,6 +165,7 @@ impl std::error::Error for DenoError {
Repr::UrlErr(ref err) => Some(err),
Repr::HyperErr(ref err) => Some(err),
Repr::ImportMapErr(ref _err) => None,
+ Repr::ModuleResolutionErr(ref err) => err.source(),
Repr::Diagnostic(ref _err) => None,
Repr::JSError(ref err) => Some(err),
}
@@ -241,6 +255,14 @@ impl From<import_map::ImportMapError> for DenoError {
}
}
+impl From<ModuleResolutionError> for DenoError {
+ fn from(err: ModuleResolutionError) -> Self {
+ Self {
+ repr: Repr::ModuleResolutionErr(err),
+ }
+ }
+}
+
impl From<diagnostics::Diagnostic> for DenoError {
fn from(diagnostic: diagnostics::Diagnostic) -> Self {
Self {