From 0fc2054653d13aea704178b3285b4bfe083acd62 Mon Sep 17 00:00:00 2001 From: Oleh Komendant Date: Tue, 6 Aug 2024 12:48:16 +0300 Subject: [PATCH] Update circuits filtering logic --- src/core/compile/CompilationFilesResolver.ts | 44 ++++++++++++-------- src/reporter/Reporter.ts | 22 ++++------ 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/core/compile/CompilationFilesResolver.ts b/src/core/compile/CompilationFilesResolver.ts index 5bb83fe..54935e3 100644 --- a/src/core/compile/CompilationFilesResolver.ts +++ b/src/core/compile/CompilationFilesResolver.ts @@ -34,13 +34,26 @@ export class CompilationFilesResolver { const sourceNames: string[] = await this._getSourceNamesFromSourcePaths(circuitsSourcePaths); - Reporter!.verboseLog("compilation-file-resolver", "All circuits source names: %o", [sourceNames]); + Reporter!.verboseLog("compilation-file-resolver", "All circuit source names: %o", [sourceNames]); - const dependencyGraph: DependencyGraph = await this._getDependencyGraph(sourceNames); + const allFilteredSourceNames: string[] = filterCircuitFiles( + sourceNames, + this._getCircuitsDirFullPath(), + this._zkitConfig.compilationSettings, + (sourceName: string): string => { + return getNormalizedFullPath(this._projectRoot, sourceName); + }, + ); + + Reporter!.verboseLog("compilation-file-resolver", "All filtered circuit source names: %o", [ + allFilteredSourceNames, + ]); - let resolvedFilesInfoToCompile: ResolvedFileInfo[] = this._filterResolvedFiles( + const dependencyGraph: DependencyGraph = await this._getDependencyGraph(allFilteredSourceNames); + + const resolvedFilesInfoToCompile: ResolvedFileInfo[] = this._filterResolvedFiles( dependencyGraph.getResolvedFiles(), - sourceNames, + allFilteredSourceNames, dependencyGraph, ); @@ -50,31 +63,28 @@ export class CompilationFilesResolver { this._invalidateCacheMissingArtifacts(resolvedFilesInfoToCompile); + let filteredResolvedFilesInfo: ResolvedFileInfo[]; + if (!force) { Reporter!.verboseLog("compilation-file-resolver", "Force flag disabled. Start filtering..."); - resolvedFilesInfoToCompile = resolvedFilesInfoToCompile.filter((fileInfo) => + filteredResolvedFilesInfo = resolvedFilesInfoToCompile.filter((fileInfo) => this._needsCompilation(fileInfo, compileFlags), ); + } else { + filteredResolvedFilesInfo = resolvedFilesInfoToCompile; } - const filteredResolvedFilesInfo: ResolvedFileInfo[] = filterCircuitFiles( - resolvedFilesInfoToCompile, - this._getCircuitsDirFullPath(), - this._zkitConfig.compilationSettings, - (resolvedFileInfo: ResolvedFileInfo): string => { - return resolvedFileInfo.resolvedFile.absolutePath; - }, + const filteredSourceNamesToCompile: string[] = filteredResolvedFilesInfo.map( + (file) => file.resolvedFile.sourceName, ); - const filteredResolvedFilesToCompile: ResolvedFile[] = filteredResolvedFilesInfo.map((file) => file.resolvedFile); - Reporter!.verboseLog("compilation-file-resolver", "Filtered circuit source names to compile: %o", [ - filteredResolvedFilesToCompile.map((file) => file.sourceName), + filteredSourceNamesToCompile, ]); Reporter!.reportCircuitListToCompile( - resolvedFilesInfoToCompile.map((file) => file.resolvedFile), - filteredResolvedFilesToCompile, + resolvedFilesInfoToCompile.map((file) => file.resolvedFile.sourceName), + filteredSourceNamesToCompile, ); return filteredResolvedFilesInfo; diff --git a/src/reporter/Reporter.ts b/src/reporter/Reporter.ts index 9c34cbf..098fa6e 100644 --- a/src/reporter/Reporter.ts +++ b/src/reporter/Reporter.ts @@ -4,7 +4,6 @@ import debug from "debug"; import chalk from "chalk"; import CliTable3 from "cli-table3"; -import { ResolvedFile } from "hardhat/types"; import { emoji } from "hardhat/internal/cli/emoji"; import { pluralize } from "hardhat/internal/util/strings"; @@ -29,31 +28,28 @@ class BaseReporter { this._quiet = newValue; } - public reportCircuitListToCompile( - allResolvedFilesToCompile: ResolvedFile[], - filteredResolvedFilesToCompile: ResolvedFile[], - ) { + public reportCircuitListToCompile(filteredSourceNames: string[], filteredSourceNamesToCompile: string[]) { if (this.isQuiet()) return; - if (filteredResolvedFilesToCompile.length > 0) { + if (filteredSourceNamesToCompile.length > 0) { let filesToCompileMessage: string = `\n${chalk.bold("Circuits to compile:")}\n`; - for (const file of filteredResolvedFilesToCompile) { - filesToCompileMessage += `\n${chalk.green(">")} ${chalk.italic(file.sourceName)}`; + for (const sourceName of filteredSourceNamesToCompile) { + filesToCompileMessage += `\n${chalk.green(">")} ${chalk.italic(sourceName)}`; } console.log(filesToCompileMessage); } - const skippedFiles: ResolvedFile[] = allResolvedFilesToCompile.filter( - (file: ResolvedFile) => !filteredResolvedFilesToCompile.includes(file), + const skippedSourceNames: string[] = filteredSourceNames.filter( + (sourceName: string) => !filteredSourceNamesToCompile.includes(sourceName), ); - if (skippedFiles.length > 0) { + if (skippedSourceNames.length > 0) { let skippedFilesMessage: string = `\n${chalk.bold("Compilation skipped for:")}\n`; - for (const file of skippedFiles) { - skippedFilesMessage += `\n${chalk.yellow(">")} ${chalk.italic.grey(file.sourceName)}`; + for (const sourceName of skippedSourceNames) { + skippedFilesMessage += `\n${chalk.yellow(">")} ${chalk.italic.grey(sourceName)}`; } console.log(skippedFilesMessage);