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:
parent
c4f73eecdc
commit
ab9407bded
6 changed files with 30 additions and 41 deletions
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()));
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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()));
|
||||||
|
|
Loading…
Reference in a new issue