Require word boundaries around names
This commit is contained in:
parent
0fc8506164
commit
deae102405
@ -3,9 +3,11 @@ use nom::
|
|||||||
IResult,
|
IResult,
|
||||||
bytes::complete::{take_while, take_while_m_n},
|
bytes::complete::{take_while, take_while_m_n},
|
||||||
combinator::recognize,
|
combinator::recognize,
|
||||||
sequence::pair,
|
sequence::{pair, terminated},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use super::word_boundary;
|
||||||
|
|
||||||
fn is_function_name_character_first(c: char) -> bool
|
fn is_function_name_character_first(c: char) -> bool
|
||||||
{
|
{
|
||||||
c.is_alphabetic() && c.is_lowercase()
|
c.is_alphabetic() && c.is_lowercase()
|
||||||
@ -29,11 +31,15 @@ fn is_variable_name_character_body(c: char) -> bool
|
|||||||
pub fn function_name(i: &str) -> IResult<&str, &str>
|
pub fn function_name(i: &str) -> IResult<&str, &str>
|
||||||
{
|
{
|
||||||
recognize
|
recognize
|
||||||
|
(
|
||||||
|
terminated
|
||||||
(
|
(
|
||||||
pair
|
pair
|
||||||
(
|
(
|
||||||
take_while_m_n(1, 1, is_function_name_character_first),
|
take_while_m_n(1, 1, is_function_name_character_first),
|
||||||
take_while(is_function_name_character_body),
|
take_while(is_function_name_character_body),
|
||||||
|
),
|
||||||
|
word_boundary,
|
||||||
)
|
)
|
||||||
)(i)
|
)(i)
|
||||||
}
|
}
|
||||||
@ -46,11 +52,15 @@ pub fn predicate_name(i: &str) -> IResult<&str, &str>
|
|||||||
pub fn variable_name(i: &str) -> IResult<&str, &str>
|
pub fn variable_name(i: &str) -> IResult<&str, &str>
|
||||||
{
|
{
|
||||||
recognize
|
recognize
|
||||||
|
(
|
||||||
|
terminated
|
||||||
(
|
(
|
||||||
pair
|
pair
|
||||||
(
|
(
|
||||||
take_while_m_n(1, 1, is_variable_name_character_first),
|
take_while_m_n(1, 1, is_variable_name_character_first),
|
||||||
take_while(is_variable_name_character_body),
|
take_while(is_variable_name_character_body),
|
||||||
|
),
|
||||||
|
word_boundary,
|
||||||
)
|
)
|
||||||
)(i)
|
)(i)
|
||||||
}
|
}
|
||||||
@ -78,6 +88,7 @@ mod tests
|
|||||||
fn parse_predicate_name()
|
fn parse_predicate_name()
|
||||||
{
|
{
|
||||||
assert_eq!(predicate_name("p rest"), Ok((" rest", "p")));
|
assert_eq!(predicate_name("p rest"), Ok((" rest", "p")));
|
||||||
|
assert_eq!(predicate_name("p, rest"), Ok((", rest", "p")));
|
||||||
assert_eq!(predicate_name("predicate_123 rest"), Ok((" rest", "predicate_123")));
|
assert_eq!(predicate_name("predicate_123 rest"), Ok((" rest", "predicate_123")));
|
||||||
assert!(predicate_name("0 rest").is_err());
|
assert!(predicate_name("0 rest").is_err());
|
||||||
assert!(predicate_name("123_asd rest").is_err());
|
assert!(predicate_name("123_asd rest").is_err());
|
||||||
@ -92,6 +103,7 @@ mod tests
|
|||||||
fn parse_variable_name()
|
fn parse_variable_name()
|
||||||
{
|
{
|
||||||
assert_eq!(variable_name("X Rest"), Ok((" Rest", "X")));
|
assert_eq!(variable_name("X Rest"), Ok((" Rest", "X")));
|
||||||
|
assert_eq!(variable_name("X, Rest"), Ok((", Rest", "X")));
|
||||||
assert_eq!(variable_name("Variable_123 Rest"), Ok((" Rest", "Variable_123")));
|
assert_eq!(variable_name("Variable_123 Rest"), Ok((" Rest", "Variable_123")));
|
||||||
assert!(variable_name("0 Rest").is_err());
|
assert!(variable_name("0 Rest").is_err());
|
||||||
assert!(variable_name("123_Asd Rest").is_err());
|
assert!(variable_name("123_Asd Rest").is_err());
|
||||||
|
Loading…
Reference in New Issue
Block a user