Skip to content

Commit 45b616c

Browse files
committed
format
1 parent 875f09e commit 45b616c

7 files changed

+95
-49
lines changed

src/ast.rs

+31-13
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ pub struct SetPropertyExpr {
6464
pub value: Node,
6565
}
6666

67-
6867
#[derive(Debug, PartialEq, Clone)]
6968
pub enum Node {
7069
Number(f64),
@@ -93,8 +92,11 @@ impl fmt::Display for BinOperator {
9392
}
9493
}
9594

96-
fn join_nodes(node: &Vec<Node>) -> String {
97-
node.iter().map(|node| format!("{}", node)).collect::<Vec<_>>().join(", ")
95+
fn join_nodes(node: &[Node]) -> String {
96+
node.iter()
97+
.map(|node| format!("{}", node))
98+
.collect::<Vec<_>>()
99+
.join(", ")
98100
}
99101

100102
impl fmt::Display for Node {
@@ -110,16 +112,32 @@ impl fmt::Display for Node {
110112
Node::Object(_) => String::from("Object"),
111113
Node::Index(index) => format!("{}", index),
112114
Node::FunctionDecleration(_) => String::from("FunctionDecleration"),
113-
Node::FunctionCall(function_call) => format!("{}({})", function_call.function, join_nodes(&function_call.arguments)),
114-
Node::VariabeDecleration(variable_decleration) => if let Some(val) = &variable_decleration.value {
115-
format!("let {} = {};", variable_decleration.identifier, val)
116-
} else {
117-
format!("let {};", variable_decleration.identifier)
118-
},
119-
Node::AssignmentExpr(assignment) => format!("{} = {};", assignment.identifier, assignment.value),
120-
Node::SetPropertyExpr(set_property) => format!("{}.{} = {};", set_property.target, set_property.key, set_property.value),
121-
Node::BinOperator(bin_operation) => format!("{} {} {}", bin_operation.left, bin_operation.operator, bin_operation.right),
122-
Node::UnaryOperator(unary_operation) => format!("{}{}", unary_operation.operator, unary_operation.expression),
115+
Node::FunctionCall(function_call) => format!(
116+
"{}({})",
117+
function_call.function,
118+
join_nodes(&function_call.arguments)
119+
),
120+
Node::VariabeDecleration(variable_decleration) => {
121+
if let Some(val) = &variable_decleration.value {
122+
format!("let {} = {};", variable_decleration.identifier, val)
123+
} else {
124+
format!("let {};", variable_decleration.identifier)
125+
}
126+
}
127+
Node::AssignmentExpr(assignment) => {
128+
format!("{} = {};", assignment.identifier, assignment.value)
129+
}
130+
Node::SetPropertyExpr(set_property) => format!(
131+
"{}.{} = {};",
132+
set_property.target, set_property.key, set_property.value
133+
),
134+
Node::BinOperator(bin_operation) => format!(
135+
"{} {} {}",
136+
bin_operation.left, bin_operation.operator, bin_operation.right
137+
),
138+
Node::UnaryOperator(unary_operation) => {
139+
format!("{}{}", unary_operation.operator, unary_operation.expression)
140+
}
123141
Node::Expression(expression) => format!("{}", expression),
124142
Node::None => String::from("none"),
125143
})

src/editor_helper.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ use std::{
1313
cell::RefCell,
1414
};
1515

16-
use crate::{
17-
interpreter::Interpreter,
18-
interpreter_option::InterpreterOptions,
19-
};
16+
use crate::{interpreter::Interpreter, interpreter_option::InterpreterOptions};
2017

2118
pub struct OutputHint {
2219
pub display: String,

src/enviroment.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,16 @@ impl Value {
8181
},
8282
Value::Object(obj) => {
8383
let mut result = String::from("{");
84-
result.push_str(&obj.borrow().iter().map(|(key, value)| format!(" {}: {}", key, &value.to_string())).collect::<Vec<String>>().join(", "));
84+
result.push_str(
85+
&obj.borrow()
86+
.iter()
87+
.map(|(key, value)| format!(" {}: {}", key, &value.to_string()))
88+
.collect::<Vec<String>>()
89+
.join(", "),
90+
);
8591
result.push('}');
8692
result
87-
},
93+
}
8894
Value::None => String::from("none"),
8995
}
9096
}
@@ -94,4 +100,4 @@ impl fmt::Display for Value {
94100
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
95101
f.write_str(&self.stringify())
96102
}
97-
}
103+
}

src/interpreter.rs

