Clarify differences between [] and {}

This commit is contained in:
ConnorSkees 2020-01-12 19:56:33 -05:00
parent 107a7d996e
commit 5e58cceae7

View File

@ -1,6 +1,11 @@
use std::convert::TryFrom; use std::convert::TryFrom;
use std::default::Default;
use std::collections::HashMap;
use std::fmt::{self, Display}; use std::fmt::{self, Display};
use crate::Token;
use crate::mixin::Mixin;
#[derive(Copy, Clone, Debug, Eq, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum Symbol { pub enum Symbol {
/// . /// .
@ -16,13 +21,13 @@ pub enum Symbol {
/// ) /// )
CloseParen, CloseParen,
/// { /// {
OpenBrace, OpenCurlyBrace,
/// } /// }
CloseBrace, CloseCurlyBrace,
/// [ /// [
OpenBracket, OpenSquareBrace,
/// ] /// ]
CloseBracket, CloseSquareBrace,
/// , /// ,
Comma, Comma,
/// + /// +
@ -68,10 +73,10 @@ impl Display for Symbol {
Symbol::Dollar => write!(f, "$"), Symbol::Dollar => write!(f, "$"),
Symbol::OpenParen => write!(f, "("), Symbol::OpenParen => write!(f, "("),
Symbol::CloseParen => write!(f, "),"), Symbol::CloseParen => write!(f, "),"),
Symbol::OpenBrace => write!(f, "{{"), Symbol::OpenCurlyBrace => write!(f, "{{"),
Symbol::CloseBrace => write!(f, "}}"), Symbol::CloseCurlyBrace => write!(f, "}}"),
Symbol::OpenBracket => write!(f, "["), Symbol::OpenSquareBrace => write!(f, "["),
Symbol::CloseBracket => write!(f, "]"), Symbol::CloseSquareBrace => write!(f, "]"),
Symbol::Comma => write!(f, ","), Symbol::Comma => write!(f, ","),
Symbol::Plus => write!(f, "+"), Symbol::Plus => write!(f, "+"),
Symbol::Minus => write!(f, "-"), Symbol::Minus => write!(f, "-"),
@ -104,10 +109,10 @@ impl TryFrom<char> for Symbol {
'$' => Ok(Symbol::Dollar), '$' => Ok(Symbol::Dollar),
'(' => Ok(Symbol::OpenParen), '(' => Ok(Symbol::OpenParen),
')' => Ok(Symbol::CloseParen), ')' => Ok(Symbol::CloseParen),
'{' => Ok(Symbol::OpenBrace), '{' => Ok(Symbol::OpenCurlyBrace),
'}' => Ok(Symbol::CloseBrace), '}' => Ok(Symbol::CloseCurlyBrace),
'[' => Ok(Symbol::OpenBracket), '[' => Ok(Symbol::OpenSquareBrace),
']' => Ok(Symbol::CloseBracket), ']' => Ok(Symbol::CloseSquareBrace),
',' => Ok(Symbol::Comma), ',' => Ok(Symbol::Comma),
'+' => Ok(Symbol::Plus), '+' => Ok(Symbol::Plus),
'-' => Ok(Symbol::Minus), '-' => Ok(Symbol::Minus),
@ -461,3 +466,24 @@ impl Display for Pos {
write!(f, "line:{} col:{}", self.line, self.column) write!(f, "line:{} col:{}", self.line, self.column)
} }
} }
#[derive(Debug, Clone, Default)]
pub struct Scope {
pub vars: HashMap<String, Vec<Token>>,
pub mixins: HashMap<String, Mixin>,
}
impl Scope {
#[must_use]
pub fn new() -> Self {
Self {
vars: HashMap::new(),
mixins: HashMap::new(),
}
}
pub fn merge(&mut self, other: Scope) {
self.vars.extend(other.vars);
self.mixins.extend(other.mixins);
}
}