diff --git a/src/printer.js b/src/printer.js index e9dc19ac2..78618f2c8 100644 --- a/src/printer.js +++ b/src/printer.js @@ -273,7 +273,7 @@ function genericPrint(path, options, print) { hardline, '}' ]); - case 'VariableDeclaration': + case 'VariableDeclaration': { if (!node.typeName) { return node.name; } @@ -281,13 +281,20 @@ function genericPrint(path, options, print) { if (node.isIndexed) { doc = join(' ', [doc, 'indexed']); } + const constantKeyword = node.isDeclaredConst ? 'constant' : ''; if (node.visibility === 'default') { - return join(' ', [doc, node.name]); + return join( + ' ', + [doc, constantKeyword, node.name].filter(element => element) + ); } return join( ' ', - [doc, node.visibility, node.name].filter(element => element) + [doc, node.visibility, constantKeyword, node.name].filter( + element => element + ) ); + } case 'ArrayTypeName': return concat([ path.call(print, 'baseTypeName'), diff --git a/tests/SampleCrowdsale/SampleCrowdsale.sol b/tests/SampleCrowdsale/SampleCrowdsale.sol new file mode 100644 index 000000000..3c7672219 --- /dev/null +++ b/tests/SampleCrowdsale/SampleCrowdsale.sol @@ -0,0 +1,48 @@ +pragma solidity ^0.4.18; + +import "../crowdsale/CappedCrowdsale.sol"; +import "../crowdsale/RefundableCrowdsale.sol"; +import "../token/MintableToken.sol"; + +/** + * @title SampleCrowdsaleToken + * @dev Very simple ERC20 Token that can be minted. + * It is meant to be used in a crowdsale contract. + */ +contract SampleCrowdsaleToken is MintableToken { + + string public constant name = "Sample Crowdsale Token"; + string public constant symbol = "SCT"; + uint8 public constant decimals = 18; + +} + +/** + * @title SampleCrowdsale + * @dev This is an example of a fully fledged crowdsale. + * The way to add new features to a base crowdsale is by multiple inheritance. + * In this example we are providing following extensions: + * CappedCrowdsale - sets a max boundary for raised funds + * RefundableCrowdsale - set a min goal to be reached and returns funds if it's not met + * + * After adding multiple features it's good practice to run integration tests + * to ensure that subcontracts works together as intended. + */ +contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale { + + function SampleCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet) public + CappedCrowdsale(_cap) + FinalizableCrowdsale() + RefundableCrowdsale(_goal) + Crowdsale(_startTime, _endTime, _rate, _wallet) + { + //As goal needs to be met for a successful crowdsale + //the value needs to less or equal than a cap which is limit for accepted funds + require(_goal <= _cap); + } + + function createTokenContract() internal returns (MintableToken) { + return new SampleCrowdsaleToken(); + } + +} diff --git a/tests/SampleCrowdsale/__snapshots__/jsfmt.spec.js.snap b/tests/SampleCrowdsale/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..ab7e6810d --- /dev/null +++ b/tests/SampleCrowdsale/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,103 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SampleCrowdsale.sol 1`] = ` +pragma solidity ^0.4.18; + +import "../crowdsale/CappedCrowdsale.sol"; +import "../crowdsale/RefundableCrowdsale.sol"; +import "../token/MintableToken.sol"; + +/** + * @title SampleCrowdsaleToken + * @dev Very simple ERC20 Token that can be minted. + * It is meant to be used in a crowdsale contract. + */ +contract SampleCrowdsaleToken is MintableToken { + + string public constant name = "Sample Crowdsale Token"; + string public constant symbol = "SCT"; + uint8 public constant decimals = 18; + +} + +/** + * @title SampleCrowdsale + * @dev This is an example of a fully fledged crowdsale. + * The way to add new features to a base crowdsale is by multiple inheritance. + * In this example we are providing following extensions: + * CappedCrowdsale - sets a max boundary for raised funds + * RefundableCrowdsale - set a min goal to be reached and returns funds if it's not met + * + * After adding multiple features it's good practice to run integration tests + * to ensure that subcontracts works together as intended. + */ +contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale { + + function SampleCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet) public + CappedCrowdsale(_cap) + FinalizableCrowdsale() + RefundableCrowdsale(_goal) + Crowdsale(_startTime, _endTime, _rate, _wallet) + { + //As goal needs to be met for a successful crowdsale + //the value needs to less or equal than a cap which is limit for accepted funds + require(_goal <= _cap); + } + + function createTokenContract() internal returns (MintableToken) { + return new SampleCrowdsaleToken(); + } + +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +pragma solidity ^0.4.18; + +import "../crowdsale/CappedCrowdsale.sol"; +import "../crowdsale/RefundableCrowdsale.sol"; +import "../token/MintableToken.sol"; + +/** + * @title SampleCrowdsaleToken + * @dev Very simple ERC20 Token that can be minted. + * It is meant to be used in a crowdsale contract. + */ +contract SampleCrowdsaleToken is MintableToken { + string public constant name = "Sample Crowdsale Token"; + string public constant symbol = "SCT"; + uint8 public constant decimals = 18; + +} + + +/** + * @title SampleCrowdsale + * @dev This is an example of a fully fledged crowdsale. + * The way to add new features to a base crowdsale is by multiple inheritance. + * In this example we are providing following extensions: + * CappedCrowdsale - sets a max boundary for raised funds + * RefundableCrowdsale - set a min goal to be reached and returns funds if it's not met + * + * After adding multiple features it's good practice to run integration tests + * to ensure that subcontracts works together as intended. + */ +contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale { + function SampleCrowdsale( + uint256 _startTime, + uint256 _endTime, + uint256 _rate, + uint256 _goal, + uint256 _cap, + address _wallet + ) public CappedCrowdsale(_cap) FinalizableCrowdsale RefundableCrowdsale(_goal) Crowdsale(_startTime, _endTime, _rate, _wallet) { + //As goal needs to be met for a successful crowdsale + //the value needs to less or equal than a cap which is limit for accepted funds + require(_goal <= _cap); + } + + function createTokenContract() internal returns(MintableToken) { + return new SampleCrowdsaleToken(); + } + +} + +`; diff --git a/tests/SampleCrowdsale/jsfmt.spec.js b/tests/SampleCrowdsale/jsfmt.spec.js new file mode 100644 index 000000000..989047bcc --- /dev/null +++ b/tests/SampleCrowdsale/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname);