Socket
Socket
Sign inDemoInstall

solhint

Package Overview
Dependencies
Maintainers
5
Versions
85
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

solhint - npm Package Compare versions

Comparing version 3.3.3 to 3.3.4

71

lib/rules/order/ordering.js

@@ -70,4 +70,12 @@ const BaseChecker = require('./../base-checker')

function isConst(node) {
return ['pure', 'view', 'constant'].includes(node.stateMutability)
function getMutabilityWeight({ baseWeight, stateMutability }) {
switch (stateMutability) {
case 'constant':
case 'view':
return baseWeight + 2
case 'pure':
return baseWeight + 4
default:
return baseWeight
}
}

@@ -110,2 +118,6 @@

function contractPartOrder(node) {
if (node.type === 'UsingForDeclaration') {
return [0, 'using for declaration']
}
if (isTypeDeclaration(node)) {

@@ -118,44 +130,59 @@ let label

}
return [0, label]
return [10, label]
}
if (node.type === 'StateVariableDeclaration') {
return [10, 'state variable declaration']
return [20, 'state variable declaration']
}
if (node.type === 'EventDefinition') {
return [20, 'event definition']
return [30, 'event definition']
}
if (node.type === 'ModifierDefinition') {
return [40, 'modifier definition']
}
if (node.isConstructor) {
return [30, 'constructor']
return [50, 'constructor']
}
if (isReceiveFunction(node)) {
return [40, 'receive function']
return [60, 'receive function']
}
if (isFallbackFunction(node)) {
return [50, 'fallback function']
return [70, 'fallback function']
}
if (node.type === 'FunctionDefinition') {
if (node.visibility === 'external' && !isConst(node)) {
return [60, 'external function']
const { stateMutability, visibility } = node
if (visibility === 'external') {
const weight = getMutabilityWeight({ baseWeight: 80, stateMutability })
const label = [visibility, stateMutability, 'function'].join(' ')
return [weight, label]
}
if (node.visibility === 'external' && isConst(node)) {
return [70, 'external const function']
if (visibility === 'public') {
const weight = getMutabilityWeight({ baseWeight: 90, stateMutability })
const label = [visibility, stateMutability, 'function'].join(' ')
return [weight, label]
}
if (node.visibility === 'public' && !isConst(node)) {
return [80, 'public function']
if (visibility === 'internal') {
const weight = getMutabilityWeight({ baseWeight: 100, stateMutability })
const label = [visibility, stateMutability, 'function'].join(' ')
return [weight, label]
}
if (node.visibility === 'public' && isConst(node)) {
return [90, 'public const function']
if (visibility === 'private') {
const weight = getMutabilityWeight({ baseWeight: 110, stateMutability })
const label = [visibility, stateMutability, 'function'].join(' ')
return [weight, label]
}
if (node.visibility === 'internal') {
return [100, 'internal function']
}
if (node.visibility === 'private') {
return [110, 'private function']
}
throw new Error('Unknown order for function, please report this issue')

@@ -162,0 +189,0 @@ }

{
"name": "solhint",
"version": "3.3.3",
"version": "3.3.4",
"description": "Solidity Code Linter",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

module.exports = [
{
description: 'All units are in order',
description: 'All units are in order - ^0.4.0',
code: `
pragma solidity ^0.4.0;
import "./some/library.sol";
import "./some/other-library.sol";
enum MyEnum {
Foo,
Bar
}
struct MyStruct {
uint x;
uint y;
}
interface IBox {
function getValue() public;
function setValue(uint) public;
}
library MyLibrary {
function add(uint a, uint b, uint c) public returns (uint) {
return a + b + c;
}
}
contract MyContract {
struct InnerStruct {
bool flag;
}
enum InnerEnum {
A, B, C
}
uint public x;
uint public y;
event MyEvent(address a);
constructor () public {}
fallback () external {}
function myExternalFunction() external {}
function myExternalConstantFunction() external constant {}
function myPublicFunction() public {}
function myPublicConstantFunction() public constant {}
function myInternalFunction() internal {}
function myPrivateFunction() private {}
}
`
},
{
description: 'All units are in order - ^0.5.0',
code: `
pragma solidity ^0.5.0;
import "./some/library.sol";
import "./some/other-library.sol";
enum MyEnum {
Foo,
Bar
}
struct MyStruct {
uint x;
uint y;
}
interface IBox {
function getValue() public;
function setValue(uint) public;
}
library MyLibrary {
function add(uint a, uint b, uint c) public returns (uint) {
return a + b + c;
}
}
contract MyContract {
using MyLibrary for uint;
struct InnerStruct {
bool flag;
}
enum InnerEnum {
A, B, C
}
address payable owner;
uint public x;
uint public y;
event MyEvent(address a);
modifier onlyOwner {
require(
msg.sender == owner,
"Only owner can call this function."
);
_;
}
constructor () public {}
fallback () external {}
function myExternalFunction() external {}
function myExternalViewFunction() external view {}
function myExternalPureFunction() external pure {}
function myPublicFunction() public {}
function myPublicViewFunction() public view {}
function myPublicPureFunction() public pure {}
function myInternalFunction() internal {}
function myInternalViewFunction() internal view {}
function myInternalPureFunction() internal pure {}
function myPrivateFunction() private {}
function myPrivateViewFunction() private view {}
function myPrivatePureFunction() private pure {}
}
`
},
{
description: 'All units are in order - ^0.6.0',
code: `
pragma solidity ^0.6.0;

@@ -32,2 +166,4 @@

contract MyContract {
using MyLibrary for uint;
struct InnerStruct {

@@ -41,2 +177,3 @@ bool flag;

address payable owner;
uint public x;

@@ -47,12 +184,31 @@ uint public y;

modifier onlyOwner {
require(
msg.sender == owner,
"Only owner can call this function."
);
_;
}
constructor () public {}
receive() external payable {}
fallback () external {}
function myExternalFunction() external {}
function myExternalConstFunction() external const {}
function myExternalViewFunction() external view {}
function myExternalPureFunction() external pure {}
function myPublicFunction() public {}
function myPublicConstFunction() public const {}
function myPublicViewFunction() public view {}
function myPublicPureFunction() public pure {}
function myInternalFunction() internal {}
function myInternalViewFunction() internal view {}
function myInternalPureFunction() internal pure {}
function myPrivateFunction() private {}
function myPrivateViewFunction() private view {}
function myPrivatePureFunction() private pure {}
}

@@ -59,0 +215,0 @@ `

@@ -27,3 +27,53 @@ module.exports = [

`
},
{
description: 'Use for after state variable',
code: `
contract MyContract {
uint public x;
using MyMathLib for uint;
}
`
},
{
description: 'External pure before external view',
code: `
contract MyContract {
function myExternalFunction() external {}
function myExternalPureFunction() external pure {}
function myExternalViewFunction() external view {}
}
`
},
{
description: 'Public pure before public view',
code: `
contract MyContract {
function myPublicFunction() public {}
function myPublicPureFunction() public pure {}
function myPublicViewFunction() public view {}
}
`
},
{
description: 'Internal pure before internal view',
code: `
contract MyContract {
function myInternalFunction() internal {}
function myInternalPureFunction() internal pure {}
function myInternalViewFunction() internal view {}
}
`
},
{
description: 'Private pure before private view',
code: `
contract MyContract {
function myPrivateFunction() private {}
function myPrivatePureFunction() private pure {}
function myPrivateViewFunction() private view {}
}
`
}
]
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc