Skip to content

Commit

Permalink
fixup! [CLI] Add clever error support to Sui CLI
Browse files Browse the repository at this point in the history
  • Loading branch information
tzakian committed Jun 13, 2024
1 parent 7db6b4e commit dec5d17
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 13 deletions.
1 change: 0 additions & 1 deletion crates/sui-package-resolver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ use move_command_line_common::display::RenderResult;
use move_command_line_common::{display::try_render_constant, error_bitset::ErrorBitset};
use move_core_types::annotated_value::MoveEnumLayout;
use move_core_types::language_storage::ModuleId;
use std::collections::btree_map::Entry;
use std::collections::BTreeSet;
use std::num::NonZeroUsize;
use std::sync::{Arc, Mutex};
Expand Down
33 changes: 27 additions & 6 deletions crates/sui/src/clever_error_rendering.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,12 @@ fn parse_abort_status_string(
let re = Regex::new(r"MoveAbort.*address:\s*(.*?),.*Identifier...(.*?)\\.*instruction:\s+(\d+),.*function_name:\s*Some...(\w+?)\\.*},\s*(\d+).*in command\s*(\d+)").unwrap();
let captures = re.captures(s).unwrap();

let address = AccountAddress::from_hex(captures.get(1).unwrap().as_str())?;
let module_name = Identifier::new(captures.get(2).unwrap().as_str())?;
let instruction = captures.get(3).unwrap().as_str().parse::<u16>()?;
let function_name = Identifier::new(captures.get(4).unwrap().as_str())?;
let abort_code = captures.get(5).unwrap().as_str().parse::<u64>()?;
let command_index = captures.get(6).unwrap().as_str().parse::<u16>()?;
let address = AccountAddress::from_hex(&captures[1])?;
let module_name = Identifier::new(&captures[2])?;
let instruction = captures[3].parse::<u16>()?;
let function_name = Identifier::new(&captures[4])?;
let abort_code = captures[5].parse::<u64>()?;
let command_index = captures[6].parse::<u16>()?;
Ok((
address,
module_name,
Expand All @@ -129,3 +129,24 @@ fn parse_abort_status_string(
command_index,
))
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_parse_abort_status_string() {
let corpus = vec![
r#"Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 0, instruction: 1, function_name: Some(\"aborter\") }, 0) in command 0" }"#,
r#"Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 1, instruction: 1, function_name: Some(\"aborter_line_no\") }, 9223372105574252543) in command 0" }"#,
r#"Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 2, instruction: 1, function_name: Some(\"clever_aborter\") }, 9223372118459154433) in command 0" }"#,
r#"Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 3, instruction: 1, function_name: Some(\"clever_aborter_not_a_string\") }, 9223372135639154691) in command 0" }"#,
];
let parsed: Vec<_> = corpus.into_iter().map(|c| {
let (address, module_name, function_name, instruction, abort_code, command_index) =
parse_abort_status_string(c).unwrap();
format!("original abort message: {}\n address: {}\n module_name: {}\n function_name: {}\n instruction: {}\n abort_code: {}\n command_index: {}", c, address, module_name, function_name, instruction, abort_code, command_index)
}).collect();
insta::assert_snapshot!(parsed.join("\n------\n"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
source: crates/sui/src/clever_error_rendering.rs
expression: "parsed.join(\"\\n------\\n\")"
---
original abort message: Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 0, instruction: 1, function_name: Some(\"aborter\") }, 0) in command 0" }
address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20
module_name: clever_errors
function_name: aborter
instruction: 1
abort_code: 0
command_index: 0
------
original abort message: Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 1, instruction: 1, function_name: Some(\"aborter_line_no\") }, 9223372105574252543) in command 0" }
address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20
module_name: clever_errors
function_name: aborter_line_no
instruction: 1
abort_code: 9223372105574252543
command_index: 0
------
original abort message: Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 2, instruction: 1, function_name: Some(\"clever_aborter\") }, 9223372118459154433) in command 0" }
address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20
module_name: clever_errors
function_name: clever_aborter
instruction: 1
abort_code: 9223372118459154433
command_index: 0
------
original abort message: Failure { error: "MoveAbort(MoveLocation { module: ModuleId { address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20, name: Identifier(\"clever_errors\") }, function: 3, instruction: 1, function_name: Some(\"clever_aborter_not_a_string\") }, 9223372135639154691) in command 0" }
address: 60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20
module_name: clever_errors
function_name: clever_aborter_not_a_string
instruction: 1
abort_code: 9223372135639154691
command_index: 0
8 changes: 4 additions & 4 deletions crates/sui/tests/snapshots/cli_tests__body_fn.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ expression: "format!(\"Non-clever-abort\\n---\\n{}\\n---\\nLine-only-abort\\n---
---
Non-clever-abort
---
Error executing transaction: 1st command aborted within function '0xc9d9682e45a4291cf2c7d86486f604fe19451bb367cc9fa4f2149eb5f1efac8a::clever_errors::aborter' at instruction 1 with code 0
Error executing transaction: 1st command aborted within function '0x60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20::clever_errors::aborter' at instruction 1 with code 0
---
Line-only-abort
---
Error executing transaction: 1st command aborted within function '0xc9d9682e45a4291cf2c7d86486f604fe19451bb367cc9fa4f2149eb5f1efac8a::clever_errors::aborter_line_no' at line 15
Error executing transaction: 1st command aborted within function '0x60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20::clever_errors::aborter_line_no' at line 15
---
Clever-error-utf8
---
Error executing transaction: 1st command aborted within function '0xc9d9682e45a4291cf2c7d86486f604fe19451bb367cc9fa4f2149eb5f1efac8a::clever_errors::clever_aborter' at line 19. Aborted with 'ENotFound' -- 'Element not found in vector 💥 🚀 🌠'
Error executing transaction: 1st command aborted within function '0x60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20::clever_errors::clever_aborter' at line 19. Aborted with 'ENotFound' -- 'Element not found in vector 💥 🚀 🌠'
---
Clever-error-non-utf8
---
Error executing transaction: 1st command aborted within function '0xc9d9682e45a4291cf2c7d86486f604fe19451bb367cc9fa4f2149eb5f1efac8a::clever_errors::clever_aborter_not_a_string' at line 23. Aborted with 'ENotAString' -- 'BAEAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAQAAAAAAAAA'
Error executing transaction: 1st command aborted within function '0x60197a0c146e31dd12689e890208767fe2fefb2f726710b4a9fa0b857f7a2c20::clever_errors::clever_aborter_not_a_string' at line 23. Aborted with 'ENotAString' -- 'BAEAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAQAAAAAAAAA'
---

Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ public af(): u32 {
B0:
0: LdConst[1](u32: 0)
1: Ret

}
public sf(): vector<u8> {
B0:
0: LdConst[2](vector<u8>: "Thi..)
1: Ret

}
public nf(): vector<u16> {
B0:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ pub fn try_render_constant(constant: &Constant) -> RenderResult {

SignatureToken::Signer
| SignatureToken::Vector(_)
| SignatureToken::Struct(_)
| SignatureToken::StructInstantiation(_)
| SignatureToken::Datatype(_)
| SignatureToken::DatatypeInstantiation(_)
| SignatureToken::Reference(_)
| SignatureToken::MutableReference(_)
| SignatureToken::TypeParameter(_) => RenderResult::NotRendered,
Expand Down

0 comments on commit dec5d17

Please sign in to comment.