diff --git a/.github/workflows/clippy_check.yml b/.github/workflows/clippy_check.yml index 791d8be1..0791a4a4 100644 --- a/.github/workflows/clippy_check.yml +++ b/.github/workflows/clippy_check.yml @@ -7,7 +7,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: - toolchain: nightly + toolchain: nightly-2023-10-28 components: clippy override: true - uses: actions-rs/clippy-check@v1 diff --git a/Cargo.lock b/Cargo.lock index c40b00fe..04950840 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,17 +111,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "async-trait" -version = "0.1.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "autocfg" version = "1.1.0" @@ -598,7 +587,6 @@ version = "0.5.0-pre95" dependencies = [ "annotate-snippets", "anyhow", - "async-trait", "bincode", "derivative", "hashbrown 0.14.2", @@ -801,34 +789,25 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "logos" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1" +checksum = "bf8b031682c67a8e3d5446840f9573eb7fe26efe7ec8d195c9ac4c0647c502f1" dependencies = [ "logos-derive", ] [[package]] -name = "logos-codegen" -version = "0.13.0" +name = "logos-derive" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" +checksum = "a1d849148dbaf9661a6151d1ca82b13bb4c4c128146a88d05253b38d4e2f496c" dependencies = [ "beef", "fnv", "proc-macro2", "quote", "regex-syntax", - "syn 2.0.38", -] - -[[package]] -name = "logos-derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e" -dependencies = [ - "logos-codegen", + "syn 1.0.109", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 694a99d2..32b68b05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,6 @@ static_assertions = "1.1" rustc-hash = "1.1" bincode = "1.3" annotate-snippets = "0.9.1" -async-trait = "0.1.60" num-bigint = "0.4.3" derivative = "2.2.0" strsim = "0.10.0" @@ -45,7 +44,7 @@ quote = "1.0" syn = "2.0" peg = "0.8.2" drop_bomb = "0.1.5" -logos = "0.13.0" +logos = "0.12.0" miette = "5.5.0" rowan = "0.15" text-size = "1.1" diff --git a/crates/jrsonnet-evaluator/Cargo.toml b/crates/jrsonnet-evaluator/Cargo.toml index 18bb3daf..9c350b07 100644 --- a/crates/jrsonnet-evaluator/Cargo.toml +++ b/crates/jrsonnet-evaluator/Cargo.toml @@ -14,7 +14,7 @@ explaining-traces = ["annotate-snippets"] # Allows library authors to throw custom errors anyhow-error = ["anyhow"] # Adds ability to build import closure in async -async-import = ["async-trait"] +async-import = [] # Allows to preserve field order in objects exp-preserve-order = [] @@ -54,8 +54,6 @@ anyhow = { workspace = true, optional = true } bincode = { workspace = true, optional = true } # Explaining traces annotate-snippets = { workspace = true, features = ["color"], optional = true } -# Async imports -async-trait = { workspace = true, optional = true } # Bigint num-bigint = { workspace = true, features = ["serde"], optional = true } derivative.workspace = true diff --git a/crates/jrsonnet-evaluator/src/async_import.rs b/crates/jrsonnet-evaluator/src/async_import.rs index dd0b8c4c..d12dc4fb 100644 --- a/crates/jrsonnet-evaluator/src/async_import.rs +++ b/crates/jrsonnet-evaluator/src/async_import.rs @@ -1,6 +1,5 @@ -use std::{cell::RefCell, path::Path}; +use std::{cell::RefCell, future::Future, path::Path}; -use async_trait::async_trait; use jrsonnet_gcmodule::Trace; use jrsonnet_interner::IStr; use jrsonnet_parser::{ @@ -218,26 +217,37 @@ pub fn find_imports(expr: &LocExpr, out: &mut FoundImports) { } } -#[async_trait(?Send)] pub trait AsyncImportResolver { type Error; /// Resolves file path, e.g. `(/home/user/manifests, b.libjsonnet)` can correspond /// both to `/home/user/manifests/b.libjsonnet` and to `/home/user/${vendor}/b.libjsonnet` /// where `${vendor}` is a library path. /// - /// `from` should only be returned from [`ImportResolver::resolve`], or from other defined file, any other value - /// may result in panic - async fn resolve_from(&self, from: &SourcePath, path: &str) -> Result; - async fn resolve_from_default(&self, path: &str) -> Result { - self.resolve_from(&SourcePath::default(), path).await + /// `from` should only be returned from [`ImportResolver::resolve`], + /// or from other defined file, any other value may result in panic + fn resolve_from( + &self, + from: &SourcePath, + path: &str, + ) -> impl Future>; + fn resolve_from_default( + &self, + path: &str, + ) -> impl Future> { + async { self.resolve_from(&SourcePath::default(), path).await } } /// Resolves absolute path, doesn't supports jpath and other fancy things - async fn resolve(&self, path: &Path) -> Result; + fn resolve(&self, path: &Path) -> impl Future>; /// Load resolved file - /// This should only be called with value returned from [`ImportResolver::resolve_file`]/[`ImportResolver::resolve`], - /// this cannot be resolved using associated type, as evaluator uses object instead of generic for [`ImportResolver`] - async fn load_file_contents(&self, resolved: &SourcePath) -> Result, Self::Error>; + /// This should only be called with value returned + /// from [`ImportResolver::resolve_file`]/[`ImportResolver::resolve`], + /// this cannot be resolved using associated type, + /// as the evaluator uses object instead of generic for [`ImportResolver`] + fn load_file_contents( + &self, + resolved: &SourcePath, + ) -> impl Future, Self::Error>>; } #[derive(Trace)] diff --git a/flake.nix b/flake.nix index bb0aef2b..fcecd0e0 100644 --- a/flake.nix +++ b/flake.nix @@ -25,7 +25,7 @@ lib = pkgs.lib; rust = (pkgs.rustChannelOf { - date = "2023-08-02"; + date = "2023-10-28"; channel = "nightly"; }) .default diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000..0ac0b279 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2023-10-28" +components = ["rustfmt", "clippy"]