From 62d671d1031a6f7d3eee20d7cf63848a418bfa5e Mon Sep 17 00:00:00 2001 From: gibbz00 Date: Mon, 6 Jan 2025 17:26:53 +0100 Subject: [PATCH 1/5] chore: run `cargo fix` --- examples/interior_mutability.rs | 6 +----- examples/spellcheck.rs | 1 - libs/steel-markdown/src/lib.rs | 7 ++----- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/examples/interior_mutability.rs b/examples/interior_mutability.rs index 78398eb21..bd6337d20 100644 --- a/examples/interior_mutability.rs +++ b/examples/interior_mutability.rs @@ -1,8 +1,4 @@ -use std::{ - cell::RefCell, - rc::Rc, - sync::{Arc, Mutex}, -}; +use std::sync::{Arc, Mutex}; use steel::steel_vm::engine::Engine; use steel::steel_vm::register_fn::RegisterFn; diff --git a/examples/spellcheck.rs b/examples/spellcheck.rs index e49af8dc2..6cf024032 100644 --- a/examples/spellcheck.rs +++ b/examples/spellcheck.rs @@ -7,7 +7,6 @@ use steel_derive::Steel; use steel::steel_vm::engine::Engine; use steel_repl::run_repl; -use std::cell::RefCell; use std::cmp::{max, min}; use std::collections::HashMap; use std::process; diff --git a/libs/steel-markdown/src/lib.rs b/libs/steel-markdown/src/lib.rs index a5edd145d..d47cd568f 100644 --- a/libs/steel-markdown/src/lib.rs +++ b/libs/steel-markdown/src/lib.rs @@ -1,15 +1,12 @@ -use std::rc::Rc; - -use abi_stable::std_types::RBoxError; use steel::{ gc::Shared, - rvals::{Custom, SerializableSteelVal}, + rvals::Custom, steel_vm::ffi::{FFIModule, FFIValue, IntoFFIVal, RegisterFFIFn}, }; use pulldown_cmark::{CodeBlockKind, CowStr, Event, Options, Parser, Tag, TagEnd}; -use syntect::highlighting::{Color, ThemeSet}; +use syntect::highlighting::ThemeSet; use syntect::{html::highlighted_html_for_string, parsing::SyntaxSet}; // fn main() { From 8d2eb9e8b56dd8d82d1e98fb88b66fcc05d64635 Mon Sep 17 00:00:00 2001 From: gibbz00 Date: Mon, 6 Jan 2025 22:14:39 +0100 Subject: [PATCH 2/5] chore: remove `PartialEq` impl for `UserDefinedStruct` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clippy is rightfully erroring about `derived_hash_with_manual_eq` as given that the `k1 == k2 ⇒ hash(k1) == hash(k2)` invariant isn't being respected. --- crates/steel-core/src/values/structs.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/crates/steel-core/src/values/structs.rs b/crates/steel-core/src/values/structs.rs index ca55ad677..4fac62d4d 100644 --- a/crates/steel-core/src/values/structs.rs +++ b/crates/steel-core/src/values/structs.rs @@ -171,13 +171,6 @@ impl UserDefinedStruct { } } -// TODO: This could blow the stack for big trees... -impl PartialEq for UserDefinedStruct { - fn eq(&self, other: &Self) -> bool { - self.type_descriptor == other.type_descriptor && self.fields.deref() == other.fields.deref() - } -} - impl std::fmt::Display for UserDefinedStruct { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { if self From cf6472b5640062edc84fbb45194e288e4aebe9fe Mon Sep 17 00:00:00 2001 From: gibbz00 Date: Mon, 6 Jan 2025 22:22:06 +0100 Subject: [PATCH 3/5] chore: remove unused `SafepointablePointer::get_mut` Violates `mut_from_ref` clippy error. --- crates/steel-core/src/steel_vm/vm.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/crates/steel-core/src/steel_vm/vm.rs b/crates/steel-core/src/steel_vm/vm.rs index 72ceb6119..0843ead05 100644 --- a/crates/steel-core/src/steel_vm/vm.rs +++ b/crates/steel-core/src/steel_vm/vm.rs @@ -361,10 +361,6 @@ pub struct SafepointablePointer { } impl SafepointablePointer { - pub unsafe fn get_mut(&self) -> &mut T { - &mut *self.value.get() - } - pub unsafe fn get_safepoint_safe(&self) -> Option<&T> { if self .within_safepoint From 4f1d17302a4e834fc38227615807e34b5acebf6f Mon Sep 17 00:00:00 2001 From: gibbz00 Date: Mon, 6 Jan 2025 22:42:23 +0100 Subject: [PATCH 4/5] chore: remove `#![allow(unused)]` annotations Ran: ```sh fd --hidden --type file .rs | xargs \ sed --regexp-extended -i -e 's/(#!|\s*#)\[allow\(unused\)\]//g' ``` --- crates/steel-core/benches/my_benchmark.rs | 2 -- crates/steel-core/src/compiler/code_gen.rs | 1 - crates/steel-core/src/compiler/compiler.rs | 2 -- crates/steel-core/src/compiler/modules.rs | 4 ++-- crates/steel-core/src/compiler/program.rs | 3 +-- crates/steel-core/src/env.rs | 1 - crates/steel-core/src/gc.rs | 2 +- crates/steel-core/src/jit/code_gen.rs | 2 +- crates/steel-core/src/jit/lower.rs | 2 +- crates/steel-core/src/jit/mod.rs | 2 +- crates/steel-core/src/steel_vm/contract_checker.rs | 2 +- crates/steel-core/src/steel_vm/engine.rs | 2 -- crates/steel-core/src/steel_vm/meta.rs | 2 -- crates/steel-core/src/steel_vm/register_fn.rs | 2 -- crates/steel-core/src/steel_vm/vm.rs | 3 --- crates/steel-core/src/values/functions.rs | 2 -- crates/steel-core/src/values/json_vals.rs | 2 +- crates/steel-core/src/values/recycler.rs | 1 - crates/steel-core/src/values/structs.rs | 1 - crates/steel-doc/src/lib.rs | 2 -- crates/steel-gen/src/lib.rs | 1 - crates/steel-language-server/src/backend.rs | 2 -- crates/steel-language-server/src/diagnostics.rs | 2 -- libs/steel-rustls/src/lib.rs | 1 - libs/steel-sqlite/src/lib.rs | 1 - 25 files changed, 9 insertions(+), 38 deletions(-) diff --git a/crates/steel-core/benches/my_benchmark.rs b/crates/steel-core/benches/my_benchmark.rs index 7ca9a9c6e..41de2b96e 100644 --- a/crates/steel-core/benches/my_benchmark.rs +++ b/crates/steel-core/benches/my_benchmark.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use criterion::{black_box, criterion_group, criterion_main, Criterion}; use steel::stdlib::PRELUDE; diff --git a/crates/steel-core/src/compiler/code_gen.rs b/crates/steel-core/src/compiler/code_gen.rs index 69121476b..eee91a6d3 100644 --- a/crates/steel-core/src/compiler/code_gen.rs +++ b/crates/steel-core/src/compiler/code_gen.rs @@ -213,7 +213,6 @@ impl<'a> CodeGenerator<'a> { Some(()) } - #[allow(unused)] fn specialize_call(&mut self, l: &List, op: OpCode) -> Option<()> { if l.args.len() != 3 { return None; diff --git a/crates/steel-core/src/compiler/compiler.rs b/crates/steel-core/src/compiler/compiler.rs index 85c9d3e40..3453b7736 100644 --- a/crates/steel-core/src/compiler/compiler.rs +++ b/crates/steel-core/src/compiler/compiler.rs @@ -349,7 +349,6 @@ pub struct SerializableCompiler { } impl SerializableCompiler { - #[allow(unused)] pub(crate) fn into_compiler(self) -> Compiler { let mut compiler = Compiler::default(); @@ -364,7 +363,6 @@ impl SerializableCompiler { } impl Compiler { - #[allow(unused)] pub(crate) fn into_serializable_compiler(self) -> Result { Ok(SerializableCompiler { symbol_map: self.symbol_map, diff --git a/crates/steel-core/src/compiler/modules.rs b/crates/steel-core/src/compiler/modules.rs index 9f7896058..f58e8d6be 100644 --- a/crates/steel-core/src/compiler/modules.rs +++ b/crates/steel-core/src/compiler/modules.rs @@ -234,7 +234,7 @@ impl ModuleManager { Ok(()) } - // #[allow(unused)] + // pub(crate) fn compile_main( &mut self, global_macro_map: &mut FxHashMap, @@ -1678,7 +1678,7 @@ struct ModuleBuilder<'a> { impl<'a> ModuleBuilder<'a> { #[allow(clippy::too_many_arguments)] - #[allow(unused)] + fn main( name: Option, source_ast: Vec, diff --git a/crates/steel-core/src/compiler/program.rs b/crates/steel-core/src/compiler/program.rs index c6b6e3f3f..ae3f6572e 100644 --- a/crates/steel-core/src/compiler/program.rs +++ b/crates/steel-core/src/compiler/program.rs @@ -512,7 +512,6 @@ pub const fn sequence_to_opcode(pattern: &[(OpCode, usize)]) -> &'static [steel_ } } -#[allow(unused)] pub fn tile_super_instructions(instructions: &mut [Instruction]) { #[cfg(feature = "dynamic")] { @@ -1189,7 +1188,7 @@ fn extract_spans( // A program stripped of its debug symbols, but only constructable by running a pass // over it with the symbol map to intern all of the symbols in the order they occurred -#[allow(unused)] + #[derive(Clone)] pub struct Executable { pub(crate) name: Shared, diff --git a/crates/steel-core/src/env.rs b/crates/steel-core/src/env.rs index b39609608..9debdab2c 100644 --- a/crates/steel-core/src/env.rs +++ b/crates/steel-core/src/env.rs @@ -5,7 +5,6 @@ use std::sync::Arc; use crate::rvals::{Result, SteelVal}; -#[allow(unused)] #[derive(Debug)] pub struct Env { #[cfg(not(feature = "sync"))] diff --git a/crates/steel-core/src/gc.rs b/crates/steel-core/src/gc.rs index 3d561290d..464d04e52 100644 --- a/crates/steel-core/src/gc.rs +++ b/crates/steel-core/src/gc.rs @@ -627,7 +627,7 @@ pub mod unsafe_roots { } // #[cfg(feature = "unsafe-internals")] -#[allow(unused)] + pub mod unsafe_erased_pointers { /* Warning - here be dragons. Definitely a lot of unsafe things here, and when used incorrectly diff --git a/crates/steel-core/src/jit/code_gen.rs b/crates/steel-core/src/jit/code_gen.rs index 119b65f05..07e8a15b6 100644 --- a/crates/steel-core/src/jit/code_gen.rs +++ b/crates/steel-core/src/jit/code_gen.rs @@ -1,4 +1,4 @@ -#![allow(unused)] + use crate::gc::Gc; use crate::jit::ir::*; diff --git a/crates/steel-core/src/jit/lower.rs b/crates/steel-core/src/jit/lower.rs index fa8441cf8..dd10bdf8c 100644 --- a/crates/steel-core/src/jit/lower.rs +++ b/crates/steel-core/src/jit/lower.rs @@ -1,4 +1,4 @@ -#![allow(unused)] + use crate::parser::ast::ExprKind; use crate::parser::tokens::TokenType; diff --git a/crates/steel-core/src/jit/mod.rs b/crates/steel-core/src/jit/mod.rs index e62348982..abf5bb2d7 100644 --- a/crates/steel-core/src/jit/mod.rs +++ b/crates/steel-core/src/jit/mod.rs @@ -1,4 +1,4 @@ -#![allow(unused)] + pub mod code_gen; pub mod ir; diff --git a/crates/steel-core/src/steel_vm/contract_checker.rs b/crates/steel-core/src/steel_vm/contract_checker.rs index 72405e521..b0f82e6e3 100644 --- a/crates/steel-core/src/steel_vm/contract_checker.rs +++ b/crates/steel-core/src/steel_vm/contract_checker.rs @@ -1,6 +1,6 @@ /* -#![allow(unused)] + use std::collections::{BTreeSet, HashMap}; use quickscope::ScopeMap; diff --git a/crates/steel-core/src/steel_vm/engine.rs b/crates/steel-core/src/steel_vm/engine.rs index eec5215bb..ed5b49ae0 100644 --- a/crates/steel-core/src/steel_vm/engine.rs +++ b/crates/steel-core/src/steel_vm/engine.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use super::{ builtin::{BuiltInModule, FunctionSignatureMetadata}, primitives::{register_builtin_modules, CONSTANTS}, diff --git a/crates/steel-core/src/steel_vm/meta.rs b/crates/steel-core/src/steel_vm/meta.rs index 956b7907d..8501bd1a2 100644 --- a/crates/steel-core/src/steel_vm/meta.rs +++ b/crates/steel-core/src/steel_vm/meta.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - // pub type BuiltInSignature = fn(Vec, &mut dyn VmContext) -> Result;` use std::borrow::Cow; diff --git a/crates/steel-core/src/steel_vm/register_fn.rs b/crates/steel-core/src/steel_vm/register_fn.rs index f1bd6e5d5..1f6ffdab1 100644 --- a/crates/steel-core/src/steel_vm/register_fn.rs +++ b/crates/steel-core/src/steel_vm/register_fn.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use std::{cell::RefCell, future::Future, marker::PhantomData, rc::Rc, sync::Arc}; use super::{ diff --git a/crates/steel-core/src/steel_vm/vm.rs b/crates/steel-core/src/steel_vm/vm.rs index 0843ead05..11b680903 100644 --- a/crates/steel-core/src/steel_vm/vm.rs +++ b/crates/steel-core/src/steel_vm/vm.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use crate::compiler::code_gen::fresh_function_id; use crate::compiler::compiler::Compiler; use crate::core::instructions::pretty_print_dense_instructions; @@ -6677,7 +6675,6 @@ fn set_alloc_handler(ctx: &mut VmCore<'_>) -> Result<()> { */ } -#[allow(unused)] mod handlers { use super::*; diff --git a/crates/steel-core/src/values/functions.rs b/crates/steel-core/src/values/functions.rs index c1cd36448..9c9cfba92 100644 --- a/crates/steel-core/src/values/functions.rs +++ b/crates/steel-core/src/values/functions.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use std::{ cell::{Cell, RefCell}, collections::HashMap, diff --git a/crates/steel-core/src/values/json_vals.rs b/crates/steel-core/src/values/json_vals.rs index 29f18e261..b0c66ad32 100644 --- a/crates/steel-core/src/values/json_vals.rs +++ b/crates/steel-core/src/values/json_vals.rs @@ -48,7 +48,7 @@ pub fn serialize_val_to_string(value: SteelVal) -> Result { } // required to parse each string -#[allow(unused)] + fn unescape(s: &str) -> String { let mut result = String::with_capacity(s.len()); let mut chars = s.chars(); diff --git a/crates/steel-core/src/values/recycler.rs b/crates/steel-core/src/values/recycler.rs index abe31ad9d..46c805fe3 100644 --- a/crates/steel-core/src/values/recycler.rs +++ b/crates/steel-core/src/values/recycler.rs @@ -69,7 +69,6 @@ impl std::hash::Hash for Recycle { static RECYCLE_LIMIT: AtomicUsize = AtomicUsize::new(128); -#[allow(unused)] fn set_recycle_limit(value: usize) { RECYCLE_LIMIT.store(value, Ordering::Relaxed); } diff --git a/crates/steel-core/src/values/structs.rs b/crates/steel-core/src/values/structs.rs index 4fac62d4d..c3511399a 100644 --- a/crates/steel-core/src/values/structs.rs +++ b/crates/steel-core/src/values/structs.rs @@ -1,4 +1,3 @@ -#![allow(unused)] #![allow(clippy::type_complexity)] use crate::steel_vm::primitives::{steel_unbox_mutable, unbox_mutable}; diff --git a/crates/steel-doc/src/lib.rs b/crates/steel-doc/src/lib.rs index 6eb1295fd..62092d575 100644 --- a/crates/steel-doc/src/lib.rs +++ b/crates/steel-doc/src/lib.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use std::{env::current_dir, error::Error, io::BufWriter, path::PathBuf}; use steel::compiler::modules::MANGLER_PREFIX; diff --git a/crates/steel-gen/src/lib.rs b/crates/steel-gen/src/lib.rs index edeb8d7bd..1906f7111 100644 --- a/crates/steel-gen/src/lib.rs +++ b/crates/steel-gen/src/lib.rs @@ -1,5 +1,4 @@ // TODO: Create stack to ssa representation of the op codes, via macros -#![allow(unused)] pub mod opcode; pub mod permutations; diff --git a/crates/steel-language-server/src/backend.rs b/crates/steel-language-server/src/backend.rs index ded3253a7..d3429ef9a 100644 --- a/crates/steel-language-server/src/backend.rs +++ b/crates/steel-language-server/src/backend.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use std::{ cell::RefCell, collections::{HashMap, HashSet}, diff --git a/crates/steel-language-server/src/diagnostics.rs b/crates/steel-language-server/src/diagnostics.rs index 791427b18..010d584f2 100644 --- a/crates/steel-language-server/src/diagnostics.rs +++ b/crates/steel-language-server/src/diagnostics.rs @@ -1,5 +1,3 @@ -#![allow(unused)] - use std::{ collections::{BTreeSet, HashMap}, iter::FlatMap, diff --git a/libs/steel-rustls/src/lib.rs b/libs/steel-rustls/src/lib.rs index 163242c66..bc5d70d1a 100644 --- a/libs/steel-rustls/src/lib.rs +++ b/libs/steel-rustls/src/lib.rs @@ -74,7 +74,6 @@ impl Clone for RustlsTcpStream { } } -#[allow(unused)] #[derive(Debug)] enum RustlsError { Io(std::io::Error), diff --git a/libs/steel-sqlite/src/lib.rs b/libs/steel-sqlite/src/lib.rs index 5f9b8ea79..c702c122d 100644 --- a/libs/steel-sqlite/src/lib.rs +++ b/libs/steel-sqlite/src/lib.rs @@ -142,7 +142,6 @@ impl Drop for SqliteTransaction { } } -#[allow(unused)] #[derive(Debug)] enum SqliteError { TransactionAlreadyCompleted, From dae4dad51f3d4d0ff568861ae0b1ebd194ace5c1 Mon Sep 17 00:00:00 2001 From: gibbz00 Date: Mon, 6 Jan 2025 22:47:47 +0100 Subject: [PATCH 5/5] chore: run `cargo fix` --- crates/cargo-steel-lib/src/lib.rs | 14 +--- crates/steel-core/src/gc.rs | 8 +-- crates/steel-core/src/steel_vm/engine.rs | 41 +++++------- crates/steel-core/src/steel_vm/meta.rs | 8 +-- crates/steel-core/src/steel_vm/register_fn.rs | 67 +++++++++---------- crates/steel-core/src/steel_vm/vm.rs | 35 +++------- crates/steel-core/src/steel_vm/vm/threads.rs | 8 +-- crates/steel-core/src/values/functions.rs | 29 ++------ crates/steel-core/src/values/structs.rs | 15 ++--- crates/steel-derive/src/lib.rs | 6 +- crates/steel-doc/src/lib.rs | 2 +- crates/steel-doc/src/main.rs | 13 ++-- crates/steel-gen/src/lib.rs | 14 ++-- crates/steel-gen/src/opcode.rs | 2 +- crates/steel-gen/src/permutations.rs | 2 +- crates/steel-language-server/src/backend.rs | 29 +++----- .../steel-language-server/src/diagnostics.rs | 55 +++++++-------- crates/steel-language-server/src/main.rs | 2 +- crates/steel-parser/src/ast.rs | 4 +- crates/steel-parser/src/lexer.rs | 34 +++++----- crates/steel-parser/src/parser.rs | 19 +++--- crates/steel-parser/src/span.rs | 2 +- crates/steel-parser/src/tokens.rs | 2 +- crates/steel-repl/src/highlight.rs | 4 +- crates/steel-repl/src/repl.rs | 4 +- libs/steel-async-webrequests/src/lib.rs | 8 +-- libs/steel-sqlite/src/lib.rs | 2 +- 27 files changed, 169 insertions(+), 260 deletions(-) diff --git a/crates/cargo-steel-lib/src/lib.rs b/crates/cargo-steel-lib/src/lib.rs index ffcf7fc9f..62a1cdce5 100644 --- a/crates/cargo-steel-lib/src/lib.rs +++ b/crates/cargo-steel-lib/src/lib.rs @@ -27,10 +27,8 @@ pub fn steel_home() -> Option { // this is probably not the best place to do this. This almost // assuredly could be lifted out of this check since failing here // could cause some annoyance. - if !x.exists() { - if let Err(_) = std::fs::create_dir(&x) { - eprintln!("Unable to create steel home directory {:?}", x) - } + if !x.exists() && std::fs::create_dir(&x).is_err() { + eprintln!("Unable to create steel home directory {:?}", x) } x @@ -94,13 +92,7 @@ pub fn run(args: Vec, env_vars: Vec<(String, String)>) -> Result<(), Box }); for last in artifacts { - if last - .target - .kind - .iter() - .find(|x| x.as_str() == "cdylib") - .is_some() - { + if last.target.kind.iter().any(|x| x.as_str() == "cdylib") { for file in last.filenames { if matches!(file.extension(), Some("so") | Some("dylib") | Some("lib")) { println!("Found a cdylib!"); diff --git a/crates/steel-core/src/gc.rs b/crates/steel-core/src/gc.rs index 464d04e52..ba8f56f0f 100644 --- a/crates/steel-core/src/gc.rs +++ b/crates/steel-core/src/gc.rs @@ -635,12 +635,8 @@ pub mod unsafe_erased_pointers { */ use std::cell::Cell; - use std::rc::{Rc, Weak}; - use std::{any::Any, cell::RefCell, marker::PhantomData}; - - use crate::steel_vm::engine::EngineId; - use once_cell::sync::Lazy; - use std::collections::HashMap; + use std::rc::Rc; + use std::{any::Any, marker::PhantomData}; use crate::rvals::cycles::IterativeDropHandler; use crate::rvals::{AsRefSteelValFromRef, MaybeSendSyncStatic}; diff --git a/crates/steel-core/src/steel_vm/engine.rs b/crates/steel-core/src/steel_vm/engine.rs index ed5b49ae0..6f5e9b3ea 100644 --- a/crates/steel-core/src/steel_vm/engine.rs +++ b/crates/steel-core/src/steel_vm/engine.rs @@ -1,6 +1,6 @@ use super::{ builtin::{BuiltInModule, FunctionSignatureMetadata}, - primitives::{register_builtin_modules, CONSTANTS}, + primitives::register_builtin_modules, vm::{SteelThread, ThreadStateController}, }; @@ -24,35 +24,25 @@ use crate::{ }, }, containers::RegisterValue, - core::{ - instructions::{pretty_print_dense_instructions, DenseInstruction, Instruction}, - labels::Expr, - }, gc::{ - unsafe_erased_pointers::{ - BorrowedObject, CustomReference, OpaqueReferenceNursery, ReadOnlyBorrowedObject, - ReferenceMarker, - }, + unsafe_erased_pointers::{CustomReference, ReferenceMarker}, Gc, Shared, }, parser::{ ast::ExprKind, expander::SteelMacro, - interner::{get_interner, take_interner, InternedString}, + interner::{get_interner, InternedString}, kernel::{fresh_kernel_image, Kernel}, - parser::{ParseError, Parser, Sources, SYNTAX_OBJECT_ID}, + parser::{ParseError, Parser, Sources}, }, rerrs::{back_trace, back_trace_to_string}, rvals::{ AsRefMutSteelVal, AsRefSteelVal as _, FromSteelVal, IntoSteelVal, MaybeSendSyncStatic, - Result, SteelString, SteelVal, + Result, SteelVal, }, steel_vm::register_fn::RegisterFn, stop, throw, - values::{ - closed::GlobalSlotRecycler, - functions::{BoxedDynFunction, ByteCodeLambda}, - }, + values::{closed::GlobalSlotRecycler, functions::BoxedDynFunction}, SteelErr, }; use std::{ @@ -60,25 +50,22 @@ use std::{ cell::{Cell, RefCell}, collections::{HashMap, HashSet}, path::PathBuf, - rc::Rc, sync::{ atomic::{AtomicBool, AtomicUsize, Ordering}, Arc, Mutex, }, }; -use crate::values::HashMap as ImmutableHashMap; use fxhash::{FxBuildHasher, FxHashMap}; use lasso::ThreadedRodeo; -use once_cell::sync::{Lazy, OnceCell}; +use once_cell::sync::OnceCell; use parking_lot::{ MappedRwLockReadGuard, MappedRwLockWriteGuard, RwLock, RwLockReadGuard, RwLockWriteGuard, }; use serde::{Deserialize, Serialize}; -use steel_gen::OpCode; use steel_parser::{ parser::{SourceId, SyntaxObject}, - tokens::{IntLiteral, TokenType}, + tokens::TokenType, }; use crate::parser::ast::IteratorExtensions; @@ -217,7 +204,7 @@ pub struct Engine { impl Clone for Engine { fn clone(&self) -> Self { - let mut virtual_machine = self.virtual_machine.clone(); + let virtual_machine = self.virtual_machine.clone(); let compiler = Arc::new(RwLock::new(self.virtual_machine.compiler.write().clone())); // virtual_machine.compiler = Some(Arc::downgrade(&compiler)); @@ -355,7 +342,7 @@ impl<'a> LifetimeGuard<'a> { thunk(self.engine, values) } - pub fn consume_once(self, mut thunk: impl FnOnce(&mut Engine, Vec) -> T) -> T { + pub fn consume_once(self, thunk: impl FnOnce(&mut Engine, Vec) -> T) -> T { let values = crate::gc::unsafe_erased_pointers::OpaqueReferenceNursery::drain_weak_references_to_steelvals(); @@ -467,7 +454,7 @@ impl Engine { let mut engine = self.clone(); engine.virtual_machine.global_env = engine.virtual_machine.global_env.deep_clone(); - let mut compiler_copy = engine.virtual_machine.compiler.read().clone(); + let compiler_copy = engine.virtual_machine.compiler.read().clone(); engine.virtual_machine.compiler = Arc::new(RwLock::new(compiler_copy)); @@ -1305,7 +1292,7 @@ impl Engine { T: ReferenceMarker<'b, Static = EXT>, { self.with_mut_reference(obj).consume(|engine, args| { - let mut args = args.into_iter(); + let args = args.into_iter(); thunk(engine, args.into_iter().next().unwrap_or(SteelVal::Void)) }) @@ -1325,7 +1312,7 @@ impl Engine { T: ReferenceMarker<'b, Static = EXT>, { self.with_immutable_reference(obj).consume(|engine, args| { - let mut args = args.into_iter(); + let args = args.into_iter(); thunk(engine, args.into_iter().next().unwrap_or(SteelVal::Void)) }) @@ -2367,6 +2354,8 @@ mod engine_sandbox_tests { #[cfg(test)] mod derive_macro_tests { + use crate::rvals::SteelString; + use super::*; #[derive(steel_derive::_Steel, PartialEq, Debug)] diff --git a/crates/steel-core/src/steel_vm/meta.rs b/crates/steel-core/src/steel_vm/meta.rs index 8501bd1a2..aea025451 100644 --- a/crates/steel-core/src/steel_vm/meta.rs +++ b/crates/steel-core/src/steel_vm/meta.rs @@ -1,20 +1,16 @@ // pub type BuiltInSignature = fn(Vec, &mut dyn VmContext) -> Result;` use std::borrow::Cow; -use std::{cell::RefCell, convert::TryFrom, io::Write, rc::Rc}; +use std::{convert::TryFrom, io::Write}; use crate::gc::shared::ShareableMut; use crate::parser::tryfrom_visitor::TryFromExprKindForSteelVal; // use im_lists::list::List; use crate::values::lists::List; -use crate::values::port::SteelPortRepr; use crate::values::structs::SteelResult; use crate::{ - parser::ast::ExprKind, - rvals::Custom, - values::port::{SteelPort, CAPTURED_OUTPUT_PORT, DEFAULT_OUTPUT_PORT}, - SteelErr, SteelVal, + parser::ast::ExprKind, rvals::Custom, values::port::CAPTURED_OUTPUT_PORT, SteelErr, SteelVal, }; use crate::{parser::expander::LocalMacroManager, rvals::Result}; use crate::{parser::parser::ParseError, steel_vm::engine::Engine}; diff --git a/crates/steel-core/src/steel_vm/register_fn.rs b/crates/steel-core/src/steel_vm/register_fn.rs index 1f6ffdab1..b466b3c6b 100644 --- a/crates/steel-core/src/steel_vm/register_fn.rs +++ b/crates/steel-core/src/steel_vm/register_fn.rs @@ -1,10 +1,7 @@ -use std::{cell::RefCell, future::Future, marker::PhantomData, rc::Rc, sync::Arc}; +use std::{future::Future, marker::PhantomData, rc::Rc, sync::Arc}; -use super::{ - builtin::{Arity, FunctionSignatureMetadata}, - engine::Engine, -}; -use crate::{gc::Gc, rvals::MaybeSendSyncStatic, values::lists::List}; +use super::engine::Engine; +use crate::{gc::Gc, rvals::MaybeSendSyncStatic}; use crate::{ gc::{ shared::MutContainer, @@ -348,7 +345,7 @@ impl< e.prepend_message(&format!("{}:", name)); e })?; - let mut area = ::from_steelval(&args[1]).map_err(|mut e| { + let area = ::from_steelval(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -396,7 +393,7 @@ impl< e.prepend_message(&format!("{}:", name)); e })?; - let mut area = ::from_steelval(&args[1]).map_err(|mut e| { + let area = ::from_steelval(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -439,13 +436,13 @@ impl< stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 3, args.len())); } - let mut nursery = ::Nursery::default(); + let nursery = ::Nursery::default(); let mut input = ::as_mut_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut area = ::as_ref(&args[1]).map_err(|mut e| { + let area = ::as_ref(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -484,17 +481,17 @@ impl< stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 3, args.len())); } - let mut nursery = ::Nursery::default(); + let nursery = ::Nursery::default(); - let mut input = ::as_ref(&args[0]).map_err(|mut e| { + let input = ::as_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut area = ::from_steelval(&args[1]).map_err(|mut e| { + let area = ::from_steelval(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut ctx = ::as_ref_from_ref(&args[2]).map_err(|mut e| { + let ctx = ::as_ref_from_ref(&args[2]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -776,7 +773,7 @@ impl< } // If this value is - let mut input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -809,7 +806,7 @@ impl< // Mark as borrowed now borrow_flag.set(true); - let mut borrowed = BorrowedObject::new(weak_ptr).with_parent_flag(borrow_flag); + let borrowed = BorrowedObject::new(weak_ptr).with_parent_flag(borrow_flag); let extended = unsafe { std::mem::transmute::, BorrowedObject>(borrowed) @@ -860,7 +857,7 @@ impl< } // If this value is - let mut input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -938,7 +935,7 @@ impl< } // If this value is - let mut input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1020,7 +1017,7 @@ impl< } // If this value is - let mut input = ::as_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1094,7 +1091,7 @@ impl< } // If this value is - let mut input = ::as_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1159,13 +1156,13 @@ impl< stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 3, args.len())); } - let mut nursery = ::Nursery::default(); + let nursery = ::Nursery::default(); let mut input = ::as_mut_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut area = ::as_ref(&args[1]).map_err(|mut e| { + let area = ::as_ref(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1204,17 +1201,17 @@ impl< stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 3, args.len())); } - let mut nursery = ::Nursery::default(); + let nursery = ::Nursery::default(); - let mut input = ::as_ref(&args[0]).map_err(|mut e| { + let input = ::as_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut area = ::from_steelval(&args[1]).map_err(|mut e| { + let area = ::from_steelval(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut ctx = ::as_ref_from_ref(&args[2]).map_err(|mut e| { + let ctx = ::as_ref_from_ref(&args[2]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1350,7 +1347,7 @@ impl< } // If this value is - let mut input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1434,7 +1431,7 @@ impl< } // If this value is - let mut input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1516,7 +1513,7 @@ impl< } // If this value is - let mut input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { + let input = ::as_mut_ref_from_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; @@ -1699,7 +1696,7 @@ impl RET + SendSyncStat stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 0, args.len())); } - let mut nursery = ::default(); + let nursery = ::default(); let input = ::as_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); @@ -1730,7 +1727,7 @@ impl RET + SendSyncStat stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 1, args.len())); } - let mut nursery = ::default(); + let nursery = ::default(); let input = ::as_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); @@ -1949,14 +1946,14 @@ impl< stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 2, args.len())); } - let mut nursery = ::default(); + let nursery = ::default(); let one = A::as_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); e })?; - let mut nursery = ::default(); + let nursery = ::default(); let two = B::as_ref(&args[1]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); @@ -1992,7 +1989,7 @@ impl< stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, 2, args.len())); } - let mut nursery = ::default(); + let nursery = ::default(); let input = B::as_ref(&args[1])?; @@ -2145,7 +2142,7 @@ macro_rules! impl_register_fn_self { stop!(ArityMismatch => format!("{} expected {} argument, got {}", name, $arg_count, args.len())); } - let mut nursery = ::default(); + let nursery = ::default(); let input = ::as_ref(&args[0]).map_err(|mut e| { e.prepend_message(&format!("{}:", name)); diff --git a/crates/steel-core/src/steel_vm/vm.rs b/crates/steel-core/src/steel_vm/vm.rs index 11b680903..7d003e028 100644 --- a/crates/steel-core/src/steel_vm/vm.rs +++ b/crates/steel-core/src/steel_vm/vm.rs @@ -1,6 +1,4 @@ -use crate::compiler::code_gen::fresh_function_id; use crate::compiler::compiler::Compiler; -use crate::core::instructions::pretty_print_dense_instructions; use crate::core::instructions::u24; use crate::gc::shared::MutContainer; use crate::gc::shared::ShareableMut; @@ -13,7 +11,6 @@ use crate::parser::parser::Sources; use crate::parser::replace_idents::expand_template; use crate::primitives::lists::car; use crate::primitives::lists::cdr; -use crate::primitives::lists::cons; use crate::primitives::lists::is_empty; use crate::primitives::lists::new as new_list; use crate::primitives::lists::steel_cons; @@ -28,7 +25,6 @@ use crate::rvals::SteelString; use crate::steel_vm::primitives::steel_not; use crate::steel_vm::primitives::steel_set_box_mutable; use crate::steel_vm::primitives::steel_unbox_mutable; -use crate::steel_vm::primitives::THREADING_MODULE; use crate::values::closed::Heap; use crate::values::closed::MarkAndSweepContext; use crate::values::functions::RootedInstructions; @@ -58,17 +54,11 @@ use crate::{ }; use std::cell::UnsafeCell; use std::io::Read as _; -use std::rc::Weak; use std::sync::atomic::AtomicBool; -use std::sync::mpsc::Sender; use std::sync::Arc; use std::sync::Mutex; -use std::thread::JoinHandle; -use std::thread::ThreadId; use std::{cell::RefCell, collections::HashMap, iter::Iterator, rc::Rc}; -use super::builtin::DocTemplate; -use super::builtin::MarkdownDoc; use super::engine::EngineId; use crate::values::lists::List; @@ -76,7 +66,6 @@ use crate::values::lists::List; use crossbeam::atomic::AtomicCell; #[cfg(feature = "profiling")] use log::{debug, log_enabled}; -use once_cell::sync::Lazy; use parking_lot::RwLock; use smallvec::SmallVec; #[cfg(feature = "profiling")] @@ -87,7 +76,7 @@ use threads::ThreadHandle; use crate::rvals::{from_serializable_value, into_serializable_value, IntoSteelVal}; pub(crate) mod threads; -pub(crate) use threads::{spawn_thread, thread_join}; +pub(crate) use threads::spawn_thread; pub use threads::{mutex_lock, mutex_unlock}; @@ -523,7 +512,7 @@ impl Synchronizer { pub(crate) unsafe fn enumerate_stacks(&mut self, context: &mut MarkAndSweepContext) { // TODO: Continue... - let mut guard = self.threads.lock().unwrap(); + let guard = self.threads.lock().unwrap(); // Wait for all the threads to be legal for ThreadContext { ctx, handle } in guard.iter() { @@ -889,7 +878,7 @@ impl SteelThread { // This is our pseudo "dynamic unwind" // If we need to, we'll walk back on the stack and find any handlers to pop 'outer: loop { - let result = vm_instance.vm().map_err(|mut error| { + let result = vm_instance.vm().map_err(|error| { error .set_span_if_none(vm_instance.current_span()) .with_stack_trace(vm_instance.snapshot_stack_trace()) @@ -909,7 +898,7 @@ impl SteelThread { if last .attachments .as_mut() - .and_then(|mut x| x.weak_continuation_mark.take()) + .and_then(|x| x.weak_continuation_mark.take()) .is_some() { vm_instance.thread.stack.truncate(last.sp as _); @@ -921,8 +910,7 @@ impl SteelThread { vm_instance.close_continuation_marks(&last); } - if let Some(handler) = - last.attachments.as_mut().and_then(|mut x| x.handler.take()) + if let Some(handler) = last.attachments.as_mut().and_then(|x| x.handler.take()) { // Drop the stack BACK to where it was on this level vm_instance.thread.stack.truncate(last.sp); @@ -1787,7 +1775,7 @@ impl<'a> VmCore<'a> { if last .attachments .as_mut() - .and_then(|mut x| x.weak_continuation_mark.take()) + .and_then(|x| x.weak_continuation_mark.take()) .is_some() { self.thread.stack.truncate(last.sp); @@ -1800,8 +1788,7 @@ impl<'a> VmCore<'a> { self.close_continuation_marks(&last); } - if let Some(handler) = - last.attachments.as_mut().and_then(|mut x| x.handler.take()) + if let Some(handler) = last.attachments.as_mut().and_then(|x| x.handler.take()) { // Drop the stack BACK to where it was on this level self.thread.stack.truncate(last.sp); @@ -2869,7 +2856,7 @@ impl<'a> VmCore<'a> { self.ip = 0; - let mut closure_arity = last_stack_frame.function.arity(); + let closure_arity = last_stack_frame.function.arity(); // TODO: Adjust the stack for multiple arity functions let is_multi_arity = last_stack_frame.function.is_multi_arity; @@ -4401,7 +4388,7 @@ impl<'a> VmCore<'a> { self.sp = self.thread.stack.len() - closure.arity(); - let mut instructions = closure.body_exp(); + let instructions = closure.body_exp(); self.thread.stack_frames.push(StackFrame::new( self.sp, @@ -5099,7 +5086,7 @@ fn eval_program(program: crate::compiler::program::Executable, ctx: &mut VmCore) fn emit_expanded_file(path: String) { let mut engine = crate::steel_vm::engine::Engine::new(); - let mut contents = std::fs::read_to_string(&path).unwrap(); + let contents = std::fs::read_to_string(&path).unwrap(); engine.expand_to_file(contents, std::path::PathBuf::from(path)) } @@ -5459,7 +5446,7 @@ pub(crate) fn apply(ctx: &mut VmCore, args: &[SteelVal]) -> Option { - let mut args = l.into_iter().cloned().collect::>(); + let args = l.into_iter().cloned().collect::>(); let result = f.func()(&args).map_err(|e| e.set_span_if_none(ctx.current_span())); diff --git a/crates/steel-core/src/steel_vm/vm/threads.rs b/crates/steel-core/src/steel_vm/vm/threads.rs index b48210b96..ec5c870a1 100644 --- a/crates/steel-core/src/steel_vm/vm/threads.rs +++ b/crates/steel-core/src/steel_vm/vm/threads.rs @@ -159,7 +159,7 @@ pub fn closure_into_serializable( serializer: &mut std::collections::HashMap, visited: &mut std::collections::HashSet, ) -> Result { - if let Some(mut prototype) = CACHED_CLOSURES.with(|x| x.borrow().get(&c.id).cloned()) { + if let Some(prototype) = CACHED_CLOSURES.with(|x| x.borrow().get(&c.id).cloned()) { let mut prototype = SerializedLambda { id: prototype.id, body_exp: prototype.body_exp, @@ -177,7 +177,7 @@ pub fn closure_into_serializable( Ok(prototype) } else { - let mut prototype = SerializedLambdaPrototype { + let prototype = SerializedLambdaPrototype { id: c.id, #[cfg(not(feature = "dynamic"))] @@ -384,7 +384,7 @@ fn spawn_thread_result(ctx: &mut VmCore, args: &[SteelVal]) -> Result // TODO: Spawn a bunch of threads at the start to handle requests. That way we don't need to do this // the whole time they're in there. let handle = std::thread::spawn(move || { - let mut heap = time!("Heap Creation", Arc::new(Mutex::new(Heap::new()))); + let heap = time!("Heap Creation", Arc::new(Mutex::new(Heap::new()))); // Move across threads? let mut mapping = initial_map @@ -593,7 +593,7 @@ impl Channels { pub fn select(values: &[SteelVal]) -> Result { let mut selector = crossbeam::channel::Select::new(); - let mut borrows = values + let borrows = values .iter() .map(|x| SteelReceiver::as_ref(x)) .collect::>>()?; diff --git a/crates/steel-core/src/values/functions.rs b/crates/steel-core/src/values/functions.rs index 9c9cfba92..0af184420 100644 --- a/crates/steel-core/src/values/functions.rs +++ b/crates/steel-core/src/values/functions.rs @@ -1,37 +1,20 @@ -use std::{ - cell::{Cell, RefCell}, - collections::HashMap, - convert::TryFrom, - hash::Hasher, - sync::Arc, -}; - -use fxhash::FxHashSet; +use std::{collections::HashMap, hash::Hasher, sync::Arc}; use crate::{ - core::{instructions::DenseInstruction, opcode::OpCode}, + core::instructions::DenseInstruction, gc::{ shared::{MutContainer, ShareableMut}, Gc, Shared, SharedMut, }, - parser::{parser::SyntaxObjectId, span::Span}, + parser::parser::SyntaxObjectId, rvals::{ - from_serializable_value, into_serializable_value, AsRefSteelVal, Custom, FunctionSignature, - HeapSerializer, IntoSteelVal, MutFunctionSignature, SerializableSteelVal, SteelString, + from_serializable_value, AsRefSteelVal, Custom, HeapSerializer, IntoSteelVal, + SerializableSteelVal, SteelString, }, - steel_vm::{ - register_fn::SendSyncStatic, - vm::{BlockMetadata, BlockPattern, BuiltInSignature}, - }, - // values::contracts::ContractedFunction, - SteelErr, SteelVal, }; -use super::{ - closed::{Heap, HeapRef}, - structs::UserDefinedStruct, -}; +use super::structs::UserDefinedStruct; // pub(crate) enum Function { // BoxedFunction(BoxedFunctionSignature), diff --git a/crates/steel-core/src/values/structs.rs b/crates/steel-core/src/values/structs.rs index c3511399a..c3d8dd3fb 100644 --- a/crates/steel-core/src/values/structs.rs +++ b/crates/steel-core/src/values/structs.rs @@ -1,6 +1,6 @@ #![allow(clippy::type_complexity)] -use crate::steel_vm::primitives::{steel_unbox_mutable, unbox_mutable}; +use crate::steel_vm::primitives::steel_unbox_mutable; use crate::values::HashMap; use once_cell::sync::Lazy; use parking_lot::RwLock; @@ -11,29 +11,22 @@ use crate::parser::interner::InternedString; use crate::rerrs::ErrorKind; use crate::rvals::{ from_serializable_value, into_serializable_value, Custom, HeapSerializer, SerializableSteelVal, - SerializedHeapRef, SteelHashMap, }; use crate::rvals::{FromSteelVal, IntoSteelVal}; use crate::steel_vm::register_fn::RegisterFn; use crate::throw; use crate::{ gc::Gc, - rvals::{AsRefSteelVal, SRef, SteelString}, + rvals::{AsRefSteelVal, SteelString}, }; use crate::{ rvals::{Result, SteelVal}, SteelErr, }; use crate::{steel_vm::builtin::BuiltInModule, stop}; -use std::collections::VecDeque; -use std::ops::Deref; use std::sync::Arc; -use std::{ - cell::{Ref, RefCell}, - rc::Rc, -}; +use std::{cell::RefCell, rc::Rc}; -use super::closed::Heap; use super::functions::BoxedDynFunction; use super::lists::List; use super::recycler::Recycle; @@ -484,7 +477,7 @@ impl UserDefinedStruct { // This in practice should yield some nice performance pub fn struct_update_primitive(args: &mut [SteelVal]) -> Result { if let Some((SteelVal::CustomStruct(s), fields)) = args.split_first_mut() { - let mut fields = fields.iter_mut(); + let fields = fields.iter_mut(); let struct_fields = s.type_descriptor.fields(); diff --git a/crates/steel-derive/src/lib.rs b/crates/steel-derive/src/lib.rs index f6fef0165..2777efab5 100644 --- a/crates/steel-derive/src/lib.rs +++ b/crates/steel-derive/src/lib.rs @@ -149,7 +149,7 @@ fn derive_steel_impl(input: DeriveInput, prefix: proc_macro2::TokenStream) -> To let identifier = &variant.ident; for attr in &variant.attrs { - if !filter_out_ignored_attr(&attr) { + if !filter_out_ignored_attr(attr) { continue 'variant; } } @@ -540,9 +540,9 @@ fn parse_doc_comment(input: ItemFn) -> Option { args.push(expr); } - return Some(quote! { + Some(quote! { concat![#(#args),*] - }); + }) } #[proc_macro_attribute] diff --git a/crates/steel-doc/src/lib.rs b/crates/steel-doc/src/lib.rs index 62092d575..578c68997 100644 --- a/crates/steel-doc/src/lib.rs +++ b/crates/steel-doc/src/lib.rs @@ -1,4 +1,4 @@ -use std::{env::current_dir, error::Error, io::BufWriter, path::PathBuf}; +use std::{env::current_dir, error::Error, path::PathBuf}; use steel::compiler::modules::MANGLER_PREFIX; use steel::steel_vm::engine::Engine; diff --git a/crates/steel-doc/src/main.rs b/crates/steel-doc/src/main.rs index c868b0b03..925cf354b 100644 --- a/crates/steel-doc/src/main.rs +++ b/crates/steel-doc/src/main.rs @@ -35,7 +35,7 @@ fn main() { // module.documentation().definitions().get() - if let Some(module_doc) = module.documentation().get(&module_name) { + if let Some(module_doc) = module.documentation().get(module_name) { if let steel::steel_vm::builtin::Documentation::Markdown(m) = module_doc { format_markdown_doc(&mut module_file, &m.0); } @@ -60,14 +60,11 @@ fn main() { found_definitions.insert(name.to_string()); - match value { - steel::steel_vm::builtin::Documentation::Markdown(m) => { - let escaped = name.replace("*", "\\*"); - writeln!(&mut module_file, "### **{}**", escaped).unwrap(); + if let steel::steel_vm::builtin::Documentation::Markdown(m) = value { + let escaped = name.replace("*", "\\*"); + writeln!(&mut module_file, "### **{}**", escaped).unwrap(); - format_markdown_doc(&mut module_file, &m.0); - } - _ => {} + format_markdown_doc(&mut module_file, &m.0); } } } diff --git a/crates/steel-gen/src/lib.rs b/crates/steel-gen/src/lib.rs index 1906f7111..c9a6971e5 100644 --- a/crates/steel-gen/src/lib.rs +++ b/crates/steel-gen/src/lib.rs @@ -330,7 +330,7 @@ impl StackToSSAConverter { max_local_offset_read = max_local_offset_read.max(0); } else { let local = self.push(); - let var = self.stack.get(0).unwrap(); + let var = self.stack.first().unwrap(); if &local == var { lines.line(format!( @@ -362,7 +362,7 @@ impl StackToSSAConverter { if &local == var { // let local = self.pop(); - let var = self.stack.get(0).unwrap(); + let var = self.stack.first().unwrap(); lines.line(format!("let {local} = {var}.clone();")); lines.line("ctx.ip += 1;") @@ -454,7 +454,7 @@ impl StackToSSAConverter { max_local_offset_read = max_local_offset_read.max(0); } else { let local = self.push(); - let var = self.stack.get(0).unwrap(); + let var = self.stack.first().unwrap(); lines.line(format!("let {local} = {var};")); } } @@ -806,7 +806,7 @@ impl<'a> Call<'a> { } } -impl<'a> std::fmt::Display for Call<'a> { +impl std::fmt::Display for Call<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.name)?; write!(f, "(")?; @@ -951,7 +951,7 @@ pub fn generate_opcode_map() -> String { for pattern in patterns { let original_pattern = pattern; - let pattern = Pattern::from_opcodes(&pattern); + let pattern = Pattern::from_opcodes(pattern); if pattern.is_empty() { dbg!("Pattern produced empty result: {:?}", original_pattern); @@ -1058,8 +1058,6 @@ fn test() { // Pattern::Single(OpCode::IF), // ]; - use OpCode::*; - let op_codes = vec![ (OpCode::BEGINSCOPE, 0), (OpCode::READLOCAL0, 0), @@ -1093,8 +1091,6 @@ fn test() { #[test] fn test_generation() { - use OpCode::*; - // TODO: Come up with better way for this to make it in // let patterns: &'static [&'static [(OpCode, usize)]] = &[&[ // (MOVEREADLOCAL0, 0), diff --git a/crates/steel-gen/src/opcode.rs b/crates/steel-gen/src/opcode.rs index 74e079e4e..c92025aef 100644 --- a/crates/steel-gen/src/opcode.rs +++ b/crates/steel-gen/src/opcode.rs @@ -200,7 +200,7 @@ impl OpCode { pub fn is_super_instruction(&self) -> bool { // TODO: Check where super instructions start! - return *self as u32 > Self::LTEIMMEDIATEIF as u32; + *self as u32 > Self::LTEIMMEDIATEIF as u32 } /// Statically create the mapping we need for super instruction. Also, as part of the op code map generating, diff --git a/crates/steel-gen/src/permutations.rs b/crates/steel-gen/src/permutations.rs index f04474162..214c560aa 100644 --- a/crates/steel-gen/src/permutations.rs +++ b/crates/steel-gen/src/permutations.rs @@ -233,7 +233,7 @@ fn code_gen_permutation(values: &[ValueKind], id: usize, row: usize) -> String { let mut scope = codegen::Scope::new(); - let mut marker = scope.new_struct(&format!("Marker{row}{id}")); + let marker = scope.new_struct(&format!("Marker{row}{id}")); marker.generic("ARGS"); marker.tuple_field("PhantomData"); diff --git a/crates/steel-language-server/src/backend.rs b/crates/steel-language-server/src/backend.rs index d3429ef9a..71af0b649 100644 --- a/crates/steel-language-server/src/backend.rs +++ b/crates/steel-language-server/src/backend.rs @@ -1,9 +1,8 @@ use std::{ - cell::RefCell, collections::{HashMap, HashSet}, error::Error, path::PathBuf, - sync::{Arc, Mutex, RwLock}, + sync::{Arc, RwLock}, }; use dashmap::{DashMap, DashSet}; @@ -255,10 +254,8 @@ impl LanguageServer for Backend { ); // Guaranteed to be here given that we've resolve it above - let definition_name = syntax_object_id_to_interned_string - .get(&refers_to) - .clone()? - .clone()?; + let definition_name = + (*syntax_object_id_to_interned_string.get(&refers_to)?)?; // Memoize a lot of these lookups if possible, or at least share the memory; let doc_suffix = definition_name.resolve().to_string() + "__doc__"; @@ -316,10 +313,7 @@ impl LanguageServer for Backend { // Resolve what we've found? analysis.syntax_object_ids_to_identifiers(&mut syntax_object_id_to_interned_string); - let definition_name = syntax_object_id_to_interned_string - .get(&refers_to) - .clone()? - .clone()?; + let definition_name = (*syntax_object_id_to_interned_string.get(&refers_to)?)?; // Memoize a lot of these lookups if possible, or at least share the memory; let doc_suffix = definition_name.resolve().to_string() + "__doc__"; @@ -727,7 +721,7 @@ impl Backend { guard.in_scope_macros_mut().retain(|key, value| { if macro_env_before.contains(key) { - return true; + true } else { // FIXME: Try to avoid this clone! introduced_macros.insert(*key, value.clone()); @@ -801,7 +795,7 @@ impl Backend { let mut user_defined_lints = LINT_ENGINE .write() .unwrap() - .diagnostics(&rope, &analysis.exprs); + .diagnostics(&rope, analysis.exprs); // log::debug!("Lints found: {:#?}", user_defined_lints); @@ -827,17 +821,16 @@ impl Backend { } fn uri_to_source_id(uri: &Url) -> Option { - let id = ENGINE + ENGINE .read() .ok()? - .get_source_id(&uri.to_file_path().unwrap()); - id + .get_source_id(&uri.to_file_path().unwrap()) } fn source_id_to_uri(source_id: SourceId) -> Option { let path = ENGINE.read().ok()?.get_path_for_source_id(&source_id)?; - Some(Url::from_file_path(path).ok()?) + Url::from_file_path(path).ok() } pub fn make_error(mut diagnostic: Diagnostic) -> Diagnostic { @@ -930,8 +923,8 @@ impl UserDefinedLintEngine { .unwrap() .drain(..) .filter_map(|d| { - let start_position = offset_to_position(d.span.start, &rope)?; - let end_position = offset_to_position(d.span.end, &rope)?; + let start_position = offset_to_position(d.span.start, rope)?; + let end_position = offset_to_position(d.span.end, rope)?; Some(Diagnostic::new_simple( Range::new(start_position, end_position), diff --git a/crates/steel-language-server/src/diagnostics.rs b/crates/steel-language-server/src/diagnostics.rs index 010d584f2..1802f9359 100644 --- a/crates/steel-language-server/src/diagnostics.rs +++ b/crates/steel-language-server/src/diagnostics.rs @@ -1,6 +1,5 @@ use std::{ collections::{BTreeSet, HashMap}, - iter::FlatMap, path::PathBuf, }; @@ -94,15 +93,16 @@ impl DiagnosticGenerator for FreeIdentifiersAndUnusedIdentifiers { // This identifier has been renamed - so we can unmangle it and see if it // is in the ignore set - if resolved.starts_with("##") && resolved.ends_with(char::is_numeric) { - if context.ignore_set.contains( + if resolved.starts_with("##") + && resolved.ends_with(char::is_numeric) + && context.ignore_set.contains( &resolved .trim_start_matches("##") .trim_end_matches(char::is_numeric) .into(), - ) { - return None; - } + ) + { + return None; } let start_position = offset_to_position(span.start, &context.rope)?; @@ -110,7 +110,7 @@ impl DiagnosticGenerator for FreeIdentifiersAndUnusedIdentifiers { let mut diagnostic = Diagnostic::new_simple( Range::new(start_position, end_position), - format!("unused variable"), + "unused variable".to_string(), ); diagnostic.severity = Some(DiagnosticSeverity::INFORMATION); @@ -128,19 +128,19 @@ impl DiagnosticGenerator for StaticArityChecker { fn diagnose(&mut self, context: &mut DiagnosticContext) -> Vec { let mut arity_checker = StaticArityChecking { known_functions: HashMap::new(), - analysis: &context.analysis, + analysis: context.analysis, known_contracts: HashMap::new(), }; for expr in context.analysis.exprs.iter() { - arity_checker.visit(&expr); + arity_checker.visit(expr); } // TODO: Resolve all required values to their original // values in the other module, and link those known // functions there. - let mut identifiers = context + let identifiers = context .analysis .analysis .identifier_info() @@ -232,20 +232,19 @@ pub struct StaticArityChecking<'a> { impl<'a> VisitorMutUnitRef<'a> for StaticArityChecking<'a> { fn visit_begin(&mut self, begin: &'a steel::parser::ast::Begin) { // Check if this is a define/contract - match (begin.exprs.get(0), begin.exprs.get(1)) { - (Some(ExprKind::Define(d)), Some(ExprKind::Set(s))) => { - if let ExprKind::LambdaFunction(l) = &d.body { - if let Some(contract) = function_contract(&s.expr) { - self.known_functions - .insert(d.name_id().unwrap(), l.args.len()); - - if let Ok(contract) = contract { - self.known_contracts.insert(d.name_id().unwrap(), contract); - } + if let (Some(ExprKind::Define(d)), Some(ExprKind::Set(s))) = + (begin.exprs.first(), begin.exprs.get(1)) + { + if let ExprKind::LambdaFunction(l) = &d.body { + if let Some(contract) = function_contract(&s.expr) { + self.known_functions + .insert(d.name_id().unwrap(), l.args.len()); + + if let Ok(contract) = contract { + self.known_contracts.insert(d.name_id().unwrap(), contract); } } } - _ => {} } for expr in &begin.exprs { @@ -277,7 +276,7 @@ pub struct StaticCallSiteArityChecker<'a, 'b> { diagnostics: Vec, } -impl<'a, 'b> StaticCallSiteArityChecker<'a, 'b> { +impl StaticCallSiteArityChecker<'_, '_> { fn check(mut self) -> Vec { for expr in self.context.analysis.exprs.iter() { self.visit(expr); @@ -288,8 +287,8 @@ impl<'a, 'b> StaticCallSiteArityChecker<'a, 'b> { } fn create_diagnostic(rope: &Rope, span: &Span, message: String) -> Option { - let start_position = offset_to_position(span.start, &rope)?; - let end_position = offset_to_position(span.end, &rope)?; + let start_position = offset_to_position(span.start, rope)?; + let end_position = offset_to_position(span.end, rope)?; let mut diagnostic = Diagnostic::new_simple(Range::new(start_position, end_position), message); @@ -298,7 +297,7 @@ fn create_diagnostic(rope: &Rope, span: &Span, message: String) -> Option VisitorMutUnitRef<'a> for StaticCallSiteArityChecker<'a, 'b> { +impl<'a> VisitorMutUnitRef<'a> for StaticCallSiteArityChecker<'a, '_> { fn visit_list(&mut self, l: &'a steel::parser::ast::List) { if let Some(function_call_ident) = l .first() @@ -472,11 +471,7 @@ fn is_contract(expr: &ExprKind) -> bool { expr.list()?.first_ident().map(is_bind_c) } - if let Some(inner) = is_contract_option(expr) { - inner - } else { - false - } + is_contract_option(expr).unwrap_or_default() } #[derive(Debug, PartialEq, PartialOrd)] diff --git a/crates/steel-language-server/src/main.rs b/crates/steel-language-server/src/main.rs index f59964d0b..add3a1849 100644 --- a/crates/steel-language-server/src/main.rs +++ b/crates/steel-language-server/src/main.rs @@ -47,7 +47,7 @@ async fn main() { let home_directory = lsp_home(); ENGINE.write().unwrap().register_module_resolver( - ExternalModuleResolver::new(&mut resolver_engine, PathBuf::from(home_directory)).unwrap(), + ExternalModuleResolver::new(&mut resolver_engine, home_directory).unwrap(), ); { diff --git a/crates/steel-parser/src/ast.rs b/crates/steel-parser/src/ast.rs index 80044af86..f4e1f467e 100644 --- a/crates/steel-parser/src/ast.rs +++ b/crates/steel-parser/src/ast.rs @@ -1282,7 +1282,7 @@ impl List { } pub fn is_anonymous_function_call(&self) -> bool { - matches!(self.args.get(0), Some(ExprKind::LambdaFunction(_))) + matches!(self.args.first(), Some(ExprKind::LambdaFunction(_))) } pub fn is_a_builtin_expr(&self) -> bool { @@ -1298,7 +1298,7 @@ impl List { } pub fn first_func(&self) -> Option<&LambdaFunction> { - if let Some(ExprKind::LambdaFunction(l)) = self.args.get(0) { + if let Some(ExprKind::LambdaFunction(l)) = self.args.first() { Some(l) } else { None diff --git a/crates/steel-parser/src/lexer.rs b/crates/steel-parser/src/lexer.rs index 5da164381..8c58e96d4 100644 --- a/crates/steel-parser/src/lexer.rs +++ b/crates/steel-parser/src/lexer.rs @@ -113,8 +113,8 @@ impl<'a> Lexer<'a> { Some('x') => { self.eat(); - let digit1 = self.eat().ok_or_else(|| TokenError::MalformedByteEscape)?; - let digit2 = self.eat().ok_or_else(|| TokenError::MalformedByteEscape)?; + let digit1 = self.eat().ok_or(TokenError::MalformedByteEscape)?; + let digit2 = self.eat().ok_or(TokenError::MalformedByteEscape)?; let mut chars = String::new(); chars.push(digit1); @@ -123,8 +123,8 @@ impl<'a> Lexer<'a> { let byte = u8::from_str_radix(&chars, 16) .map_err(|_| TokenError::MalformedByteEscape)?; - let char = char::from_u32(byte as u32) - .ok_or_else(|| TokenError::MalformedByteEscape)?; + let char = + char::from_u32(byte as u32).ok_or(TokenError::MalformedByteEscape)?; buf.push(char); } @@ -369,11 +369,7 @@ fn strip_shebang_line(input: &str) -> (&str, usize, usize) { let original = input.len(); let new = result.len(); - ( - result, - original - new, - input.as_bytes().len() - result.as_bytes().len(), - ) + (result, original - new, input.len() - result.len()) } else { (input, 0, 0) } @@ -444,7 +440,7 @@ impl<'a, T, F: ToOwnedString> Iterator for OwnedTokenStream<'a, T, F> { } } -impl<'a, T, F: ToOwnedString> OwnedTokenStream<'a, T, F> { +impl> OwnedTokenStream<'_, T, F> { pub fn offset(&self) -> usize { self.stream.lexer.span().end } @@ -637,7 +633,7 @@ fn parse_real(s: &str) -> Option { } } if has_e || has_dot { - s.parse().map(|f| RealLiteral::Float(f)).ok() + s.parse().map(RealLiteral::Float).ok() } else if let Some(p) = frac_position { let (n_str, d_str) = s.split_at(p); let d_str = &d_str[1..]; @@ -657,7 +653,10 @@ fn parse_number(s: &str) -> Option { if !matches!(x.chars().next(), Some('+') | Some('-')) { return None; }; - Some(NumberLiteral::Complex(IntLiteral::Small(0).into(), parse_real(x)?).into()) + Some(NumberLiteral::Complex( + IntLiteral::Small(0).into(), + parse_real(x)?, + )) } [NumPart::Real(re), NumPart::Imaginary(im)] | [NumPart::Imaginary(im), NumPart::Real(re)] => { @@ -1139,18 +1138,15 @@ mod lexer_tests { span: Span::new(16, 19, SourceId::none()), }, Token { - ty: NumberLiteral::Complex( - RealLiteral::Float(1.0).into(), - RealLiteral::Float(2.0).into() - ) - .into(), + ty: NumberLiteral::Complex(RealLiteral::Float(1.0), RealLiteral::Float(2.0)) + .into(), source: "1.0+2.0i", span: Span::new(20, 28, SourceId::none()), }, Token { ty: NumberLiteral::Complex( IntLiteral::Small(3).into(), - RealLiteral::Float(-4.0).into() + RealLiteral::Float(-4.0) ) .into(), source: "3-4.0i", @@ -1159,7 +1155,7 @@ mod lexer_tests { Token { ty: NumberLiteral::Complex( IntLiteral::Small(0).into(), - RealLiteral::Float(1.0).into() + RealLiteral::Float(1.0) ) .into(), source: "+1.0i", diff --git a/crates/steel-parser/src/parser.rs b/crates/steel-parser/src/parser.rs index 98b603bc8..39d1ce3b1 100644 --- a/crates/steel-parser/src/parser.rs +++ b/crates/steel-parser/src/parser.rs @@ -308,7 +308,7 @@ enum ParsingContext { UnquoteSplicingTick(usize), } -impl<'a> Parser<'a> { +impl Parser<'_> { pub fn parse(expr: &str) -> Result> { Parser::new(expr, SourceId::none()).collect() } @@ -1005,12 +1005,12 @@ impl<'a> Parser<'a> { | Some(ParsingContext::QuasiquoteTick(_)) => { // | Some(ParsingContext::Quote(d)) && d > 0 => { - return Ok(current_frame.to_expr(close)?); + return current_frame.to_expr(close); } Some(ParsingContext::Quote(x)) if *x > 0 => { self.context.pop(); - return Ok(current_frame.to_expr(close)?); + return current_frame.to_expr(close); } Some(ParsingContext::Quote(0)) => { self.context.pop(); @@ -1037,7 +1037,7 @@ impl<'a> Parser<'a> { // println!("Should still be quoted here"); - return Ok(current_frame.to_expr(close)?); + return current_frame.to_expr(close); } return self.maybe_lower_frame(current_frame, close); @@ -1124,7 +1124,7 @@ fn wrap_in_doc_function(expr: ExprKind, comment: String) -> ExprKind { ])) } -impl<'a> Parser<'a> { +impl Parser<'_> { fn get_next_and_maybe_wrap_in_doc(&mut self) -> Option> { let mut next; @@ -1354,7 +1354,7 @@ impl<'a> Parser<'a> { } } -impl<'a> Iterator for Parser<'a> { +impl Iterator for Parser<'_> { type Item = Result; // TODO -> put the @@ -1796,7 +1796,8 @@ impl Frame { } } - Ok(self.exprs.push(expr)) + self.exprs.push(expr); + Ok(()) } fn improper(&self) -> Result { @@ -1805,11 +1806,11 @@ impl Frame { Some((idx, span)) => { debug_assert_eq!(idx, self.exprs.len()); - return Err(ParseError::SyntaxError( + Err(ParseError::SyntaxError( "Improper list must have a single cdr".into(), span, None, - )); + )) } None => Ok(false), } diff --git a/crates/steel-parser/src/span.rs b/crates/steel-parser/src/span.rs index cae222105..dbfbda8c5 100644 --- a/crates/steel-parser/src/span.rs +++ b/crates/steel-parser/src/span.rs @@ -63,7 +63,7 @@ impl Span { } pub fn coalesce_span(spans: &[Span]) -> Span { - let span = spans.get(0); + let span = spans.first(); if let Some(span) = span { let mut span = *span; for s in spans { diff --git a/crates/steel-parser/src/tokens.rs b/crates/steel-parser/src/tokens.rs index 95f092f12..0a5904480 100644 --- a/crates/steel-parser/src/tokens.rs +++ b/crates/steel-parser/src/tokens.rs @@ -227,7 +227,7 @@ impl RealLiteral { impl From for NumberLiteral { fn from(value: RealLiteral) -> Self { - NumberLiteral::Real(value).into() + NumberLiteral::Real(value) } } diff --git a/crates/steel-repl/src/highlight.rs b/crates/steel-repl/src/highlight.rs index 2ec27ee7a..24055c8da 100644 --- a/crates/steel-repl/src/highlight.rs +++ b/crates/steel-repl/src/highlight.rs @@ -231,7 +231,7 @@ impl Highlighter for RustylineHelper { // println!("pos: {}") - let old_length = line_to_highlight.as_bytes().len(); + let old_length = line_to_highlight.len(); // self.bracket.set(check_bracket(&line_to_highlight, start)); @@ -239,7 +239,7 @@ impl Highlighter for RustylineHelper { line_to_highlight.replace_range(range, &highlighted); - let new_length = line_to_highlight.as_bytes().len(); + let new_length = line_to_highlight.len(); // TODO just store the updated location back in if let Some(pos) = paren_to_highlight { diff --git a/crates/steel-repl/src/repl.rs b/crates/steel-repl/src/repl.rs index d9a7ceebe..1a2e4931a 100644 --- a/crates/steel-repl/src/repl.rs +++ b/crates/steel-repl/src/repl.rs @@ -21,8 +21,6 @@ use std::env; use std::fs::File; -use dirs; - use crate::highlight::RustylineHelper; fn display_help() { @@ -147,7 +145,7 @@ pub fn repl_base(mut vm: Engine) -> std::io::Result<()> { // Load repl history let history_path = get_repl_history_path(); - if let Err(_) = rl.load_history(&history_path) { + if rl.load_history(&history_path).is_err() { if let Err(_) = File::create(&history_path) { eprintln!("Unable to create repl history file {:?}", history_path) } diff --git a/libs/steel-async-webrequests/src/lib.rs b/libs/steel-async-webrequests/src/lib.rs index f861eb48d..a8088e578 100644 --- a/libs/steel-async-webrequests/src/lib.rs +++ b/libs/steel-async-webrequests/src/lib.rs @@ -144,9 +144,9 @@ impl Client { } .into_ffi() } else { - let message = format!( + let message = "Expected a value of type finalized request, found another opaque object" - ); + .to_string(); async move { RResult::RErr(RBoxError::new(AsyncError::TypeMismatch(message))) } .into_ffi() } @@ -210,8 +210,8 @@ impl AsyncRequest { match inner { Some(Ok(inner)) => FinalizedAsyncRequest(Some(inner)).into_ffi_val(), - Some(Err(e)) => return RResult::RErr(RBoxError::new(e)), - None => return RResult::RErr(RBoxError::new(AsyncError::RequestAlreadyUsed)), + Some(Err(e)) => RResult::RErr(RBoxError::new(e)), + None => RResult::RErr(RBoxError::new(AsyncError::RequestAlreadyUsed)), } } } diff --git a/libs/steel-sqlite/src/lib.rs b/libs/steel-sqlite/src/lib.rs index c702c122d..50a8a8f94 100644 --- a/libs/steel-sqlite/src/lib.rs +++ b/libs/steel-sqlite/src/lib.rs @@ -272,7 +272,7 @@ impl std::fmt::Display for SqliteConversionError { impl std::error::Error for SqliteConversionError {} impl Custom for SqliteConnection {} -impl<'a> ToSql for FFIWrapper<'a> { +impl ToSql for FFIWrapper<'_> { fn to_sql(&self) -> rusqlite::Result> { match &self.0 { // FFIValue::BoxedFunction(_) => todo!(),