From 8d531a561bd833953a87899d2508a4e1520357cc Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Mon, 18 Nov 2019 15:13:02 +0530 Subject: [PATCH] load compiler version from pragma --- src/app/tabs/compileTab/compilerContainer.js | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/app/tabs/compileTab/compilerContainer.js b/src/app/tabs/compileTab/compilerContainer.js index 20abb71fcc..bf5bb60f20 100644 --- a/src/app/tabs/compileTab/compilerContainer.js +++ b/src/app/tabs/compileTab/compilerContainer.js @@ -32,6 +32,9 @@ class CompilerContainer { * Update the compilation button with the name of the current file */ set currentFile (name = '') { + if (name && name !== '') { + this._setCompilerVersionFromPragma(name) + } if (!this._view.compilationButton) return const button = this.compilationButton(name.split('/').pop()) yo.update(this._view.compilationButton, button) @@ -113,6 +116,24 @@ class CompilerContainer { return el } + // Load solc compiler version according to pragma in contract file + _setCompilerVersionFromPragma (filename) { + this.compileTabLogic.fileManager.getFile(filename).then(data => { + const pragmaArr = data.match(/(pragma solidity (.+?);)/g) + if (pragmaArr && pragmaArr.length === 1) { + const pragmaStr = pragmaArr[0].replace('pragma solidity', '').trim() + const pragma = pragmaStr.substring(0, pragmaStr.length - 1) + const fixedVersions = this.data.allversions.filter(obj => !obj.prerelease).map(obj => obj.version) + const compilerToLoad = semver.maxSatisfying(fixedVersions, pragma) + const compilerPath = this.data.allversions.filter(obj => !obj.prerelease && obj.version === compilerToLoad)[0].path + if (this.data.selectedVersion !== compilerPath) { + this.data.selectedVersion = compilerPath + this._updateVersionSelector() + } + } + }) + } + _retrieveVersion () { let version = this._view.versionSelector.value return version.substring(9, version.length) @@ -243,6 +264,9 @@ class CompilerContainer { compile (event) { if (this.config.get('currentFile')) { + if (!this.data.selectedVersion.includes('nightly')) { + this._setCompilerVersionFromPragma(this.config.get('currentFile')) + } this.compileTabLogic.runCompiler() } }