Skip to content

Commit 4af3e42

Browse files
authored
Adjust stateMutability in function modifier order (#349)
* Adjust stateMutability in function modifier order Follows the Solidity style guide located at https://solidity.readthedocs.io/en/v0.7.2/style-guide.html#function-declaration Specifically: The modifier order for a function should be: 1. Visibility 2. Mutability 3. Virtual 4. Override 5. Custom modifiers * Add tests for function modifier order
1 parent ce1bc29 commit 4af3e42

File tree

3 files changed

+253
-1
lines changed

3 files changed

+253
-1
lines changed

src/nodes/FunctionDefinition.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ const FunctionDefinition = {
8989
group(
9090
concat([
9191
visibility(node),
92+
stateMutability(node),
9293
virtual(node),
9394
override(node, path, print),
94-
stateMutability(node),
9595
modifiers(node, path, print),
9696
returnParameters(node, path, print),
9797
signatureEnd(node)

tests/FunctionDefinitions/FunctionDefinitions.sol

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ interface FunctionInterfaces {
3434
function manyParamsManyReturns(uint x1, uint x2, uint x3, uint x4, uint x5, uint x6, uint x7, uint x8, uint x9, uint x10) returns(uint y1, uint y2, uint y3, uint y4, uint y5, uint y6, uint y7, uint y8, uint y9, uint y10);
3535

3636
function manyParamsManyModifiersManyReturns(uint x1, uint x2, uint x3, uint x4, uint x5, uint x6, uint x7, uint x8, uint x9, uint x10) modifier1 modifier2 modifier3 modifier4 modifier5 modifier6 modifier7 modifier8 modifier9 modifier10 returns(uint y1, uint y2, uint y3, uint y4, uint y5, uint y6, uint y7, uint y8, uint y9, uint y10);
37+
38+
function modifierOrderCorrect01() public view virtual override modifier1 modifier2 returns(uint);
39+
40+
function modifierOrderCorrect02() private pure virtual modifier1 modifier2 returns(string);
41+
42+
function modifierOrderCorrect03() external payable override modifier1 modifier2 returns(address);
43+
44+
function modifierOrderCorrect04() internal virtual override modifier1 modifier2 returns(uint);
45+
46+
function modifierOrderIncorrect01() public modifier1 modifier2 override virtual view returns(uint);
47+
48+
function modifierOrderIncorrect02() virtual modifier1 external modifier2 override returns(uint);
49+
50+
function modifierOrderIncorrect03() modifier1 pure internal virtual modifier2 returns(uint);
51+
52+
function modifierOrderIncorrect04() override modifier1 payable external modifier2 returns(uint);
3753
}
3854

3955
contract FunctionDefinitions {
@@ -115,4 +131,36 @@ contract FunctionDefinitions {
115131
function manyParamsManyModifiersManyReturns(uint x1, uint x2, uint x3, uint x4, uint x5, uint x6, uint x7, uint x8, uint x9, uint x10) modifier1 modifier2 modifier3 modifier4 modifier5 modifier6 modifier7 modifier8 modifier9 modifier10 returns(uint y1, uint y2, uint y3, uint y4, uint y5, uint y6, uint y7, uint y8, uint y9, uint y10) {
116132
a = 1;
117133
}
134+
135+
function modifierOrderCorrect01() public view virtual override modifier1 modifier2 returns(uint) {
136+
a = 1;
137+
}
138+
139+
function modifierOrderCorrect02() private pure virtual modifier1 modifier2 returns(string) {
140+
a = 1;
141+
}
142+
143+
function modifierOrderCorrect03() external payable override modifier1 modifier2 returns(address) {
144+
a = 1;
145+
}
146+
147+
function modifierOrderCorrect04() internal virtual override modifier1 modifier2 returns(uint) {
148+
a = 1;
149+
}
150+
151+
function modifierOrderIncorrect01() public modifier1 modifier2 override virtual view returns(uint) {
152+
a = 1;
153+
}
154+
155+
function modifierOrderIncorrect02() virtual modifier1 external modifier2 override returns(uint) {
156+
a = 1;
157+
}
158+
159+
function modifierOrderIncorrect03() modifier1 pure internal virtual modifier2 returns(uint) {
160+
a = 1;
161+
}
162+
163+
function modifierOrderIncorrect04() override modifier1 payable external modifier2 returns(uint) {
164+
a = 1;
165+
}
118166
}

tests/FunctionDefinitions/__snapshots__/jsfmt.spec.js.snap

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,22 @@ interface FunctionInterfaces {
3737
function manyParamsManyReturns(uint x1, uint x2, uint x3, uint x4, uint x5, uint x6, uint x7, uint x8, uint x9, uint x10) returns(uint y1, uint y2, uint y3, uint y4, uint y5, uint y6, uint y7, uint y8, uint y9, uint y10);
3838
3939
function manyParamsManyModifiersManyReturns(uint x1, uint x2, uint x3, uint x4, uint x5, uint x6, uint x7, uint x8, uint x9, uint x10) modifier1 modifier2 modifier3 modifier4 modifier5 modifier6 modifier7 modifier8 modifier9 modifier10 returns(uint y1, uint y2, uint y3, uint y4, uint y5, uint y6, uint y7, uint y8, uint y9, uint y10);
40+
41+
function modifierOrderCorrect01() public view virtual override modifier1 modifier2 returns(uint);
42+
43+
function modifierOrderCorrect02() private pure virtual modifier1 modifier2 returns(string);
44+
45+
function modifierOrderCorrect03() external payable override modifier1 modifier2 returns(address);
46+
47+
function modifierOrderCorrect04() internal virtual override modifier1 modifier2 returns(uint);
48+
49+
function modifierOrderIncorrect01() public modifier1 modifier2 override virtual view returns(uint);
50+
51+
function modifierOrderIncorrect02() virtual modifier1 external modifier2 override returns(uint);
52+
53+
function modifierOrderIncorrect03() modifier1 pure internal virtual modifier2 returns(uint);
54+
55+
function modifierOrderIncorrect04() override modifier1 payable external modifier2 returns(uint);
4056
}
4157
4258
contract FunctionDefinitions {
@@ -118,6 +134,38 @@ contract FunctionDefinitions {
118134
function manyParamsManyModifiersManyReturns(uint x1, uint x2, uint x3, uint x4, uint x5, uint x6, uint x7, uint x8, uint x9, uint x10) modifier1 modifier2 modifier3 modifier4 modifier5 modifier6 modifier7 modifier8 modifier9 modifier10 returns(uint y1, uint y2, uint y3, uint y4, uint y5, uint y6, uint y7, uint y8, uint y9, uint y10) {
119135
a = 1;
120136
}
137+
138+
function modifierOrderCorrect01() public view virtual override modifier1 modifier2 returns(uint) {
139+
a = 1;
140+
}
141+
142+
function modifierOrderCorrect02() private pure virtual modifier1 modifier2 returns(string) {
143+
a = 1;
144+
}
145+
146+
function modifierOrderCorrect03() external payable override modifier1 modifier2 returns(address) {
147+
a = 1;
148+
}
149+
150+
function modifierOrderCorrect04() internal virtual override modifier1 modifier2 returns(uint) {
151+
a = 1;
152+
}
153+
154+
function modifierOrderIncorrect01() public modifier1 modifier2 override virtual view returns(uint) {
155+
a = 1;
156+
}
157+
158+
function modifierOrderIncorrect02() virtual modifier1 external modifier2 override returns(uint) {
159+
a = 1;
160+
}
161+
162+
function modifierOrderIncorrect03() modifier1 pure internal virtual modifier2 returns(uint) {
163+
a = 1;
164+
}
165+
166+
function modifierOrderIncorrect04() override modifier1 payable external modifier2 returns(uint) {
167+
a = 1;
168+
}
121169
}
122170
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123171
interface FunctionInterfaces {
@@ -356,6 +404,72 @@ interface FunctionInterfaces {
356404
uint256 y9,
357405
uint256 y10
358406
);
407+
408+
function modifierOrderCorrect01()
409+
public
410+
view
411+
virtual
412+
override
413+
modifier1
414+
modifier2
415+
returns (uint256);
416+
417+
function modifierOrderCorrect02()
418+
private
419+
pure
420+
virtual
421+
modifier1
422+
modifier2
423+
returns (string);
424+
425+
function modifierOrderCorrect03()
426+
external
427+
payable
428+
override
429+
modifier1
430+
modifier2
431+
returns (address);
432+
433+
function modifierOrderCorrect04()
434+
internal
435+
virtual
436+
override
437+
modifier1
438+
modifier2
439+
returns (uint256);
440+
441+
function modifierOrderIncorrect01()
442+
public
443+
view
444+
virtual
445+
override
446+
modifier1
447+
modifier2
448+
returns (uint256);
449+
450+
function modifierOrderIncorrect02()
451+
external
452+
virtual
453+
override
454+
modifier1
455+
modifier2
456+
returns (uint256);
457+
458+
function modifierOrderIncorrect03()
459+
internal
460+
pure
461+
virtual
462+
modifier1
463+
modifier2
464+
returns (uint256);
465+
466+
function modifierOrderIncorrect04()
467+
external
468+
payable
469+
override
470+
modifier1
471+
modifier2
472+
returns (uint256);
359473
}
360474
361475
contract FunctionDefinitions {
@@ -652,6 +766,96 @@ contract FunctionDefinitions {
652766
{
653767
a = 1;
654768
}
769+
770+
function modifierOrderCorrect01()
771+
public
772+
view
773+
virtual
774+
override
775+
modifier1
776+
modifier2
777+
returns (uint256)
778+
{
779+
a = 1;
780+
}
781+
782+
function modifierOrderCorrect02()
783+
private
784+
pure
785+
virtual
786+
modifier1
787+
modifier2
788+
returns (string)
789+
{
790+
a = 1;
791+
}
792+
793+
function modifierOrderCorrect03()
794+
external
795+
payable
796+
override
797+
modifier1
798+
modifier2
799+
returns (address)
800+
{
801+
a = 1;
802+
}
803+
804+
function modifierOrderCorrect04()
805+
internal
806+
virtual
807+
override
808+
modifier1
809+
modifier2
810+
returns (uint256)
811+
{
812+
a = 1;
813+
}
814+
815+
function modifierOrderIncorrect01()
816+
public
817+
view
818+
virtual
819+
override
820+
modifier1
821+
modifier2
822+
returns (uint256)
823+
{
824+
a = 1;
825+
}
826+
827+
function modifierOrderIncorrect02()
828+
external
829+
virtual
830+
override
831+
modifier1
832+
modifier2
833+
returns (uint256)
834+
{
835+
a = 1;
836+
}
837+
838+
function modifierOrderIncorrect03()
839+
internal
840+
pure
841+
virtual
842+
modifier1
843+
modifier2
844+
returns (uint256)
845+
{
846+
a = 1;
847+
}
848+
849+
function modifierOrderIncorrect04()
850+
external
851+
payable
852+
override
853+
modifier1
854+
modifier2
855+
returns (uint256)
856+
{
857+
a = 1;
858+
}
655859
}
656860
657861
`;

0 commit comments

Comments
 (0)