Skip to content

Commit 2527d65

Browse files
authored
Merge branch 'main' into klkvr/pp-test-rebase
2 parents 87b9346 + 846f863 commit 2527d65

File tree

4 files changed

+22
-25
lines changed

4 files changed

+22
-25
lines changed

crates/compilers/src/compilers/solc/compiler.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,7 @@ impl Solc {
128128
/// Parses the given source looking for the `pragma` definition and
129129
/// returns the corresponding SemVer version requirement.
130130
pub fn source_version_req(source: &Source) -> Result<VersionReq> {
131-
let version =
132-
utils::find_version_pragma(&source.content).ok_or(SolcError::PragmaNotFound)?;
133-
Ok(SolData::parse_version_req(version.as_str())?)
131+
Ok(SolData::parse_version_pragma(&source.content).ok_or(SolcError::PragmaNotFound)??)
134132
}
135133

136134
/// Given a Solidity source, it detects the latest compiler version which can be used

crates/compilers/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ impl ProjectPathsConfig<SolcLanguage> {
211211
sources.push(content);
212212
}
213213

214-
if let Some(version) = combine_version_pragmas(version_pragmas) {
214+
if let Some(version) = combine_version_pragmas(&version_pragmas) {
215215
result.push_str(&version);
216216
result.push('\n');
217217
}

crates/compilers/src/flatten.rs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use foundry_compilers_core::{
1818
};
1919
use itertools::Itertools;
2020
use std::{
21-
collections::{HashMap, HashSet},
21+
collections::{BTreeSet, HashMap, HashSet},
2222
hash::Hash,
2323
path::{Path, PathBuf},
2424
sync::Arc,
@@ -719,7 +719,7 @@ impl Flattener {
719719

720720
let mut pragmas = Vec::new();
721721

722-
if let Some(version_pragma) = combine_version_pragmas(version_pragmas) {
722+
if let Some(version_pragma) = combine_version_pragmas(&version_pragmas) {
723723
pragmas.push(version_pragma);
724724
}
725725

@@ -876,26 +876,17 @@ pub fn collect_ordered_deps<D: ParsedSource + MaybeSolData>(
876876
Ok(ordered_deps)
877877
}
878878

879-
pub fn combine_version_pragmas(pragmas: Vec<&str>) -> Option<String> {
880-
let mut versions = pragmas
881-
.into_iter()
882-
.filter_map(|p| {
883-
SolData::parse_version_req(
884-
p.replace("pragma", "").replace("solidity", "").replace(';', "").trim(),
885-
)
886-
.ok()
887-
})
879+
pub fn combine_version_pragmas(pragmas: &[impl AsRef<str>]) -> Option<String> {
880+
let versions = pragmas
881+
.iter()
882+
.map(AsRef::as_ref)
883+
.filter_map(SolData::parse_version_pragma)
884+
.filter_map(Result::ok)
888885
.flat_map(|req| req.comparators)
889-
.collect::<HashSet<_>>()
890-
.into_iter()
891886
.map(|comp| comp.to_string())
892-
.collect::<Vec<_>>();
893-
894-
versions.sort();
895-
896-
if !versions.is_empty() {
897-
return Some(format!("pragma solidity {};", versions.iter().format(" ")));
887+
.collect::<BTreeSet<_>>();
888+
if versions.is_empty() {
889+
return None;
898890
}
899-
900-
None
891+
Some(format!("pragma solidity {};", versions.iter().format(" ")))
901892
}

crates/compilers/src/resolver/parse.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,14 @@ impl SolData {
150150
}
151151
}
152152

153+
/// Parses the version pragma and returns the corresponding SemVer version requirement.
154+
///
155+
/// See [`parse_version_req`](Self::parse_version_req).
156+
pub fn parse_version_pragma(pragma: &str) -> Option<Result<VersionReq, semver::Error>> {
157+
let version = utils::find_version_pragma(pragma)?.as_str();
158+
Some(Self::parse_version_req(version))
159+
}
160+
153161
/// Returns the corresponding SemVer version requirement for the solidity version.
154162
///
155163
/// Note: This is a workaround for the fact that `VersionReq::parse` does not support whitespace

0 commit comments

Comments
 (0)