Warn against === and !==.
This commit is contained in:
parent
9a1c715aad
commit
7df36033c4
@ -19,6 +19,8 @@ pub enum LexError {
|
|||||||
MalformedChar(String),
|
MalformedChar(String),
|
||||||
/// An identifier is in an invalid format.
|
/// An identifier is in an invalid format.
|
||||||
MalformedIdentifier(String),
|
MalformedIdentifier(String),
|
||||||
|
/// Bad keyword encountered when tokenizing the script text.
|
||||||
|
ImproperKeyword(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Error for LexError {}
|
impl Error for LexError {}
|
||||||
@ -32,6 +34,7 @@ impl fmt::Display for LexError {
|
|||||||
Self::MalformedChar(s) => write!(f, "Invalid character: '{}'", s),
|
Self::MalformedChar(s) => write!(f, "Invalid character: '{}'", s),
|
||||||
Self::MalformedIdentifier(s) => write!(f, "Variable name is not proper: '{}'", s),
|
Self::MalformedIdentifier(s) => write!(f, "Variable name is not proper: '{}'", s),
|
||||||
Self::UnterminatedString => write!(f, "Open string is not terminated"),
|
Self::UnterminatedString => write!(f, "Open string is not terminated"),
|
||||||
|
Self::ImproperKeyword(s) => write!(f, "{}", s),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
35
src/token.rs
35
src/token.rs
@ -361,10 +361,9 @@ impl Token {
|
|||||||
use Token::*;
|
use Token::*;
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
Equals | PlusAssign | MinusAssign | MultiplyAssign | DivideAssign | LeftShiftAssign
|
// Equals | PlusAssign | MinusAssign | MultiplyAssign | DivideAssign | LeftShiftAssign
|
||||||
| RightShiftAssign | AndAssign | OrAssign | XOrAssign | ModuloAssign
|
// | RightShiftAssign | AndAssign | OrAssign | XOrAssign | ModuloAssign
|
||||||
| PowerOfAssign => 10,
|
// | PowerOfAssign => 10,
|
||||||
|
|
||||||
Or | XOr | Pipe => 40,
|
Or | XOr | Pipe => 40,
|
||||||
|
|
||||||
And | Ampersand => 50,
|
And | Ampersand => 50,
|
||||||
@ -670,7 +669,7 @@ impl<'a> TokenIterator<'a> {
|
|||||||
.map(Token::IntegerConstant)
|
.map(Token::IntegerConstant)
|
||||||
.unwrap_or_else(|_| {
|
.unwrap_or_else(|_| {
|
||||||
Token::LexError(Box::new(LERR::MalformedNumber(
|
Token::LexError(Box::new(LERR::MalformedNumber(
|
||||||
result.iter().collect(),
|
result.into_iter().collect(),
|
||||||
)))
|
)))
|
||||||
}),
|
}),
|
||||||
pos,
|
pos,
|
||||||
@ -686,7 +685,7 @@ impl<'a> TokenIterator<'a> {
|
|||||||
return Some((
|
return Some((
|
||||||
num.unwrap_or_else(|_| {
|
num.unwrap_or_else(|_| {
|
||||||
Token::LexError(Box::new(LERR::MalformedNumber(
|
Token::LexError(Box::new(LERR::MalformedNumber(
|
||||||
result.iter().collect(),
|
result.into_iter().collect(),
|
||||||
)))
|
)))
|
||||||
}),
|
}),
|
||||||
pos,
|
pos,
|
||||||
@ -880,6 +879,18 @@ impl<'a> TokenIterator<'a> {
|
|||||||
|
|
||||||
('=', '=') => {
|
('=', '=') => {
|
||||||
self.eat_next();
|
self.eat_next();
|
||||||
|
|
||||||
|
// Warn against `===`
|
||||||
|
if self.peek_next() == Some('=') {
|
||||||
|
return Some((
|
||||||
|
Token::LexError(Box::new(LERR::ImproperKeyword(
|
||||||
|
"'===' is not a valid operator. This is not JavaScript! Should it be '=='?"
|
||||||
|
.to_string(),
|
||||||
|
))),
|
||||||
|
pos,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
return Some((Token::EqualsTo, pos));
|
return Some((Token::EqualsTo, pos));
|
||||||
}
|
}
|
||||||
('=', _) => return Some((Token::Equals, pos)),
|
('=', _) => return Some((Token::Equals, pos)),
|
||||||
@ -924,6 +935,18 @@ impl<'a> TokenIterator<'a> {
|
|||||||
|
|
||||||
('!', '=') => {
|
('!', '=') => {
|
||||||
self.eat_next();
|
self.eat_next();
|
||||||
|
|
||||||
|
// Warn against `!==`
|
||||||
|
if self.peek_next() == Some('=') {
|
||||||
|
return Some((
|
||||||
|
Token::LexError(Box::new(LERR::ImproperKeyword(
|
||||||
|
"'!==' is not a valid operator. This is not JavaScript! Should it be '!='?"
|
||||||
|
.to_string(),
|
||||||
|
))),
|
||||||
|
pos,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
return Some((Token::NotEqualsTo, pos));
|
return Some((Token::NotEqualsTo, pos));
|
||||||
}
|
}
|
||||||
('!', _) => return Some((Token::Bang, pos)),
|
('!', _) => return Some((Token::Bang, pos)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user