+25-11
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,16 @@ pub fn colored_output(val: &Value) -> String {
4444
),
4545
Value::Object(obj) => {
4646
let mut result = String::from("{");
47-
result.push_str(&obj.borrow().iter().map(|(key, value)| format!("{}: {}", key, colored_output(&value))).collect::<Vec<String>>().join(", "));
47+
result.push_str(
48+
&obj.borrow()
49+
.iter()
50+
.map(|(key, value)| format!(" {}: {}", key, colored_output(&value)))
51+
.collect::<Vec<String>>()
52+
.join(", "),
53+
);
4854
result.push('}');
4955
result
50-
},
56+
}
5157
Value::None => Colour::RGB(128, 127, 113).paint("none").to_string(),
5258
}
5359
}
@@ -365,10 +371,15 @@ impl Interpreter {
365371

366372
fn visit_index_expression(&mut self, node: &Index) -> IResult {
367373
match self.visit(&node.target)? {
368-
Value::Object(obj) => {
369-
Ok(*obj.borrow().get(&node.key).unwrap_or(&Box::new(Value::None)).clone())
370-
}
371-
value => Err(NekoError::TypeError(format!("Cannot read property '{}' of {}", node.key, value)))
374+
Value::Object(obj) => Ok(*obj
375+
.borrow()
376+
.get(&node.key)
377+
.unwrap_or(&Box::new(Value::None))
378+
.clone()),
379+
value => Err(NekoError::TypeError(format!(
380+
"Cannot read property '{}' of {}",
381+
node.key, value
382+
))),
372383
}
373384
}
374385

@@ -382,9 +393,9 @@ impl Interpreter {
382393
let mut values: HashMap<String, Box<Value>> = HashMap::new();
383394
for (key, value) in &obj.values {
384395
values.insert(key.clone(), Box::new(self.visit_expression(&value)?));
385-
};
396+
}
386397
Ok(Value::Object(Rc::new(RefCell::new(values))))
387-
},
398+
}
388399
Node::None => Ok(Value::None),
389400
Node::Identifier(iden) => self
390401
.env
@@ -410,15 +421,18 @@ impl Interpreter {
410421
Ok(value)
411422
}
412423

413-
414424
fn visit_set_property(&mut self, node: &SetPropertyExpr) -> IResult {
415425
let value = self.visit_expression(&node.value)?;
416426
match &self.visit_expression(&node.target)? {
417427
Value::Object(obj) => {
418-
obj.borrow_mut().insert(node.key.to_string(), Box::new(value.clone()));
428+
obj.borrow_mut()
429+
.insert(node.key.to_string(), Box::new(value.clone()));
419430
Ok(value)
420431
}
421-
target => Err(NekoError::TypeError(format!("Cannot set property '{}' of {}", node.key, target))),
432+
target => Err(NekoError::TypeError(format!(
433+
"Cannot set property '{}' of {}",
434+
node.key, target
435+
))),
422436
}
423437
}
424438

src/parser.rs

+25-16
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ impl<'a> Parser<'a> {
3131
let value = self.expression()?;
3232
Ok((iden, value))
3333
} else {
34-
Err(NekoError::SyntaxError(format!("Expected identifier got {}", self.lexer.peek())))
34+
Err(NekoError::SyntaxError(format!(
35+
"Expected identifier got {}",
36+
self.lexer.peek()
37+
)))
3538
}
3639
}
3740

@@ -61,14 +64,16 @@ impl<'a> Parser<'a> {
6164

6265
loop {
6366
match self.lexer.peek() {
64-
Token::RBrace => {break},
65-
Token::Comma => {self.lexer.next();},
67+
Token::RBrace => break,
68+
Token::Comma => {
69+
self.lexer.next();
70+
}
6671
_ => {
6772
let key_value = self.key_value_pair()?;
6873
values.insert(key_value.0, key_value.1);
69-
},
74+
}
7075
}
71-
};
76+
}
7277

7378
self.eat(Token::RBrace)?;
7479
Ok(Node::Object(Box::new(Object { values })))
@@ -91,7 +96,7 @@ impl<'a> Parser<'a> {
9196
Token::Dot => {
9297
self.eat(Token::Dot)?;
9398
if let Token::Identifier(key) = self.lexer.next() {
94-
node = Node::Index(Box::new(Index { target: node, key}))
99+
node = Node::Index(Box::new(Index { target: node, key }))
95100
};
96101
}
97102
_ => break,
@@ -378,16 +383,20 @@ impl<'a> Parser<'a> {
378383
_ => value,
379384
};
380385
match expression {
381-
Node::Identifier(iden) => Ok(Node::AssignmentExpr(Box::new(AssignmentExpr {
382-
identifier: iden.clone(),
383-
value,
384-
}))),
385-
Node::Index(index) => Ok(Node::SetPropertyExpr(Box::new(SetPropertyExpr {
386-
target: index.target,
387-
key: index.key,
388-
value
389-
}))),
390-
node => Err(NekoError::TypeError(format!("Invalid assignment {}", node)))
386+
Node::Identifier(iden) => {
387+
Ok(Node::AssignmentExpr(Box::new(AssignmentExpr {
388+
identifier: iden,
389+
value,
390+
})))
391+
}
392+
Node::Index(index) => {
393+
Ok(Node::SetPropertyExpr(Box::new(SetPropertyExpr {
394+
target: index.target,
395+
key: index.key,
396+
value,
397+
})))
398+
}
399+
node => Err(NekoError::TypeError(format!("Invalid assignment {}", node))),
391400
}
392401
} else {
393402
Err(NekoError::SyntaxError(format!(

src/semantic_analyzer.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ pub struct SemanticAnalyzer {
1616
impl SemanticAnalyzer {
1717
pub fn new() -> Self {
1818
let scope = Rc::new(RefCell::new(SymbolTable::new("global", 1, None)));
19-
let built_in = vec![Symbol::BuiltInSymbol(String::from("print")), Symbol::BuiltInSymbol(String::from("error"))];
19+
let built_in = vec![
20+
Symbol::BuiltInSymbol(String::from("print")),
21+
Symbol::BuiltInSymbol(String::from("error")),
22+
];
2023

2124
for built in built_in {
2225
match built {

src/symbol_table.rs

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ impl SymbolTable {
3535
self.enclosing_scope
3636
.as_ref()
3737
.and_then(|scope| scope.borrow().look_up(name, false))
38-
.clone()
3938
}
4039
})
4140
}

0 commit comments

Comments
 (0)