Crate cucumber_expressions
source ·Expand description
Cucumber Expressions for Rust
Rust implementation of Cucumber Expressions.
This crate provides AST parser, and Regex
expansion of Cucumber Expressions.
use cucumber_expressions::Expression;
let re = Expression::regex("I have {int} cucumbers in my belly").unwrap();
let caps = re.captures("I have 42 cucumbers in my belly").unwrap();
assert_eq!(&caps[0], "I have 42 cucumbers in my belly");
assert_eq!(&caps[1], "42");
Cargo features
into-regex
: Enables expansion intoRegex
.
Grammar
This implementation follows a context-free grammar, which isn’t yet merged. Original grammar is impossible to follow while creating a performant parser, as it consists errors and describes not an exact Cucumber Expressions language, but rather some superset language, while being also context-sensitive. In case you’ve found some inconsistencies between this implementation and the ones in other languages, please file an issue!
EBNF spec of the current context-free grammar implemented by this crate:
expression = single-expression*
single-expression = alternation
| optional
| parameter
| text-without-whitespace+
| whitespace+
text-without-whitespace = (- (text-to-escape | whitespace))
| ('\', text-to-escape)
text-to-escape = '(' | '{' | '/' | '\'
alternation = single-alternation, (`/`, single-alternation)+
single-alternation = ((text-in-alternative+, optional*)
| (optional+, text-in-alternative+))+
text-in-alternative = (- alternative-to-escape)
| ('\', alternative-to-escape)
alternative-to-escape = whitespace | '(' | '{' | '/' | '\'
whitespace = ' '
optional = '(' text-in-optional+ ')'
text-in-optional = (- optional-to-escape) | ('\', optional-to-escape)
optional-to-escape = '(' | ')' | '{' | '/' | '\'
parameter = '{', name*, '}'
name = (- name-to-escape) | ('\', name-to-escape)
name-to-escape = '{' | '}' | '(' | '/' | '\'
Regex
Production Rules
Follows original production rules.
License
This project is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Modules
- expand
into-regex
- Cucumber Expressions AST parser.
Structs
- Top-level
expression
defined in the grammar spec. parameter
defined in the grammar spec, allowing to match some specialInput
described by aParameter
name.
Enums
alternative
defined in the grammar spec.
Type Definitions
str
along with its location information in the original input.