1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00

Better error message for bad filename CLI argument.

This commit is contained in:
Ryan Dahl 2019-02-02 01:58:53 -05:00
parent 98d20cd178
commit 4b61170e22
7 changed files with 42 additions and 25 deletions

View file

@ -180,6 +180,7 @@ pub fn permission_denied() -> DenoError {
) )
} }
#[derive(Debug)]
pub enum RustOrJsError { pub enum RustOrJsError {
Rust(DenoError), Rust(DenoError),
Js(JSError), Js(JSError),
@ -196,3 +197,12 @@ impl From<JSError> for RustOrJsError {
RustOrJsError::Js(e) RustOrJsError::Js(e)
} }
} }
impl fmt::Display for RustOrJsError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
RustOrJsError::Rust(e) => e.fmt(f),
RustOrJsError::Js(e) => e.fmt(f),
}
}
}

View file

@ -404,17 +404,19 @@ impl Isolate {
&mut self, &mut self,
js_filename: &str, js_filename: &str,
is_prefetch: bool, is_prefetch: bool,
) -> Result<(), JSError> { ) -> Result<(), RustOrJsError> {
let out = let out = code_fetch_and_maybe_compile(&self.state, js_filename, ".")
code_fetch_and_maybe_compile(&self.state, js_filename, ".").unwrap(); .map_err(RustOrJsError::from)?;
let id = self.mod_new(out.filename.clone(), out.js_source())?; let id = self
.mod_new(out.filename.clone(), out.js_source())
.map_err(RustOrJsError::from)?;
self.mod_load_deps(id).ok(); self.mod_load_deps(id)?;
self.mod_instantiate(id)?; self.mod_instantiate(id).map_err(RustOrJsError::from)?;
if !is_prefetch { if !is_prefetch {
self.mod_evaluate(id)?; self.mod_evaluate(id).map_err(RustOrJsError::from)?;
} }
Ok(()) Ok(())
} }

View file

@ -14,6 +14,7 @@ use source_map_mappings::parse_mappings;
use source_map_mappings::Bias; use source_map_mappings::Bias;
use source_map_mappings::Mappings; use source_map_mappings::Mappings;
use std::collections::HashMap; use std::collections::HashMap;
use std::fmt;
pub trait SourceMapGetter { pub trait SourceMapGetter {
/// Returns the raw source map file. /// Returns the raw source map file.
@ -73,39 +74,34 @@ impl ToString for StackFrame {
} }
} }
impl ToString for JSError { impl fmt::Display for JSError {
fn to_string(&self) -> String { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// TODO Improve the formatting of these error messages.
let mut s = String::new();
if self.script_resource_name.is_some() { if self.script_resource_name.is_some() {
let script_resource_name = self.script_resource_name.as_ref().unwrap(); let script_resource_name = self.script_resource_name.as_ref().unwrap();
// Avoid showing internal code from gen/bundle/main.js // Avoid showing internal code from gen/bundle/main.js
if script_resource_name != "gen/bundle/main.js" { if script_resource_name != "gen/bundle/main.js" {
s.push_str(script_resource_name); write!(f, "{}", script_resource_name)?;
if self.line_number.is_some() { if self.line_number.is_some() {
s.push_str(&format!( write!(
f,
":{}:{}", ":{}:{}",
self.line_number.unwrap(), self.line_number.unwrap(),
self.start_column.unwrap() self.start_column.unwrap()
)); )?;
assert!(self.start_column.is_some()); assert!(self.start_column.is_some());
} }
if self.source_line.is_some() { if self.source_line.is_some() {
s.push_str("\n"); write!(f, "\n{}\n\n", self.source_line.as_ref().unwrap())?;
s.push_str(self.source_line.as_ref().unwrap());
s.push_str("\n\n");
} }
} }
} }
s.push_str(&self.message); write!(f, "{}", &self.message)?;
for frame in &self.frames { for frame in &self.frames {
s.push_str("\n"); write!(f, "\n{}", &frame.to_string())?;
s.push_str(&frame.to_string());
} }
s Ok(())
} }
} }

View file

@ -55,7 +55,7 @@ impl log::Log for Logger {
fn flush(&self) {} fn flush(&self) {}
} }
fn print_err_and_exit(err: js_errors::JSError) { fn print_err_and_exit(err: errors::RustOrJsError) {
eprintln!("{}", err.to_string()); eprintln!("{}", err.to_string());
std::process::exit(1); std::process::exit(1);
} }
@ -100,6 +100,7 @@ fn main() {
// Setup runtime. // Setup runtime.
isolate isolate
.execute("denoMain();") .execute("denoMain();")
.map_err(errors::RustOrJsError::from)
.unwrap_or_else(print_err_and_exit); .unwrap_or_else(print_err_and_exit);
// Execute input file. // Execute input file.
@ -110,6 +111,9 @@ fn main() {
.unwrap_or_else(print_err_and_exit); .unwrap_or_else(print_err_and_exit);
} }
isolate.event_loop().unwrap_or_else(print_err_and_exit); isolate
.event_loop()
.map_err(errors::RustOrJsError::from)
.unwrap_or_else(print_err_and_exit);
}); });
} }

View file

@ -1 +1 @@
Uncaught Cannot resolve module "./bad-module.js" from "[WILDCARD]error_009_missing_js_module.js" Cannot resolve module "./bad-module.js" from "[WILDCARD]error_009_missing_js_module.js"

View file

@ -0,0 +1 @@
[WILDCARD]Cannot resolve module "not-a-valid-filename.ts" from "."

View file

@ -0,0 +1,4 @@
args: not-a-valid-filename.ts
output: tests/error_010_nonexistent_arg.out
exit_code: 1
check_stderr: true