Skip to content

Commit ccd05ee

Browse files
Janthermattiaerre
authored andcommitted
Using semver rules to properly format pragma versions (#125)
* Using semver rules to properly format pragma versions when more than one rule is declared. * handling lookbehind in a different way * Adding a test for the untested branch. * fixing the copy/paste * updating snapshot * add sol scenario * remove bad pragma * remove unreachable code * bump version
1 parent fdcc167 commit ccd05ee

File tree

5 files changed

+44
-2
lines changed

5 files changed

+44
-2
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prettier-plugin-solidity",
3-
"version": "1.0.0-alpha.21",
3+
"version": "1.0.0-alpha.22",
44
"description": "prettier plugin for solidity",
55
"main": "src",
66
"scripts": {
@@ -68,6 +68,7 @@
6868
"escape-string-regexp": "^1.0.5",
6969
"extract-comments": "^1.1.0",
7070
"prettier": "^1.15.3",
71+
"semver": "^5.6.0",
7172
"solidity-parser-antlr": "^0.4.0",
7273
"string-width": "^3.0.0"
7374
}

src/nodes/PragmaDirective.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,21 @@ const {
44
}
55
} = require('prettier');
66

7+
const semver = require('semver');
8+
79
const PragmaDirective = {
8-
print: ({ node }) => concat(['pragma ', node.name, ' ', node.value, ';'])
10+
print: ({ node }) => {
11+
// @TODO: remove hack once solidity-parser-antlr is fixed
12+
let value = node.value
13+
.replace(/([<>=])/g, ' $1')
14+
.replace(/< =/g, '<=')
15+
.replace(/> =/g, '>=')
16+
.trim();
17+
if (value.split(' ').length > 1) {
18+
value = semver.validRange(value);
19+
}
20+
return concat(['pragma ', node.name, ' ', value, ';']);
21+
}
922
};
1023

1124
module.exports = PragmaDirective;

tests/Pragma/Pragma.sol

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
pragma solidity >=0.4.21 <0.6.0;
2+
pragma solidity >=0.4.21 <=0.6.0 ;
3+
pragma solidity >0.4.21 <0.6.0;
4+
pragma solidity >0.4.21 <=0.6.0;
5+
pragma solidity >=0.4.21<0.6.0;
6+
pragma solidity ^ 0.4.21 ;
7+
pragma solidity ~ 0.4.21 ;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`Pragma.sol 1`] = `
4+
pragma solidity >=0.4.21 <0.6.0;
5+
pragma solidity >=0.4.21 <=0.6.0 ;
6+
pragma solidity >0.4.21 <0.6.0;
7+
pragma solidity >0.4.21 <=0.6.0;
8+
pragma solidity >=0.4.21<0.6.0;
9+
pragma solidity ^ 0.4.21 ;
10+
pragma solidity ~ 0.4.21 ;
11+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12+
pragma solidity >=0.4.21 <0.6.0;
13+
pragma solidity >=0.4.21 <=0.6.0;
14+
pragma solidity >0.4.21 <0.6.0;
15+
pragma solidity >0.4.21 <=0.6.0;
16+
pragma solidity >=0.4.21 <0.6.0;
17+
pragma solidity ^0.4.21;
18+
pragma solidity ~0.4.21;
19+
20+
`;

tests/Pragma/jsfmt.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
run_spec(__dirname);

0 commit comments

Comments
 (0)