feat(solc): Add standard-json-input (#1126)
* Add standard-json-input * remove debugging * Update the error message * Remove unnecessary changes * Refactor * make clippy happy * Return CompilerInput instead of String
This commit is contained in:
parent
bf4aa42884
commit
247f08f1a9
|
@ -133,7 +133,7 @@ impl AsRef<str> for CodeFormat {
|
||||||
|
|
||||||
impl Default for CodeFormat {
|
impl Default for CodeFormat {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
CodeFormat::SingleFile
|
CodeFormat::StandardJsonInput
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ pub mod project_util;
|
||||||
/// Represents a project workspace and handles `solc` compiling of all contracts in that workspace.
|
/// Represents a project workspace and handles `solc` compiling of all contracts in that workspace.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Project<T: ArtifactOutput = ConfigurableArtifacts> {
|
pub struct Project<T: ArtifactOutput = ConfigurableArtifacts> {
|
||||||
/// The layout of the
|
/// The layout of the project
|
||||||
pub paths: ProjectPathsConfig,
|
pub paths: ProjectPathsConfig,
|
||||||
/// Where to find solc
|
/// Where to find solc
|
||||||
pub solc: Solc,
|
pub solc: Solc,
|
||||||
|
@ -426,6 +426,33 @@ impl<T: ArtifactOutput> Project<T> {
|
||||||
pub fn flatten(&self, target: &Path) -> Result<String> {
|
pub fn flatten(&self, target: &Path) -> Result<String> {
|
||||||
self.paths.flatten(target)
|
self.paths.flatten(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns standard-json-input to compile the target contract
|
||||||
|
pub fn standard_json_input(&self, target: &Path) -> Result<CompilerInput> {
|
||||||
|
tracing::trace!("Building standard-json-input");
|
||||||
|
let graph = Graph::resolve(&self.paths)?;
|
||||||
|
let target_index = graph.files().get(target).ok_or_else(|| {
|
||||||
|
SolcError::msg(format!("cannot resolve file at \"{:?}\"", target.display()))
|
||||||
|
})?;
|
||||||
|
let mut sources = Vec::new();
|
||||||
|
let (path, source) = graph.node(*target_index).unpack();
|
||||||
|
sources.push((path, source));
|
||||||
|
sources.extend(
|
||||||
|
graph.all_imported_nodes(*target_index).map(|index| graph.node(index).unpack()),
|
||||||
|
);
|
||||||
|
|
||||||
|
let compiler_inputs = CompilerInput::with_sources(
|
||||||
|
sources.into_iter().map(|(s, p)| (s.clone(), p.clone())).collect(),
|
||||||
|
);
|
||||||
|
let compiler_input = compiler_inputs
|
||||||
|
.first()
|
||||||
|
.ok_or_else(|| SolcError::msg("cannot get the compiler input"))?
|
||||||
|
.clone()
|
||||||
|
.settings(self.solc_config.settings.clone())
|
||||||
|
.with_remappings(self.paths.remappings.clone());
|
||||||
|
|
||||||
|
Ok(compiler_input)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ProjectBuilder<T: ArtifactOutput = ConfigurableArtifacts> {
|
pub struct ProjectBuilder<T: ArtifactOutput = ConfigurableArtifacts> {
|
||||||
|
|
|
@ -206,6 +206,11 @@ impl Graph {
|
||||||
self.edges.imported_nodes(from)
|
self.edges.imported_nodes(from)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns an iterator that yields all imports of a node and all their imports
|
||||||
|
pub fn all_imported_nodes(&self, from: usize) -> impl Iterator<Item = usize> + '_ {
|
||||||
|
self.edges.all_imported_nodes(from)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns `true` if the given node has any outgoing edges.
|
/// Returns `true` if the given node has any outgoing edges.
|
||||||
pub(crate) fn has_outgoing_edges(&self, index: usize) -> bool {
|
pub(crate) fn has_outgoing_edges(&self, index: usize) -> bool {
|
||||||
!self.edges.edges[index].is_empty()
|
!self.edges.edges[index].is_empty()
|
||||||
|
@ -782,6 +787,10 @@ impl Node {
|
||||||
pub fn license(&self) -> &Option<SolDataUnit<String>> {
|
pub fn license(&self) -> &Option<SolDataUnit<String>> {
|
||||||
&self.data.license
|
&self.data.license
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn unpack(&self) -> (&PathBuf, &Source) {
|
||||||
|
(&self.path, &self.source)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Helper type for formatting a node
|
/// Helper type for formatting a node
|
||||||
|
|
Loading…
Reference in New Issue