diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index d6ecdee7e4..38b0d9f809 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -357,8 +357,8 @@ Please make a backup of your contracts and start using http://remix.ethereum.org landingPage, hiddenPanel, sidePanel, - pluginManagerComponent, filePanel, + pluginManagerComponent, settings ]) @@ -482,8 +482,8 @@ Please make a backup of your contracts and start using http://remix.ethereum.org await appManager.activatePlugin(['sidePanel']) // activating host plugin separately await appManager.activatePlugin(['home']) await appManager.activatePlugin(['settings']) - await appManager.activatePlugin(['hiddenPanel', 'pluginManager', 'filePanel', 'contextualListener', 'terminal', 'blockchain', 'fetchAndCompile', 'contentImport']) - + await appManager.activatePlugin(['hiddenPanel', 'filePanel', 'pluginManager', 'contextualListener', 'terminal', 'fetchAndCompile', 'contentImport']) + await appManager.registerContextMenuItems() // Set workspace after initial activation if (Array.isArray(workspace)) { appManager.activatePlugin(workspace).then(async () => { diff --git a/apps/remix-ide/src/app/tabs/compile-tab.js b/apps/remix-ide/src/app/tabs/compile-tab.js index 2352e5db9a..de0415dcb1 100644 --- a/apps/remix-ide/src/app/tabs/compile-tab.js +++ b/apps/remix-ide/src/app/tabs/compile-tab.js @@ -340,10 +340,16 @@ class CompileTab extends ViewPlugin { }) } - compileFile (event) { + // Returns if the compilation was successfull + async compileFile (event) { if (event.path.length > 0) { - this.compileTabLogic.compileFile(event.path[0]) + try { + return await this.compileTabLogic.compileFile(event.path[0]) + } catch (error) { + return false + } } + return false } onDeactivation () { diff --git a/apps/remix-ide/src/app/tabs/test-tab.js b/apps/remix-ide/src/app/tabs/test-tab.js index be230ad278..6750efde55 100644 --- a/apps/remix-ide/src/app/tabs/test-tab.js +++ b/apps/remix-ide/src/app/tabs/test-tab.js @@ -14,7 +14,7 @@ const TestTabLogic = require('./testTab/testTab') const profile = { name: 'solidityUnitTesting', displayName: 'Solidity unit testing', - methods: ['testFromPath', 'testFromSource'], + methods: ['testFromPath', 'testFromSource', 'setTestFolderPath'], events: [], icon: 'assets/img/unitTesting.webp', description: 'Fast tool to generate unit tests for your contracts', @@ -51,6 +51,21 @@ module.exports = class TestTab extends ViewPlugin { onActivationInternal () { this.testTabLogic = new TestTabLogic(this.fileManager) this.listenToEvents() + this.call('filePanel', 'registerContextMenuItem', { + id: 'solidityUnitTesting', + name: 'setTestFolderPath', + label: 'Set path for Unit Testing', + type: ['folder'], + extension: [], + path: [], + pattern: [] + }) + } + + async setTestFolderPath (event) { + if (event.path.length > 0) { + await this.setCurrentPath(event.path[0]) + } } onDeactivation () { @@ -77,10 +92,7 @@ module.exports = class TestTab extends ViewPlugin { }) this.on('filePanel', 'setWorkspace', async () => { - this.testTabLogic.setCurrentPath(this.defaultPath) - this.inputPath.value = this.defaultPath - this.updateDirList(this.defaultPath) - await this.updateForNewCurrent() + this.setCurrentPath(this.defaultPath) }) this.fileManager.events.on('noFileSelected', () => { @@ -405,6 +417,17 @@ module.exports = class TestTab extends ViewPlugin { return this.testFromSource(fileContent, path) } + /** + * Changes the current path of Unit Testing Plugin + * @param path - the path from where UT plugin takes _test.sol files to run + */ + async setCurrentPath (path) { + this.testTabLogic.setCurrentPath(path) + this.inputPath.value = path + this.updateDirList(path) + await this.updateForNewCurrent() + } + /* Test is not associated with the UI */ diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index d58f6403a9..09571d67b8 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -133,6 +133,29 @@ export class RemixAppManager extends PluginManager { return new IframePlugin(plugin) }) } + + async registerContextMenuItems () { + await this.call('filePanel', 'registerContextMenuItem', { + id: 'flattener', + name: 'flattenFileCustomAction', + label: 'Flatten', + type: [], + extension: ['.sol'], + path: [], + pattern: [], + sticky: true + }) + await this.call('filePanel', 'registerContextMenuItem', { + id: 'optimism-compiler', + name: 'compileCustomAction', + label: 'Compile with Optimism', + type: [], + extension: ['.sol'], + path: [], + pattern: [], + sticky: true + }) + } } /** @class Reference loaders.