'use strict'; import * as vscode from 'vscode'; import * as path from 'path'; import {Compiler} from './compiler'; import {ContractCollection} from '../common/model/contractsCollection'; import { initialiseProject } from '../common/projectService'; import { formatPath } from '../common/util'; import { compilerType } from '../common/solcCompiler'; import * as workspaceUtil from './workspaceUtil'; let diagnosticCollection: vscode.DiagnosticCollection; export function initDiagnosticCollection(diagnostics: vscode.DiagnosticCollection) { diagnosticCollection = diagnostics; } export function compileActiveContract(compiler: Compiler, overrideDefaultCompiler: compilerType = null): Promise> { const editor = vscode.window.activeTextEditor; if (!editor) { return; // We need something open } if (path.extname(editor.document.fileName) !== '.sol') { vscode.window.showWarningMessage('This not a solidity file (*.sol)'); return; } // Check if is folder, if not stop we need to output to a bin folder on rootPath if (workspaceUtil.getCurrentWorkspaceRootFolder() === undefined) { vscode.window.showWarningMessage('Please open a folder in Visual Studio Code as a workspace'); return; } const contractsCollection = new ContractCollection(); const contractCode = editor.document.getText(); const contractPath = editor.document.fileName; const packageDefaultDependenciesDirectory = vscode.workspace.getConfiguration('solidity').get('packageDefaultDependenciesDirectory'); const packageDefaultDependenciesContractsDirectory = vscode.workspace.getConfiguration('solidity').get('packageDefaultDependenciesContractsDirectory'); const compilationOptimisation = vscode.workspace.getConfiguration('solidity').get('compilerOptimization'); const remappings = vscode.workspace.getConfiguration('solidity').get('remappings'); const project = initialiseProject(workspaceUtil.getCurrentWorkspaceRootFsPath(), packageDefaultDependenciesDirectory, packageDefaultDependenciesContractsDirectory, remappings); const contract = contractsCollection.addContractAndResolveImports(contractPath, contractCode, project); const packagesPath = formatPath(project.packagesDir); return compiler.compile(contractsCollection.getDefaultContractsForCompilation(compilationOptimisation), diagnosticCollection, project.projectPackage.build_dir, project.projectPackage.absoluletPath, null, packagesPath, contract.absolutePath, overrideDefaultCompiler); }