summaryrefslogtreecommitdiff
path: root/cli/tools/repl/session.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools/repl/session.rs')
-rw-r--r--cli/tools/repl/session.rs113
1 files changed, 66 insertions, 47 deletions
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs
index 3b30a140d..b636a4949 100644
--- a/cli/tools/repl/session.rs
+++ b/cli/tools/repl/session.rs
@@ -68,6 +68,17 @@ impl std::fmt::Display for EvaluationOutput {
}
}
+pub fn result_to_evaluation_output(
+ r: Result<EvaluationOutput, AnyError>,
+) -> EvaluationOutput {
+ match r {
+ Ok(value) => value,
+ Err(err) => {
+ EvaluationOutput::Error(format!("{} {}", colors::red("error:"), err))
+ }
+ }
+}
+
struct TsEvaluateResponse {
ts_code: String,
value: cdp::EvaluateResponse,
@@ -169,7 +180,7 @@ impl ReplSession {
pub async fn evaluate_line_and_get_output(
&mut self,
line: &str,
- ) -> Result<EvaluationOutput, AnyError> {
+ ) -> EvaluationOutput {
fn format_diagnostic(diagnostic: &deno_ast::Diagnostic) -> String {
format!(
"{}: {} at {}:{}",
@@ -180,56 +191,64 @@ impl ReplSession {
)
}
- match self.evaluate_line_with_object_wrapping(line).await {
- Ok(evaluate_response) => {
- let cdp::EvaluateResponse {
- result,
- exception_details,
- } = evaluate_response.value;
-
- Ok(if let Some(exception_details) = exception_details {
- self.set_last_thrown_error(&result).await?;
- let description = match exception_details.exception {
- Some(exception) => exception
- .description
- .unwrap_or_else(|| "Unknown exception".to_string()),
- None => "Unknown exception".to_string(),
- };
- EvaluationOutput::Error(format!(
- "{} {}",
- exception_details.text, description
- ))
- } else {
- self
- .language_server
- .commit_text(&evaluate_response.ts_code)
- .await;
-
- self.set_last_eval_result(&result).await?;
- let value = self.get_eval_value(&result).await?;
- EvaluationOutput::Value(value)
- })
- }
- Err(err) => {
- // handle a parsing diagnostic
- match err.downcast_ref::<deno_ast::Diagnostic>() {
- Some(diagnostic) => {
- Ok(EvaluationOutput::Error(format_diagnostic(diagnostic)))
+ async fn inner(
+ session: &mut ReplSession,
+ line: &str,
+ ) -> Result<EvaluationOutput, AnyError> {
+ match session.evaluate_line_with_object_wrapping(line).await {
+ Ok(evaluate_response) => {
+ let cdp::EvaluateResponse {
+ result,
+ exception_details,
+ } = evaluate_response.value;
+
+ Ok(if let Some(exception_details) = exception_details {
+ session.set_last_thrown_error(&result).await?;
+ let description = match exception_details.exception {
+ Some(exception) => exception
+ .description
+ .unwrap_or_else(|| "Unknown exception".to_string()),
+ None => "Unknown exception".to_string(),
+ };
+ EvaluationOutput::Error(format!(
+ "{} {}",
+ exception_details.text, description
+ ))
+ } else {
+ session
+ .language_server
+ .commit_text(&evaluate_response.ts_code)
+ .await;
+
+ session.set_last_eval_result(&result).await?;
+ let value = session.get_eval_value(&result).await?;
+ EvaluationOutput::Value(value)
+ })
+ }
+ Err(err) => {
+ // handle a parsing diagnostic
+ match err.downcast_ref::<deno_ast::Diagnostic>() {
+ Some(diagnostic) => {
+ Ok(EvaluationOutput::Error(format_diagnostic(diagnostic)))
+ }
+ None => match err.downcast_ref::<DiagnosticsError>() {
+ Some(diagnostics) => Ok(EvaluationOutput::Error(
+ diagnostics
+ .0
+ .iter()
+ .map(format_diagnostic)
+ .collect::<Vec<_>>()
+ .join("\n\n"),
+ )),
+ None => Err(err),
+ },
}
- None => match err.downcast_ref::<DiagnosticsError>() {
- Some(diagnostics) => Ok(EvaluationOutput::Error(
- diagnostics
- .0
- .iter()
- .map(format_diagnostic)
- .collect::<Vec<_>>()
- .join("\n\n"),
- )),
- None => Err(err),
- },
}
}
}
+
+ let result = inner(self, line).await;
+ result_to_evaluation_output(result)
}
async fn evaluate_line_with_object_wrapping(