From 03c463a8b869c60eb609c765dafb878c99e2baea Mon Sep 17 00:00:00 2001 From: anri Date: Fri, 13 Mar 2026 07:07:06 -0300 Subject: [PATCH] parser: ignore multispace at the start of a type declaration --- src/kdl_parser/parser/type_parser.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/kdl_parser/parser/type_parser.rs b/src/kdl_parser/parser/type_parser.rs index d8ee55c..7c2407e 100644 --- a/src/kdl_parser/parser/type_parser.rs +++ b/src/kdl_parser/parser/type_parser.rs @@ -96,7 +96,7 @@ mod combinators { use crate::kdl_parser::schema::{ArraySeparator, BoolEncoding, DataType, TypeEncoding}; use miette::SourceSpan; - use winnow::ascii::{alpha1, alphanumeric1, space0, space1}; + use winnow::ascii::{alpha1, alphanumeric1, multispace0, space0, space1}; use winnow::combinator::{ alt, cut_err, delimited, not, opt, peek, preceded, separated, separated_pair, }; @@ -307,7 +307,7 @@ mod combinators { pub fn parse_datatype(input: &mut Input) -> PResult { ( - space0, + multispace0, alt(( parse_map, parse_array, @@ -324,7 +324,7 @@ mod combinators { parse_custom_type, )), ) - .map(|(_space, v)| v) + .map(|(_space1, v)| v) .parse_next(input) } @@ -634,6 +634,22 @@ mod combinators { assert!(val.is_err()); } + #[test] + fn can_parse_bool_with_whitespace() { + let s = "bool::int "; + let mut input = Input { + input: LocatingSlice::new(s), + state: State {}, + }; + let val = parse_datatype(&mut input); + assert!(matches!( + val, + Ok(DataType::Bool { + encoding: BoolEncoding::Int + }) + )); + } + #[test] fn can_parse_string_encoded_i32() { let s = "i32::str";