SolidityFlattener
SolidityFlattener copied to clipboard
Handle alternate import syntax
From https://www.reddit.com/r/ethdev/comments/9ibfus/a_simpletoinstall_solidity_flattener/e6lrper/?context=3, user https://www.reddit.com/user/MEGATURBOZGEG:
Great tool, thanks for that. I'd like to use it but it doesn't look like you support the following syntax:
import {FirstContract} from MyContracts.sol
right ? I'm not good at perl so I'm not sure and hence cannot do any pull request.
Reference https://solidity.readthedocs.io/en/develop/layout-of-source-files.html?highlight=import#syntax-and-semantics
#Scenario1 - import "browser/ContractA.sol" as contracta;
In Remix, tab ContractA
pragma solidity ^0.4.24;
contract ContractA {
function returnSomething() public pure returns (uint) {
return 123;
}
}
In Remix, tab ContractB
pragma solidity ^0.4.24;
import "browser/ContractA.sol" as contracta;
contract ContractB is contracta.ContractA {
function returnSomethingElse() public pure returns (uint) {
return returnSomething();
}
}
Q: How to implement flattening with the contracta
namespace?
#Scenario2 - import {ContractA} from "browser/ContractA.sol;
In Remix, tab ContractA
pragma solidity ^0.4.24;
contract ContractA {
function returnSomething() public pure returns (uint) {
return 123;
}
}
contract ContractA1 {
function returnSomething1() public pure returns (uint) {
return 1231;
}
}
In Remix, tab ContractB
pragma solidity ^0.4.24;
import {ContractA} from "browser/ContractA.sol";
// Following fails as only ContractA is imported
contract ContractB is ContractA1 {
function returnSomethingElse() public pure returns (uint) {
return returnSomething();
}
}
If instead, in tab ContractB
pragma solidity ^0.4.24;
import {ContractA1} from "browser/ContractA.sol";
// Following works as only ContractA1 is imported
contract ContractB is ContractA1 {
function returnSomethingElse() public pure returns (uint) {
return returnSomething1();
}
}
Labeling as out of scope as this flattener is just meant as a simple tool
The SolidityFlattery Go tool handles explicit imports but it doesn't handled nested imports. That is, if the file you are importing also imports files then SolidityFlattery will not work :-( https://github.com/akombalabs/SolidityFlattery