diff --git a/edn/src/edn.rustpeg b/edn/src/edn.rustpeg index 2ffa31bd..6de00f05 100644 --- a/edn/src/edn.rustpeg +++ b/edn/src/edn.rustpeg @@ -25,7 +25,6 @@ use types::Value; // to trace where the parser is failing // TODO: Support tagged elements -// TODO: Support comments // TODO: Support discard #[export] @@ -137,5 +136,6 @@ value -> Value list / vector / map / set whitespace = (" " / "\r" / "\n" / "\t") +comment = ";" [^\r\n]* ("\r" / "\n")? -__ = whitespace* +__ = (whitespace / comment)* diff --git a/edn/tests/tests.rs b/edn/tests/tests.rs index 0f9eb809..a8cbb918 100644 --- a/edn/tests/tests.rs +++ b/edn/tests/tests.rs @@ -799,6 +799,16 @@ fn test_query_find_title() { assert_eq!(value(test).unwrap(), reply); } +#[test] +fn test_comments() { + let result = Ok(Value::Integer(0)); + assert_eq!(value("0;"), result); + assert_eq!(value("0;x"), result); + assert_eq!(value("0;\n"), result); + assert_eq!(value("0;x\n"), result); + assert_eq!(value(";\n0"), result); + assert_eq!(value(";\r0"), result); +} /* // Handy templates for creating test cases follow: