Skip to content

Commit

Permalink
Update Cairo (#1641)
Browse files Browse the repository at this point in the history
- **Update Cairo**
- **Return exit code from ls**
- **Replace version with discriminator in dependency settings**
  • Loading branch information
maciektr authored Oct 11, 2024
1 parent fd4f4ac commit 4ce2b6d
Show file tree
Hide file tree
Showing 14 changed files with 201 additions and 187 deletions.
161 changes: 79 additions & 82 deletions Cargo.lock

Large diffs are not rendered by default.

48 changes: 24 additions & 24 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,30 +35,30 @@ anyhow = "1"
assert_fs = "1"
async-trait = "0.1"
axum = { version = "0.6", features = ["http2"] }
cairo-lang-casm = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-compiler = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-debug = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-defs = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-diagnostics = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-doc = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-filesystem = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-formatter = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-language-server = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-lowering = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-parser = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-project = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-runner = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-semantic = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-sierra = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-sierra-generator = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-sierra-to-casm = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-sierra-type-size = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-starknet = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-starknet-classes = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-syntax = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-test-plugin = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-test-runner = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a" }
cairo-lang-utils = { git = "https://github.com/starkware-libs/cairo", rev = "fbb54c8bcddbbddc69cf267df277b96ff613b52a", features = ["env_logger"] }
cairo-lang-casm = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-compiler = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-debug = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-defs = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-diagnostics = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-doc = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-filesystem = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-formatter = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-language-server = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-lowering = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-parser = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-project = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-runner = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-semantic = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-sierra = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-sierra-generator = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-sierra-to-casm = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-sierra-type-size = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-starknet = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-starknet-classes = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-syntax = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-test-plugin = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-test-runner = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2" }
cairo-lang-utils = { git = "https://github.com/starkware-libs/cairo", rev = "ed191253a6452eeed96288d46a0bf7eb444712d2", features = ["env_logger"] }
camino = { version = "1", features = ["serde1"] }
cargo_metadata = ">=0.18"
clap = { version = "4", features = ["derive", "env", "string"] }
Expand Down
4 changes: 3 additions & 1 deletion extensions/scarb-cairo-language-server/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
fn main() {
use std::process::ExitCode;

fn main() -> ExitCode {
cairo_lang_language_server::start()
}
10 changes: 10 additions & 0 deletions extensions/scarb-cairo-language-server/tests/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,16 @@ async fn run() {
)
.await;

assert_eq!(
read(&mut stdout).await,
json!({
"jsonrpc": "2.0",
"id": 1,
"method": "client/registerCapability",
"params": {"registrations": []}
})
);

assert_eq!(
read(&mut stdout).await,
json!({
Expand Down
8 changes: 4 additions & 4 deletions extensions/scarb-doc/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::db::ScarbDocDatabase;
use crate::metadata::compilation::get_project_config;
use cairo_lang_compiler::project::ProjectConfig;
use cairo_lang_filesystem::db::{Edition, FilesGroup};
use cairo_lang_filesystem::ids::CrateLongId;
use scarb_metadata::{Metadata, PackageMetadata};
use serde::Serialize;

use crate::db::ScarbDocDatabase;
use crate::metadata::compilation::get_project_config;
use smol_str::ToSmolStr;
use types::Crate;

pub mod db;
Expand Down Expand Up @@ -74,7 +74,7 @@ fn generate_language_elements_tree_for_package(

let main_crate_id = db.intern_crate(CrateLongId::Real {
name: package.name.clone().into(),
version: Some(package.version.clone()),
discriminator: Some(package.version.clone()).map(|v| v.to_smolstr()),
});

Crate::new(&db, main_crate_id, document_private_items)
Expand Down
14 changes: 10 additions & 4 deletions extensions/scarb-doc/src/metadata/compilation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,14 @@ fn get_crate_settings_for_package(
.iter()
.find(|package| package.name == compilation_unit_metadata_component.name)
.map(|package| package.version.clone());
let version = (dependency.name != *CORELIB_CRATE_NAME)
let discriminator = (dependency.name != *CORELIB_CRATE_NAME)
.then_some(version)
.flatten();
(dependency.name.clone(), DependencySettings { version })
.flatten()
.map(|v| v.to_smolstr());
(
dependency.name.clone(),
DependencySettings { discriminator },
)
})
})
.collect();
Expand All @@ -164,7 +168,9 @@ fn get_crate_settings_for_package(
dependencies.insert(
package.name.clone(),
DependencySettings {
version: (package.name != *CORELIB_CRATE_NAME).then_some(package.version.clone()),
discriminator: (package.name != *CORELIB_CRATE_NAME)
.then_some(package.version.clone())
.map(|v| v.to_smolstr()),
},
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use cairo_lang_test_plugin::test_plugin_suite;
use itertools::Itertools;
use semver::Version;
use serde::Serialize;
use smol_str::SmolStr;
use smol_str::{SmolStr, ToSmolStr};
use std::path::Path;
use std::sync::Arc;

Expand Down Expand Up @@ -268,7 +268,7 @@ fn insert_lib_entrypoint_content_into_db(
) -> CrateId {
let main_crate_id = db.intern_crate(CrateLongId::Real {
name: SmolStr::from(crate_name),
version: Some(crate_version),
discriminator: Some(crate_version.to_smolstr()),
});
db.set_crate_config(
main_crate_id,
Expand Down
14 changes: 10 additions & 4 deletions extensions/scarb-snforge-test-collector/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,14 @@ fn get_crate_settings_for_package(
.iter()
.find(|package| package.name == compilation_unit_metadata_component.name)
.map(|package| package.version.clone());
let version = (dependency.name != *CORELIB_CRATE_NAME)
let discriminator = (dependency.name != *CORELIB_CRATE_NAME)
.then_some(version)
.flatten();
(dependency.name.clone(), DependencySettings { version })
.flatten()
.map(|v| v.to_smolstr());
(
dependency.name.clone(),
DependencySettings { discriminator },
)
})
})
.collect();
Expand All @@ -261,7 +265,9 @@ fn get_crate_settings_for_package(
dependencies.insert(
package.name.clone(),
DependencySettings {
version: (package.name != *CORELIB_CRATE_NAME).then_some(package.version.clone()),
discriminator: (package.name != *CORELIB_CRATE_NAME)
.then_some(package.version.clone())
.map(|v| v.to_smolstr()),
},
);

Expand Down
13 changes: 8 additions & 5 deletions scarb/src/compiler/compilers/starknet_contract/compiler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use cairo_lang_starknet_classes::contract_class::ContractClass;
use cairo_lang_utils::UpcastMut;
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use smol_str::SmolStr;
use smol_str::{SmolStr, ToSmolStr};
use std::iter::zip;
use tracing::{debug, trace, trace_span};

Expand Down Expand Up @@ -192,13 +192,16 @@ pub fn find_project_contracts(
.map(|selector| selector.package().into())
.unique()
.map(|name: SmolStr| {
let version = unit
let discriminator = unit
.components()
.iter()
.find(|component| component.package.id.name.to_smol_str() == name)
.map(|component| component.package.id.version.clone());
db.upcast_mut()
.intern_crate(CrateLongId::Real { name, version })
.map(|component| component.package.id.version.clone())
.map(|v| v.to_smolstr());
db.upcast_mut().intern_crate(CrateLongId::Real {
name,
discriminator,
})
})
.collect::<Vec<_>>();
let contracts = find_contracts(db, crate_ids.as_ref());
Expand Down
10 changes: 7 additions & 3 deletions scarb/src/compiler/compilers/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,13 +166,17 @@ fn get_contract_crate_ids(
.sorted()
.unique()
.map(|package_name| {
let version = unit
let discriminator = unit
.components()
.iter()
.find(|component| component.package.id.name == package_name)
.map(|component| component.package.id.version.clone());
.map(|component| component.package.id.version.clone())
.map(|v| v.to_smolstr());
let name = package_name.to_smolstr();
db.intern_crate(CrateLongId::Real { name, version })
db.intern_crate(CrateLongId::Real {
name,
discriminator,
})
})
.collect_vec()
})
Expand Down
13 changes: 7 additions & 6 deletions scarb/src/compiler/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use cairo_lang_filesystem::db::{
};
use cairo_lang_filesystem::ids::{CrateLongId, Directory};
use cairo_lang_utils::ordered_hash_map::OrderedHashMap;
use smol_str::SmolStr;
use smol_str::{SmolStr, ToSmolStr};
use std::collections::BTreeMap;
use std::sync::Arc;
use tracing::trace;
Expand Down Expand Up @@ -94,7 +94,7 @@ fn inject_virtual_wrapper_lib(db: &mut RootDatabase, unit: &CairoCompilationUnit
let version = component.package.id.version.clone();
let crate_id = db.intern_crate(CrateLongId::Real {
name,
version: Some(version),
discriminator: Some(version).map(|v| v.to_smolstr()),
});
let file_stems = component
.targets
Expand Down Expand Up @@ -176,9 +176,10 @@ fn build_project_config(unit: &CairoCompilationUnit) -> Result<ProjectConfig> {
(
compilation_unit_component.package.id.name.to_string(),
DependencySettings {
version: (compilation_unit_component.package.id.name.to_string()
discriminator: (compilation_unit_component.package.id.name.to_string()
!= *CORELIB_CRATE_NAME)
.then_some(compilation_unit_component.package.id.version.clone()),
.then_some(compilation_unit_component.package.id.version.clone())
.map(|v| v.to_smolstr()),
},
)
})
Expand All @@ -195,8 +196,8 @@ fn build_project_config(unit: &CairoCompilationUnit) -> Result<ProjectConfig> {
dependencies.insert(
component.package.id.name.to_string(),
DependencySettings {
version: (component.package.id.name.to_string() != *CORELIB_CRATE_NAME)
.then_some(component.package.id.version.clone()),
discriminator: (component.package.id.name.to_string() != *CORELIB_CRATE_NAME)
.then_some(component.package.id.version.clone()).map(|v| v.to_smolstr()),
},
);
}
Expand Down
5 changes: 4 additions & 1 deletion scarb/src/compiler/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use cairo_lang_filesystem::db::{FilesGroup, CORELIB_CRATE_NAME};
use cairo_lang_filesystem::ids::{CrateId, CrateLongId};
use itertools::Itertools;
use serde::Serialize;
use smol_str::ToSmolStr;
use std::io::{BufWriter, Write};

pub fn build_compiler_config<'c>(
Expand Down Expand Up @@ -93,7 +94,9 @@ pub fn collect_main_crate_ids(unit: &CairoCompilationUnit, db: &RootDatabase) ->
let name = unit.main_component().cairo_package_name();
let version = unit.main_component().package.id.version.clone();
vec![db.intern_crate(CrateLongId::Real {
version: (name != CORELIB_CRATE_NAME).then_some(version),
discriminator: (name != CORELIB_CRATE_NAME)
.then_some(version)
.map(|v| v.to_smolstr()),
name,
})]
}
Expand Down
4 changes: 2 additions & 2 deletions scarb/src/ops/expand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use cairo_lang_syntax::node::{ast, TypedStablePtr, TypedSyntaxNode};
use cairo_lang_utils::Upcast;
use scarb_ui::Message;
use serde::{Serialize, Serializer};
use smol_str::SmolStr;
use smol_str::{SmolStr, ToSmolStr};
use std::collections::{BTreeMap, HashSet};

#[derive(Debug, Clone, Default)]
Expand Down Expand Up @@ -164,7 +164,7 @@ fn do_expand(
let version = compilation_unit.main_component().package.id.version.clone();
let main_crate_id = db.intern_crate(CrateLongId::Real {
name,
version: Some(version),
discriminator: Some(version).map(|v| v.to_smolstr()),
});
let mut compiler_config = build_compiler_config(&db, compilation_unit, &[main_crate_id], ws);
// Report diagnostics, but do not fail.
Expand Down
80 changes: 31 additions & 49 deletions scarb/tests/fmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,55 +220,37 @@ fn format_with_import_sorting() {
.assert()
.failure()
.stdout_matches(indoc! {"\
Diff in [..]/src/lib.cairo:
--- original
+++ modified
@@ -1,10 +1,17 @@
+use openzeppelin::introspection::first;
use openzeppelin::introspection::interface;
-use openzeppelin::introspection::first;
#[starknet::contract]
mod SRC5 {
+ mod F;
+ mod G;
+
+ use A;
+
+ use openzeppelin::introspection::first;
use openzeppelin::introspection::interface;
use openzeppelin::introspection::{interface, AB};
+ use starknet::ArrayTrait;
#[storage]
struct Storage {
@@ -11,11 +18,7 @@
supported_interfaces: LegacyMap<felt252, bool>
}
- use openzeppelin::introspection::first;
-
mod A {}
- mod G;
- mod F;
#[abi(embed_v0)]
impl SRC5Impl of interface::ISRC5<ContractState> {
@@ -24,11 +27,8 @@
}
}
- use A;
- use starknet::ArrayTrait;
-
mod Inner {
+ use B;
use C;
- use B;
}
}
"});
Diff in file [..]lib.cairo:
--- original
+++ modified
@@ -1,5 +1,5 @@
+use openzeppelin::introspection::first;
use openzeppelin::introspection::interface;
-use openzeppelin::introspection::first;
#[starknet::contract]
mod SRC5 {
@@ -14,8 +14,8 @@
use openzeppelin::introspection::first;
mod A {}
+ mod F;
mod G;
- mod F;
#[abi(embed_v0)]
impl SRC5Impl of interface::ISRC5<ContractState> {
@@ -28,7 +28,7 @@
use starknet::ArrayTrait;
mod Inner {
- use C;
use B;
+ use C;
}
}
"});
}

#[test]
Expand Down

0 comments on commit 4ce2b6d

Please sign in to comment.