Tidy up grammar around method predicates and exploders.
This commit is contained in:
parent
4892ba3d4e
commit
a3ae75d66f
3 changed files with 60 additions and 3 deletions
|
@ -140,8 +140,7 @@ def_type = { "deftype" }
|
|||
def_impl = { "defimpl" }
|
||||
def_name = ${ identifier ~ def_modifier? }
|
||||
def_predicate = { "?" }
|
||||
def_bang = { "!" }
|
||||
def_modifier = _{ def_predicate | def_bang }
|
||||
def_modifier = _{ def_predicate }
|
||||
def_return_type = { "<" ~ variable ~ ">" }
|
||||
def_fn = _{ def_fn_keyword ~ def_return_type? ~ def_name ~ argument_list? }
|
||||
def_ty = _{ def_type_keyword ~ def_name ~ argument_list? }
|
||||
|
@ -207,6 +206,8 @@ unary_operator = _{ plus | minus | logical_not }
|
|||
call_test = _{ soi ~ call ~ eoi }
|
||||
call = ${ call_receiver ~ "." ~ call_message ~ call_arguments }
|
||||
call_receiver = { identifier }
|
||||
call_message = { identifier }
|
||||
call_message = ${ identifier ~ (call_predicate | call_bang)? }
|
||||
call_predicate = { "?" }
|
||||
call_bang = { "!" }
|
||||
call_arguments = !{ "(" ~ (call_argument ~ ("," ~ call_argument)*)? ~ ")" }
|
||||
call_argument = { expression }
|
||||
|
|
|
@ -34,3 +34,41 @@ fn call_with_args() {
|
|||
]
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn call_with_predicate() {
|
||||
parses_to!(
|
||||
parser: Grammar,
|
||||
input: "marty.mcfly?()",
|
||||
rule: Rule::call_test,
|
||||
tokens: [
|
||||
call(0, 14, [
|
||||
call_receiver(0, 5, [identifier(0, 5)]),
|
||||
call_message(6, 12, [
|
||||
identifier(6, 11),
|
||||
call_predicate(11, 12)
|
||||
]),
|
||||
call_arguments(12, 14)
|
||||
])
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn call_with_explosion() {
|
||||
parses_to!(
|
||||
parser: Grammar,
|
||||
input: "marty.mcfly!()",
|
||||
rule: Rule::call_test,
|
||||
tokens: [
|
||||
call(0, 14, [
|
||||
call_receiver(0, 5, [identifier(0, 5)]),
|
||||
call_message(6, 12, [
|
||||
identifier(6, 11),
|
||||
call_bang(11, 12)
|
||||
]),
|
||||
call_arguments(12, 14)
|
||||
])
|
||||
]
|
||||
)
|
||||
}
|
||||
|
|
|
@ -133,6 +133,24 @@ fn define_constructor() {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn define_function_with_predicate() {
|
||||
parses_to!(
|
||||
parser: Grammar,
|
||||
input: "defp name?",
|
||||
rule: Rule::def_test,
|
||||
tokens: [
|
||||
def(0, 10, [
|
||||
def_private(0, 4),
|
||||
def_name(5, 10, [
|
||||
identifier(5, 9),
|
||||
def_predicate(9, 10),
|
||||
])
|
||||
])
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn def_trait_type_only() {
|
||||
parses_to!(
|
||||
|
|
Reference in a new issue