diff --git a/crates/aiken-lang/src/parser/error.rs b/crates/aiken-lang/src/parser/error.rs index 3fed3993..6434ef23 100644 --- a/crates/aiken-lang/src/parser/error.rs +++ b/crates/aiken-lang/src/parser/error.rs @@ -3,6 +3,7 @@ use crate::{ parser::token::Token, }; use indoc::formatdoc; +use itertools::Itertools; use miette::Diagnostic; use owo_colors::{OwoColorize, Stream::Stdout}; use std::collections::HashSet; @@ -18,6 +19,7 @@ use std::collections::HashSet; "I am looking for one of the following patterns:\n{}", expected .iter() + .sorted() .map(|x| format!( "→ {}", x.to_aiken() @@ -320,7 +322,7 @@ fn fmt_unknown_curve(curve: &String, point: &Option) -> String { } } -#[derive(Debug, Clone, PartialEq, Eq, Hash, Diagnostic, thiserror::Error)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Diagnostic, thiserror::Error)] pub enum Pattern { #[error("I found an unexpected char '{0:?}'.")] #[diagnostic(help("Try removing it!"))] diff --git a/crates/aiken-lang/src/parser/expr/snapshots/expect_unfinished_let.snap b/crates/aiken-lang/src/parser/expr/snapshots/expect_unfinished_let.snap index 2a9b3c48..7efd9f10 100644 --- a/crates/aiken-lang/src/parser/expr/snapshots/expect_unfinished_let.snap +++ b/crates/aiken-lang/src/parser/expr/snapshots/expect_unfinished_let.snap @@ -2,14 +2,4 @@ source: crates/aiken-lang/src/parser/expr/assignment.rs description: "Invalid code (parse error):\n\nlet a =\n// foo\nlet b = 42\n" --- -[ - ParseError { - kind: UnfinishedAssignmentRightHandSide, - span: 0..25, - while_parsing: None, - expected: {}, - label: Some( - "invalid assignment right-hand side", - ), - }, -] +I spotted an unfinished assignment. diff --git a/crates/aiken-lang/src/parser/expr/snapshots/trace_dangling_colons.snap b/crates/aiken-lang/src/parser/expr/snapshots/trace_dangling_colons.snap index 87a82c3e..0a59ac69 100644 --- a/crates/aiken-lang/src/parser/expr/snapshots/trace_dangling_colons.snap +++ b/crates/aiken-lang/src/parser/expr/snapshots/trace_dangling_colons.snap @@ -2,71 +2,4 @@ source: crates/aiken-lang/src/parser/expr/fail_todo_trace.rs description: "Invalid code (parse error):\n\nlet debug = fn() {\n trace \"foo\":\n}\n" --- -[ - ParseError { - kind: Unexpected( - Token( - RightBrace, - ), - ), - span: 34..35, - while_parsing: None, - expected: { - Token( - If, - ), - Token( - Expect, - ), - Token( - Minus, - ), - Token( - When, - ), - Token( - And, - ), - Token( - Or, - ), - Token( - LeftParen, - ), - Token( - Todo, - ), - Token( - LeftSquare, - ), - Token( - NewLineMinus, - ), - Token( - Bang, - ), - Token( - Fail, - ), - Token( - NewLineLeftParen, - ), - Token( - LeftBrace, - ), - Token( - Trace, - ), - Token( - Let, - ), - Token( - Hash, - ), - Token( - Fn, - ), - }, - label: None, - }, -] +I found an unexpected token '}'. diff --git a/crates/aiken-lang/src/parser/expr/when/snapshots/when_guard_deprecation.snap b/crates/aiken-lang/src/parser/expr/when/snapshots/when_guard_deprecation.snap index 086d4032..56f52c57 100644 --- a/crates/aiken-lang/src/parser/expr/when/snapshots/when_guard_deprecation.snap +++ b/crates/aiken-lang/src/parser/expr/when/snapshots/when_guard_deprecation.snap @@ -2,14 +2,4 @@ source: crates/aiken-lang/src/parser/expr/when/mod.rs description: "Invalid code (parse error):\n\nwhen a is {\n 2 if x > 1 -> 3\n _ -> 1\n}\n" --- -[ - ParseError { - kind: DeprecatedWhenClause, - span: 14..29, - while_parsing: None, - expected: {}, - label: Some( - "deprecated", - ), - }, -] +I found a now-deprecated clause guard in a when/is expression. diff --git a/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g1_element.snap b/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g1_element.snap index d7b02650..bd0124f3 100644 --- a/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g1_element.snap +++ b/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g1_element.snap @@ -2,14 +2,4 @@ source: crates/aiken-lang/src/parser/pattern/bytearray.rs description: "Invalid code (parse error):\n\nwhen foo is {\n #\"950dfd33da2682260c76038dfb8bad6e84ae9d599a3c151815945ac1e6ef6b1027cd917f3907479d20d636ce437a41f5\" -> False\n _ -> True\n}\n" --- -[ - ParseError { - kind: PatternMatchOnCurvePoint, - span: 18..132, - while_parsing: None, - expected: {}, - label: Some( - "cannot pattern-match on curve point", - ), - }, -] +I choked on a curve point in a bytearray pattern. diff --git a/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g2_element.snap b/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g2_element.snap index bd7ec372..f5f30e2a 100644 --- a/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g2_element.snap +++ b/crates/aiken-lang/src/parser/pattern/snapshots/pattern_bytearray_g2_element.snap @@ -2,14 +2,4 @@ source: crates/aiken-lang/src/parser/pattern/bytearray.rs description: "Invalid code (parse error):\n\nwhen foo is {\n #\"b0629fa1158c2d23a10413fe91d381a84d25e31d041cd0377d25828498fd02011b35893938ced97535395e4815201e67108bcd4665e0db25d602d76fa791fab706c54abf5e1a9e44b4ac1e6badf3d2ac0328f5e30be341677c8bac5dda7682f1\" -> False\n _ -> True\n}\n" --- -[ - ParseError { - kind: PatternMatchOnCurvePoint, - span: 18..228, - while_parsing: None, - expected: {}, - label: Some( - "cannot pattern-match on curve point", - ), - }, -] +I choked on a curve point in a bytearray pattern. diff --git a/crates/aiken-lang/src/parser/pattern/snapshots/pattern_string.snap b/crates/aiken-lang/src/parser/pattern/snapshots/pattern_string.snap index fcd55431..29a9c728 100644 --- a/crates/aiken-lang/src/parser/pattern/snapshots/pattern_string.snap +++ b/crates/aiken-lang/src/parser/pattern/snapshots/pattern_string.snap @@ -2,14 +2,4 @@ source: crates/aiken-lang/src/parser/pattern/string.rs description: "Invalid code (parse error):\n\nwhen foo is {\n @\"foo\" -> True\n}\n" --- -[ - ParseError { - kind: PatternMatchOnString, - span: 16..22, - while_parsing: None, - expected: {}, - label: Some( - "cannot pattern-match on string", - ), - }, -] +I refuse to cooperate and match a utf-8 string. diff --git a/crates/aiken-lang/src/parser/token.rs b/crates/aiken-lang/src/parser/token.rs index 4c928e32..9ec82f2e 100644 --- a/crates/aiken-lang/src/parser/token.rs +++ b/crates/aiken-lang/src/parser/token.rs @@ -1,12 +1,14 @@ use std::fmt; -#[derive(Clone, Debug, PartialEq, Hash, Eq, Copy, serde::Serialize, serde::Deserialize)] +#[derive( + Clone, Debug, PartialEq, PartialOrd, Ord, Hash, Eq, Copy, serde::Serialize, serde::Deserialize, +)] pub enum Base { Decimal { numeric_underscore: bool }, Hexadecimal, } -#[derive(Clone, Debug, PartialEq, Hash, Eq)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Ord, Hash, Eq)] pub enum Token { Error(char), Name { name: String }, diff --git a/crates/aiken-lang/src/parser/utils.rs b/crates/aiken-lang/src/parser/utils.rs index 7849e651..d0d4cfba 100644 --- a/crates/aiken-lang/src/parser/utils.rs +++ b/crates/aiken-lang/src/parser/utils.rs @@ -45,7 +45,7 @@ macro_rules! assert_expr { prepend_module_to_snapshot => false, omit_expression => true }, { - insta::assert_debug_snapshot!(err); + insta::assert_snapshot!(err.into_iter().map(|e| e.to_string()).collect::>().join("\n")); }) } }