fix(tvix/eval): address various clippy lints

Change-Id: I3ea0f51475e80948adfeb5d1620c1f2665cc39bc
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6201
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Vincent Ambo 2022-08-14 02:51:09 +03:00 committed by tazjin
parent c4f73eecdc
commit ab9407bded
6 changed files with 30 additions and 41 deletions

View file

@ -14,7 +14,6 @@
//! mistakes early during development. //! mistakes early during development.
use path_clean::PathClean; use path_clean::PathClean;
use rnix;
use rnix::types::{BinOpKind, EntryHolder, TokenWrapper, TypedNode, Wrapper}; use rnix::types::{BinOpKind, EntryHolder, TokenWrapper, TypedNode, Wrapper};
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
@ -735,7 +734,7 @@ impl Compiler {
// TL;DR - iterate from the back while things belonging to the // TL;DR - iterate from the back while things belonging to the
// ended scope still exist. // ended scope still exist.
while scope.locals.len() > 0 while !scope.locals.is_empty()
&& scope.locals[scope.locals.len() - 1].depth > scope.scope_depth && scope.locals[scope.locals.len() - 1].depth > scope.scope_depth
{ {
pops += 1; pops += 1;

View file

@ -12,7 +12,7 @@ pub fn interpret(code: &str, location: Option<PathBuf>) -> EvalResult<Value> {
todo!() todo!()
} }
if let Ok(_) = std::env::var("TVIX_DISPLAY_AST") { if std::env::var("TVIX_DISPLAY_AST").is_ok() {
println!("{}", ast.root().dump()); println!("{}", ast.root().dump());
} }

View file

@ -32,7 +32,9 @@ fn run_file(file: &str) {
fn state_dir() -> Option<PathBuf> { fn state_dir() -> Option<PathBuf> {
let mut path = dirs::data_dir(); let mut path = dirs::data_dir();
path.as_mut().map(|p| p.push("tvix")); if let Some(p) = path.as_mut() {
p.push("tvix")
}
path path
} }

View file

@ -52,11 +52,11 @@ impl AttrsRep {
AttrsRep::KV { name, value } => { AttrsRep::KV { name, value } => {
if key == "name" { if key == "name" {
return Some(&name); return Some(name);
} }
if key == "value" { if key == "value" {
return Some(&value); return Some(value);
} }
None None
@ -310,21 +310,16 @@ fn attempt_optimise_kv(slice: &mut [Value]) -> Option<NixAttrs> {
// Set an attribute on an in-construction attribute set, while // Set an attribute on an in-construction attribute set, while
// checking against duplicate keys. // checking against duplicate keys.
fn set_attr(attrs: &mut NixAttrs, key: NixString, value: Value) -> EvalResult<()> { fn set_attr(attrs: &mut NixAttrs, key: NixString, value: Value) -> EvalResult<()> {
let attrs = attrs.0.map_mut(); match attrs.0.map_mut().entry(key) {
let entry = attrs.entry(key); std::collections::btree_map::Entry::Occupied(entry) => Err(Error::DuplicateAttrsKey {
match entry {
std::collections::btree_map::Entry::Occupied(entry) => {
return Err(Error::DuplicateAttrsKey {
key: entry.key().as_str().to_string(), key: entry.key().as_str().to_string(),
}) }),
}
std::collections::btree_map::Entry::Vacant(entry) => { std::collections::btree_map::Entry::Vacant(entry) => {
entry.insert(value); entry.insert(value);
return Ok(()); Ok(())
}
} }
};
} }
// Set a nested attribute inside of an attribute set, throwing a // Set a nested attribute inside of an attribute set, throwing a
@ -345,16 +340,13 @@ fn set_nested_attr(
return set_attr(attrs, key, value); return set_attr(attrs, key, value);
} }
let attrs = attrs.0.map_mut();
let entry = attrs.entry(key);
// If there is not we go one step further down, in which case we // If there is not we go one step further down, in which case we
// need to ensure that there either is no entry, or the existing // need to ensure that there either is no entry, or the existing
// entry is a hashmap into which to insert the next value. // entry is a hashmap into which to insert the next value.
// //
// If a value of a different type exists, the user specified a // If a value of a different type exists, the user specified a
// duplicate key. // duplicate key.
match entry { match attrs.0.map_mut().entry(key) {
// Vacant entry -> new attribute set is needed. // Vacant entry -> new attribute set is needed.
std::collections::btree_map::Entry::Vacant(entry) => { std::collections::btree_map::Entry::Vacant(entry) => {
let mut map = NixAttrs(AttrsRep::Map(BTreeMap::new())); let mut map = NixAttrs(AttrsRep::Map(BTreeMap::new()));

View file

@ -33,11 +33,7 @@ pub enum Value {
impl Value { impl Value {
pub fn is_number(&self) -> bool { pub fn is_number(&self) -> bool {
match self { matches!(self, Value::Integer(_) | Value::Float(_))
Value::Integer(_) => true,
Value::Float(_) => true,
_ => false,
}
} }
pub fn type_of(&self) -> &'static str { pub fn type_of(&self) -> &'static str {
@ -66,7 +62,7 @@ impl Value {
} }
} }
pub fn as_string(self) -> EvalResult<NixString> { pub fn to_string(self) -> EvalResult<NixString> {
match self { match self {
Value::String(s) => Ok(s), Value::String(s) => Ok(s),
other => Err(Error::TypeError { other => Err(Error::TypeError {
@ -76,7 +72,7 @@ impl Value {
} }
} }
pub fn as_attrs(self) -> EvalResult<Rc<NixAttrs>> { pub fn to_attrs(self) -> EvalResult<Rc<NixAttrs>> {
match self { match self {
Value::Attrs(s) => Ok(s), Value::Attrs(s) => Ok(s),
other => Err(Error::TypeError { other => Err(Error::TypeError {
@ -86,7 +82,7 @@ impl Value {
} }
} }
pub fn as_list(self) -> EvalResult<NixList> { pub fn to_list(self) -> EvalResult<NixList> {
match self { match self {
Value::List(l) => Ok(l), Value::List(l) => Ok(l),
other => Err(Error::TypeError { other => Err(Error::TypeError {

View file

@ -159,15 +159,15 @@ impl VM {
OpCode::OpAttrPath(count) => self.run_attr_path(count)?, OpCode::OpAttrPath(count) => self.run_attr_path(count)?,
OpCode::OpAttrsUpdate => { OpCode::OpAttrsUpdate => {
let rhs = self.pop().as_attrs()?; let rhs = self.pop().to_attrs()?;
let lhs = self.pop().as_attrs()?; let lhs = self.pop().to_attrs()?;
self.push(Value::Attrs(Rc::new(lhs.update(&rhs)))) self.push(Value::Attrs(Rc::new(lhs.update(&rhs))))
} }
OpCode::OpAttrsSelect => { OpCode::OpAttrsSelect => {
let key = self.pop().as_string()?; let key = self.pop().to_string()?;
let attrs = self.pop().as_attrs()?; let attrs = self.pop().to_attrs()?;
match attrs.select(key.as_str()) { match attrs.select(key.as_str()) {
Some(value) => self.push(value.clone()), Some(value) => self.push(value.clone()),
@ -181,8 +181,8 @@ impl VM {
} }
OpCode::OpAttrOrNotFound => { OpCode::OpAttrOrNotFound => {
let key = self.pop().as_string()?; let key = self.pop().to_string()?;
let attrs = self.pop().as_attrs()?; let attrs = self.pop().to_attrs()?;
match attrs.select(key.as_str()) { match attrs.select(key.as_str()) {
Some(value) => self.push(value.clone()), Some(value) => self.push(value.clone()),
@ -191,8 +191,8 @@ impl VM {
} }
OpCode::OpAttrsIsSet => { OpCode::OpAttrsIsSet => {
let key = self.pop().as_string()?; let key = self.pop().to_string()?;
let attrs = self.pop().as_attrs()?; let attrs = self.pop().to_attrs()?;
let result = Value::Bool(attrs.select(key.as_str()).is_some()); let result = Value::Bool(attrs.select(key.as_str()).is_some());
self.push(result); self.push(result);
} }
@ -204,8 +204,8 @@ impl VM {
} }
OpCode::OpConcat => { OpCode::OpConcat => {
let rhs = self.pop().as_list()?; let rhs = self.pop().to_list()?;
let lhs = self.pop().as_list()?; let lhs = self.pop().to_list()?;
self.push(Value::List(lhs.concat(&rhs))) self.push(Value::List(lhs.concat(&rhs)))
} }
@ -290,7 +290,7 @@ impl VM {
let mut path = Vec::with_capacity(count); let mut path = Vec::with_capacity(count);
for _ in 0..count { for _ in 0..count {
path.push(self.pop().as_string()?); path.push(self.pop().to_string()?);
} }
self.push(Value::AttrPath(path)); self.push(Value::AttrPath(path));
@ -310,7 +310,7 @@ impl VM {
let mut out = String::new(); let mut out = String::new();
for _ in 0..count { for _ in 0..count {
out.push_str(&self.pop().as_string()?.as_str()); out.push_str(self.pop().to_string()?.as_str());
} }
self.push(Value::String(out.into())); self.push(Value::String(out.into()));