From 54020cf68b6dec0bd435d3eb9c8250167720c590 Mon Sep 17 00:00:00 2001 From: Grandschtroumpf Date: Thu, 30 May 2019 11:11:11 +0200 Subject: [PATCH] expose "compile" method to remix-plugin --- src/app/tabs/compile-tab.js | 5 +++ src/app/tabs/compileTab/compileTab.js | 44 ++++++++++++++++----------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/app/tabs/compile-tab.js b/src/app/tabs/compile-tab.js index 21409256d5..574f7e5df4 100644 --- a/src/app/tabs/compile-tab.js +++ b/src/app/tabs/compile-tab.js @@ -173,6 +173,11 @@ class CompileTab extends CompilerApi { return this.compileTabLogic.compiler.lastCompilationResult } + // This function is used by remix-plugin + compile (fileName) { + return this.compileTabLogic.compileFile(fileName) + } + /********* * SUB-COMPONENTS */ diff --git a/src/app/tabs/compileTab/compileTab.js b/src/app/tabs/compileTab/compileTab.js index 828a0e0d20..1c29029647 100644 --- a/src/app/tabs/compileTab/compileTab.js +++ b/src/app/tabs/compileTab/compileTab.js @@ -33,28 +33,38 @@ class CompileTab { this.compiler.setOptimize(this.optimize) } - runCompiler () { - this.fileManager.saveCurrentFile() - this.editor.clearAnnotations() - var currentFile = this.config.get('currentFile') - if (!currentFile) return - if (!/\.sol/.exec(currentFile)) return + /** + * Compile a specific file of the file manager + * @param {string} target the path to the file to compile + */ + compileFile (target) { + if (!target) throw new Error('No target provided for compiliation') + if (!/\.sol/.exec(target)) throw new Error(`${target} is not a solidity file. It cannot be compiled with solidity compiler`) // only compile *.sol file. - var target = currentFile - var sources = {} - var provider = this.fileManager.fileProviderOf(currentFile) - if (!provider) return console.log('cannot compile ' + currentFile + '. Does not belong to any explorer') - provider.get(target, (error, content) => { - if (error) return console.log(error) - sources[target] = { content } - this.event.emit('startingCompilation') - setTimeout(() => { + const provider = this.fileManager.fileProviderOf(target) + if (!provider) throw new Error(`cannot compile ${target}. Does not belong to any explorer`) + return new Promise((resolve, reject) => { + provider.get(target, (error, content) => { + if (error) return reject(error) + const sources = { [target]: { content } } + this.event.emit('startingCompilation') // setTimeout fix the animation on chrome... (animation triggered by 'staringCompilation') - this.compiler.compile(sources, target) - }, 100) + setTimeout(() => this.compiler.compile(sources, target), 100) + }) }) } + runCompiler () { + try { + this.fileManager.saveCurrentFile() + this.editor.clearAnnotations() + var currentFile = this.config.get('currentFile') + return this.compileFile(currentFile) + } catch (err) { + console.error(err) + } + } + importExternal (url, cb) { this.compilerImport.import(url,