mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-31 23:25:09 +00:00
revsets: use a single grammar rule for the :
operator (#46)
This commit is contained in:
parent
588389e89f
commit
bc92b82ed4
@ -27,10 +27,6 @@ whitespace = _{ " " }
|
||||
parents_op = { "-" }
|
||||
children_op = { "+" }
|
||||
|
||||
// We could use the same rule name for the shared operators if we can
|
||||
// think of a good name.
|
||||
ancestors_op = { ":" }
|
||||
descendants_op = { ":" }
|
||||
dag_range_op = { ":" }
|
||||
range_op = { ".." }
|
||||
|
||||
@ -56,8 +52,8 @@ neighbors_expression = { primary ~ (parents_op | children_op)* }
|
||||
range_expression = {
|
||||
neighbors_expression ~ dag_range_op ~ neighbors_expression
|
||||
| neighbors_expression ~ range_op ~ neighbors_expression
|
||||
| ancestors_op ~ neighbors_expression
|
||||
| neighbors_expression ~ descendants_op
|
||||
| dag_range_op ~ neighbors_expression
|
||||
| neighbors_expression ~ dag_range_op
|
||||
| neighbors_expression
|
||||
}
|
||||
|
||||
|
@ -406,7 +406,7 @@ fn parse_range_expression_rule(
|
||||
) -> Result<Rc<RevsetExpression>, RevsetParseError> {
|
||||
let first = pairs.next().unwrap();
|
||||
match first.as_rule() {
|
||||
Rule::ancestors_op => {
|
||||
Rule::dag_range_op => {
|
||||
return Ok(
|
||||
parse_neighbors_expression_rule(pairs.next().unwrap().into_inner())?.ancestors(),
|
||||
);
|
||||
@ -421,13 +421,14 @@ fn parse_range_expression_rule(
|
||||
let mut expression = parse_neighbors_expression_rule(first.into_inner())?;
|
||||
if let Some(next) = pairs.next() {
|
||||
match next.as_rule() {
|
||||
Rule::descendants_op => {
|
||||
expression = expression.descendants();
|
||||
}
|
||||
Rule::dag_range_op => {
|
||||
let heads_expression =
|
||||
parse_neighbors_expression_rule(pairs.next().unwrap().into_inner())?;
|
||||
expression = expression.dag_range_to(&heads_expression);
|
||||
if let Some(heads_pair) = pairs.next() {
|
||||
let heads_expression =
|
||||
parse_neighbors_expression_rule(heads_pair.into_inner())?;
|
||||
expression = expression.dag_range_to(&heads_expression);
|
||||
} else {
|
||||
expression = expression.descendants();
|
||||
}
|
||||
}
|
||||
Rule::range_op => {
|
||||
let expression2 =
|
||||
|
Loading…
x
Reference in New Issue
Block a user