From 2451e711eafb11343548d8b38e7122aa5cd02876 Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Sun, 19 Nov 2023 22:30:09 +0000 Subject: [PATCH 1/3] WIP --- edn/src/lib.rs | 10 +++++----- edn/src/namespaceable_name.rs | 2 +- edn/src/query.rs | 4 ++-- edn/src/types.rs | 4 ++-- edn/src/utils.rs | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/edn/src/lib.rs b/edn/src/lib.rs index dfa846ac..ab15b602 100644 --- a/edn/src/lib.rs +++ b/edn/src/lib.rs @@ -128,7 +128,7 @@ peg::parser!(pub grammar parse() for str { // result = r#""foo\\bar""# // For the typical case, string_normal_chars will match multiple, leading to a single-element vec. pub rule raw_text() -> String = "\"" t:((string_special_char() / string_normal_chars())*) "\"" - { t.join(&"") } + { t.join("") } pub rule text() -> SpannedValue = v:raw_text() { SpannedValue::Text(v) } @@ -153,16 +153,16 @@ peg::parser!(pub grammar parse() for str { "#instmicros" whitespace()+ d:$( digit()+ ) { let micros = d.parse::().unwrap(); let seconds: i64 = micros / 1_000_000; - let nanos: u32 = ((micros % 1_000_000).abs() as u32) * 1000; - Utc.timestamp(seconds, nanos) + let nanos: u32 = ((micros % 1_000_000).unsigned_abs() as u32) * 1000; + Utc.timestamp_opt(seconds, nanos).unwrap() } rule inst_millis() -> DateTime = "#instmillis" whitespace()+ d:$( digit()+ ) { let millis = d.parse::().unwrap(); let seconds: i64 = millis / 1000; - let nanos: u32 = ((millis % 1000).abs() as u32) * 1_000_000; - Utc.timestamp(seconds, nanos) + let nanos: u32 = ((millis % 1000).unsigned_abs() as u32) * 1_000_000; + Utc.timestamp_opt(seconds, nanos).unwrap() } rule inst() -> SpannedValue = t:(inst_millis() / inst_micros() / inst_string()) diff --git a/edn/src/namespaceable_name.rs b/edn/src/namespaceable_name.rs index 722aff46..fb372ba1 100644 --- a/edn/src/namespaceable_name.rs +++ b/edn/src/namespaceable_name.rs @@ -121,7 +121,7 @@ impl NamespaceableName { if name.starts_with('_') { Self::new(self.namespace(), &name[1..]) } else { - Self::new(self.namespace(), &format!("_{}", name)) + Self::new(self.namespace(), format!("_{}", name)) } } diff --git a/edn/src/query.rs b/edn/src/query.rs index a788a8f0..c2aaa185 100644 --- a/edn/src/query.rs +++ b/edn/src/query.rs @@ -1123,14 +1123,14 @@ impl OrJoin { (self.clauses, self.unify_vars, vars) } - pub fn mentioned_variables<'a>(&'a mut self) -> &'a BTreeSet { + pub fn mentioned_variables(mut self) -> BTreeSet { if self.mentioned_vars.is_none() { let m = self.collect_mentioned_variables(); self.mentioned_vars = Some(m); } if let Some(ref mentioned) = self.mentioned_vars { - mentioned + mentioned.clone() } else { unreachable!() } diff --git a/edn/src/types.rs b/edn/src/types.rs index 3622693e..4ad8f975 100644 --- a/edn/src/types.rs +++ b/edn/src/types.rs @@ -668,7 +668,7 @@ pub trait FromMicros { impl FromMicros for DateTime { fn from_micros(ts: i64) -> Self { - Utc.timestamp(ts / 1_000_000, ((ts % 1_000_000).abs() as u32) * 1_000) + Utc.timestamp_opt(ts / 1_000_000, ((ts % 1_000_000).unsigned_abs() as u32) * 1_000).unwrap() } } @@ -690,7 +690,7 @@ pub trait FromMillis { impl FromMillis for DateTime { fn from_millis(ts: i64) -> Self { - Utc.timestamp(ts / 1_000, ((ts % 1_000).abs() as u32) * 1_000) + Utc.timestamp_opt(ts / 1_000, ((ts % 1_000).abs() as u32) * 1_000).unwrap() } } diff --git a/edn/src/utils.rs b/edn/src/utils.rs index de8a9407..61b1177b 100644 --- a/edn/src/utils.rs +++ b/edn/src/utils.rs @@ -23,7 +23,7 @@ pub fn merge(left: &Value, right: &Value) -> Option { match (left, right) { (&Value::Map(ref l), &Value::Map(ref r)) => { let mut result = l.clone(); - result.extend(r.clone().into_iter()); + result.extend(r.clone()); Some(Value::Map(result)) } _ => None, -- 2.43.4 From 2c294acf079fb71a9f61e3b7594c4b103aa9b4ee Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Fri, 24 Nov 2023 17:35:42 +0000 Subject: [PATCH 2/3] WIP --- Cargo.toml | 4 ++-- Makefile | 2 ++ build/version.rs | 2 +- edn/src/query.rs | 4 ++-- edn/src/types.rs | 2 +- edn/src/utils.rs | 2 +- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b32c1873..41d377e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -edition = "2018" +edition = "2021" authors = [ "Richard Newman ", "Nicholas Alexander ", @@ -14,7 +14,7 @@ authors = [ "Gregory Burd ", ] name = "mentat" -version = "0.13.0" +version = "0.14.0" build = "build/version.rs" [features] diff --git a/Makefile b/Makefile index b9a0a584..d718bf76 100644 --- a/Makefile +++ b/Makefile @@ -6,3 +6,5 @@ outdated: fix: $(for p in $(dirname $(ls Cargo.toml */Cargo.toml */*/Cargo.toml)); do echo $p; (cd $p; cargo fix --allow-dirty --broken-code --edition-idioms); done) +upgrades: + cargo upgrades diff --git a/build/version.rs b/build/version.rs index d5aa81a3..0b14f826 100644 --- a/build/version.rs +++ b/build/version.rs @@ -14,7 +14,7 @@ use std::process::exit; /// MIN_VERSION should be changed when there's a new minimum version of rustc required /// to build the project. -static MIN_VERSION: &str = "1.43.0"; +static MIN_VERSION: &str = "1.69.0"; fn main() { let ver = version().unwrap(); diff --git a/edn/src/query.rs b/edn/src/query.rs index c2aaa185..dde4e91b 100644 --- a/edn/src/query.rs +++ b/edn/src/query.rs @@ -1028,8 +1028,8 @@ impl ParsedQuery { Ok(ParsedQuery { find_spec: find_spec.ok_or("expected :find")?, default_source: SrcVar::DefaultSrc, - with: with.unwrap_or_else(Vec::new), // - in_vars: in_vars.unwrap_or_else(Vec::new), + with: with.unwrap_or_default(), + in_vars: in_vars.unwrap_or_default(), in_sources: BTreeSet::default(), limit: limit.unwrap_or(Limit::None), where_clauses: where_clauses.ok_or("expected :where")?, diff --git a/edn/src/types.rs b/edn/src/types.rs index 4ad8f975..beb20878 100644 --- a/edn/src/types.rs +++ b/edn/src/types.rs @@ -690,7 +690,7 @@ pub trait FromMillis { impl FromMillis for DateTime { fn from_millis(ts: i64) -> Self { - Utc.timestamp_opt(ts / 1_000, ((ts % 1_000).abs() as u32) * 1_000).unwrap() + Utc.timestamp_opt(ts / 1_000, ((ts % 1_000).unsigned_abs() as u32) * 1_000).unwrap() } } diff --git a/edn/src/utils.rs b/edn/src/utils.rs index 61b1177b..e9338633 100644 --- a/edn/src/utils.rs +++ b/edn/src/utils.rs @@ -21,7 +21,7 @@ use crate::types::Value; /// TODO: implement `merge` for [Value], following the `concat`/`SliceConcatExt` pattern. pub fn merge(left: &Value, right: &Value) -> Option { match (left, right) { - (&Value::Map(ref l), &Value::Map(ref r)) => { + (Value::Map(l), Value::Map(r)) => { let mut result = l.clone(); result.extend(r.clone()); Some(Value::Map(result)) -- 2.43.4 From d1196aa66601198c96afb246de5912f826555a8f Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Fri, 1 Dec 2023 11:21:21 -0500 Subject: [PATCH 3/3] fixes --- Cargo.toml | 2 +- Makefile | 1 + core-traits/Cargo.toml | 2 +- core/Cargo.toml | 2 +- edn/Cargo.toml | 2 +- edn/src/query.rs | 4 ++-- rust-toolchain | 1 + shell.nix | 38 ++++++++++++++++++++++++++++++++++++++ tests/query.rs | 2 +- tolstoy-traits/Cargo.toml | 2 +- tolstoy/Cargo.toml | 4 ++-- 11 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 rust-toolchain create mode 100644 shell.nix diff --git a/Cargo.toml b/Cargo.toml index 41d377e7..8e68f286 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,7 +50,7 @@ failure = "~0.1" lazy_static = "~1.4" time = "0.3.1" log = "~0.4" -uuid = { version = "~1.0", features = ["v4", "serde"] } +uuid = { version = "~1", features = ["v4", "serde"] } [dependencies.rusqlite] version = "~0.29" diff --git a/Makefile b/Makefile index d718bf76..7c3ef9d9 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +.PHONY: outdated fix outdated: for p in $(dirname $(ls Cargo.toml */Cargo.toml */*/Cargo.toml)); do echo $p; (cd $p; cargo outdated -R); done diff --git a/core-traits/Cargo.toml b/core-traits/Cargo.toml index 2f8751e7..3c2a9d95 100644 --- a/core-traits/Cargo.toml +++ b/core-traits/Cargo.toml @@ -13,7 +13,7 @@ enum-set = "~0.0.8" lazy_static = "~1.4" indexmap = "~1.9" ordered-float = { version = "~2.8", features = ["serde"] } -uuid = { version = "~1.0", features = ["v4", "serde"] } +uuid = { version = "~1", features = ["v4", "serde"] } serde = { version = "~1.0", features = ["rc"] } serde_derive = "~1.0" bytes = { version = "1.0.1", features = ["serde"] } diff --git a/core/Cargo.toml b/core/Cargo.toml index 65e2a46d..7a05f71f 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -9,7 +9,7 @@ enum-set = "~0.0" failure = "~0.1" indexmap = "~1.9" ordered-float = { version = "~2.8", features = ["serde"] } -uuid = { version = "~1.0", features = ["v4", "serde"] } +uuid = { version = "~1", features = ["v4", "serde"] } [dependencies.core_traits] path = "../core-traits" diff --git a/edn/Cargo.toml b/edn/Cargo.toml index 0f714a95..9af1cfa3 100644 --- a/edn/Cargo.toml +++ b/edn/Cargo.toml @@ -15,7 +15,7 @@ itertools = "~0.10" num = "~0.4" ordered-float = "~2.8" pretty = "~0.12" -uuid = { version = "~1.0", features = ["v4", "serde"] } +uuid = { version = "~1", features = ["v4", "serde"] } serde = { version = "~1.0", optional = true } serde_derive = { version = "~1.0", optional = true } peg = "~0.8" diff --git a/edn/src/query.rs b/edn/src/query.rs index dde4e91b..c0cdf487 100644 --- a/edn/src/query.rs +++ b/edn/src/query.rs @@ -1123,14 +1123,14 @@ impl OrJoin { (self.clauses, self.unify_vars, vars) } - pub fn mentioned_variables(mut self) -> BTreeSet { + pub fn mentioned_variables<'a>(&'a mut self) -> &'a BTreeSet { if self.mentioned_vars.is_none() { let m = self.collect_mentioned_variables(); self.mentioned_vars = Some(m); } if let Some(ref mentioned) = self.mentioned_vars { - mentioned.clone() + mentioned } else { unreachable!() } diff --git a/rust-toolchain b/rust-toolchain new file mode 100644 index 00000000..d57d7a14 --- /dev/null +++ b/rust-toolchain @@ -0,0 +1 @@ +nightly-2023-11-27 diff --git a/shell.nix b/shell.nix new file mode 100644 index 00000000..832dcf30 --- /dev/null +++ b/shell.nix @@ -0,0 +1,38 @@ +{ pkgs ? import {} }: + pkgs.mkShell rec { + buildInputs = with pkgs; [ + # Necessary for the openssl-sys crate: + pkgs.openssl + pkgs.pkg-config + # Compiler + clang + # Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16) + llvmPackages.bintools + rustup + ]; + RUSTC_VERSION = pkgs.lib.readFile ./rust-toolchain; + # https://github.com/rust-lang/rust-bindgen#environment-variables + LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; + shellHook = '' + export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin + export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/ + ''; + # Add precompiled library to rustc search path + RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [ + # add libraries here (e.g. pkgs.libvmi) + ]); + # Add glibc, clang, glib and other headers to bindgen search path + BINDGEN_EXTRA_CLANG_ARGS = + # Includes with normal include path + (builtins.map (a: ''-I"${a}/include"'') [ + # add dev libraries here (e.g. pkgs.libvmi.dev) + pkgs.glibc.dev + ]) + # Includes with special directory paths + ++ [ + ''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' + ''-I"${pkgs.glib.dev}/include/glib-2.0"'' + ''-I${pkgs.glib.out}/lib/glib-2.0/include/'' + ]; + + } diff --git a/tests/query.rs b/tests/query.rs index 6a5cf616..7eef8b45 100644 --- a/tests/query.rs +++ b/tests/query.rs @@ -254,7 +254,7 @@ fn test_unbound_inputs() { fn test_instants_and_uuids() { // We assume, perhaps foolishly, that the clocks on test machines won't lose more than an // hour while this test is running. - let start = Utc::now() + FixedOffset::west(60 * 60); + let start = Utc::now() + FixedOffset::west_opt(60 * 60).unwrap(); let mut c = new_connection("").expect("Couldn't open conn."); let mut conn = Conn::connect(&mut c).expect("Couldn't open DB."); diff --git a/tolstoy-traits/Cargo.toml b/tolstoy-traits/Cargo.toml index e7b23bc9..1fafd76b 100644 --- a/tolstoy-traits/Cargo.toml +++ b/tolstoy-traits/Cargo.toml @@ -16,7 +16,7 @@ failure_derive = "~0.1" http = "~0.2" hyper = "~0.14" serde_json = "~1.0" -uuid = { version = "~1.0" } +uuid = { version = "~1" } [dependencies.rusqlite] version = "~0.29" diff --git a/tolstoy/Cargo.toml b/tolstoy/Cargo.toml index ab558b92..c65a257a 100644 --- a/tolstoy/Cargo.toml +++ b/tolstoy/Cargo.toml @@ -1,5 +1,5 @@ [package] -edition = "2018" +edition = "2021" name = "mentat_tolstoy" version = "0.0.2" workspace = ".." @@ -22,7 +22,7 @@ serde_json = "~1.0" serde_cbor = "~0.11" serde_derive = "~1.0" lazy_static = "~1.4" -uuid = { version = "~1.0", features = ["v4", "serde"] } +uuid = { version = "~1", features = ["v4", "serde"] } [dependencies.rusqlite] version = "~0.29" -- 2.43.4