difftreelog
fix(rowan-parser) forbid assert in objcomp
in: master
3 files changed
crates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth408408409 let mut elems = 0;409 let mut elems = 0;410 let mut compspecs = Vec::new();410 let mut compspecs = Vec::new();411 let mut asserts = Vec::new();411 loop {412 loop {412 if p.at(T!['}']) {413 if p.at(T!['}']) {413 p.bump();414 p.bump();430 let m = p.start();431 let m = p.start();431 if p.at(T![local]) {432 if p.at(T![local]) {432 obj_local(p);433 obj_local(p);433 m.complete(p, MEMBER_BIND_STMT)434 m.complete(p, MEMBER_BIND_STMT);434 } else if p.at(T![assert]) {435 } else if p.at(T![assert]) {435 assertion(p);436 assertion(p);436 m.complete(p, MEMBER_ASSERT_STMT)437 asserts.push(m.complete(p, MEMBER_ASSERT_STMT));437 } else {438 } else {438 field_name(p);439 field_name(p);439 if p.at(T![+]) {440 if p.at(T![+]) {455 expr(p);456 expr(p);456 false457 false457 };458 };459 elems += 1;458460459 if params {461 if params {460 m.complete(p, MEMBER_FIELD_METHOD)462 m.complete(p, MEMBER_FIELD_METHOD)461 } else {463 } else {462 m.complete(p, MEMBER_FIELD_NORMAL)464 m.complete(p, MEMBER_FIELD_NORMAL)463 }465 };464 };466 };465 elems += 1;466 while p.at_ts(COMPSPEC) {467 while p.at_ts(COMPSPEC) {467 compspecs.push(compspec(p));468 compspecs.push(compspec(p));468 }469 }482 }483 }483 m.complete(p, OBJ_BODY_MEMBER_LIST);484 m.complete(p, OBJ_BODY_MEMBER_LIST);484 } else if !compspecs.is_empty() {485 } else if !compspecs.is_empty() {486 for errored in asserts {487 errored.wrap_error(p, "asserts can't be used in object comprehensions");488 }485 m.complete(p, OBJ_BODY_COMP);489 m.complete(p, OBJ_BODY_COMP);486 } else {490 } else {487 m.complete(p, OBJ_BODY_MEMBER_LIST);491 m.complete(p, OBJ_BODY_MEMBER_LIST);crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__obj_compspec_incompatible_with_asserts.snapdiffbeforeafterbothno changes
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth212 {a:1, b:1, for a in [1, 2, 3], c:1}212 {a:1, b:1, for a in [1, 2, 3], c:1}213 "#213 "#214215 obj_compspec_incompatible_with_asserts => r#"216 {assert 1, a: 1 for a in [1,2,3]}217 "#214218215 local_method => r#"219 local_method => r#"216 local220 local