work
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 12 Nov 2024 19:28:16 +0000 (11:28 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 12 Nov 2024 19:28:16 +0000 (11:28 -0800)
rust/pspp/src/command.rs
rust/pspp/src/message.rs

index 802641d85328743b6ec38163e34962cca670e618..a1e4be5e0aceac0ff57e41115ea3554d10f08bea 100644 (file)
@@ -12,7 +12,7 @@ use crate::{
         lexer::{LexToken, TokenSlice},
         token::{Punct, Token},
     },
-    message::Diagnostic,
+    message::{Diagnostic, Diagnostics},
 };
 
 flags! {
@@ -108,11 +108,11 @@ struct Subcommand {
 
 #[derive(Debug)]
 enum ParseError {
-    Error(Diagnostic),
-    Mismatch(Diagnostic),
+    Error(Diagnostics),
+    Mismatch(Diagnostics),
 }
 
-type ParseResult<'a, T> = Result<(T, TokenSlice<'a>), ParseError>;
+type ParseResult<'a, T> = Result<(T, TokenSlice<'a>, Diagnostics), ParseError>;
 
 trait MismatchToError {
     fn mismatch_to_error(self) -> Self;
@@ -142,7 +142,7 @@ where
         Self: Sized,
     {
         match T::from_tokens(input) {
-            Ok((value, rest)) => Ok((Some(value), rest)),
+            Ok((value, rest, diagnostics)) => Ok((Some(value), rest, diagnostics)),
             Err(ParseError::Mismatch(_)) => Ok((None, input)),
             Err(ParseError::Error(error)) => Err(ParseError::Error(error)),
         }
index aa7aef640a18a2905385966351d39314461d5289..58e9671a260474e438c339636eba56a86a3032a3 100644 (file)
@@ -164,6 +164,9 @@ pub struct Stack {
     description: String,
 }
 
+#[derive(Debug)]
+pub struct Diagnostics(Vec<Diagnostic>);
+
 pub struct Diagnostic {
     pub severity: Severity,
     pub category: Category,