Skip to content

Commit

Permalink
Merge pull request #493 from vladyan18/enhance-explicit-types
Browse files Browse the repository at this point in the history
Enhance explicit types sensitivity
  • Loading branch information
dbale-altoros authored Sep 4, 2023
2 parents 400248d + ff776df commit a39eb2e
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
12 changes: 12 additions & 0 deletions docs/rules/best-practises/explicit-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ uint256 public variableName
uint public variableName
```

#### If explicit is selected

```solidity
uint256 public variableName = uint256(5)
```

### 👎 Examples of **incorrect** code for this rule

#### If explicit is selected
Expand All @@ -62,6 +68,12 @@ uint public variableName
uint256 public variableName
```

#### At any setting

```solidity
uint public variableName = uint256(5)
```

## Version
This rule was introduced in [Solhint 3.5.1](https://github.com/protofire/solhint/tree/v3.5.1)

Expand Down
21 changes: 21 additions & 0 deletions lib/rules/best-practises/explicit-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ const meta = {
description: 'If implicit is selected',
code: 'uint public variableName',
},
{
description: 'If explicit is selected',
code: 'uint256 public variableName = uint256(5)',
},
],
bad: [
{
Expand All @@ -45,6 +49,10 @@ const meta = {
description: 'If implicit is selected',
code: 'uint256 public variableName',
},
{
description: 'At any setting',
code: 'uint public variableName = uint256(5)',
},
],
},
},
Expand All @@ -68,6 +76,19 @@ class ExplicitTypesChecker extends BaseChecker {
}

VariableDeclaration(node) {
this.validateInNode(node)
}

VariableDeclarationStatement(node) {
if (!node.initialValue) return
this.validateInNode(node.initialValue)
}

ExpressionStatement(node) {
this.validateInNode(node)
}

validateInNode(node) {
if (!VALID_CONFIGURATION_OPTIONS.includes(this.configOption)) {
this.error(node, 'Error: Config error on [explicit-types]. See explicit-types.md.')
return
Expand Down
42 changes: 42 additions & 0 deletions test/fixtures/best-practises/explicit-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,12 @@ const VAR_DECLARATIONS = {
errorsExplicit: 1,
},

fixedArrayCastInDeclaration: {
code: 'uint[] public arr = [uint(1),2,3];',
errorsImplicit: 0,
errorsExplicit: 2,
},

fixedArrayOfArrays: {
code: 'uint256[] public arr = [[1,2,3]];',
errorsImplicit: 1,
Expand All @@ -130,6 +136,42 @@ const VAR_DECLARATIONS = {
errorsImplicit: 1,
errorsExplicit: 1,
},

castInStateVariableDeclaration: {
code: 'uint256 public varUint256 = uint256(1); uint public varUint = uint(1);',
errorsImplicit: 2,
errorsExplicit: 2,
},

castInsideFunctionAtDeclarationUint256: {
code: 'function withUint256() external { uint256 varUint256 = uint256(1); }',
errorsImplicit: 2,
errorsExplicit: 0,
},

castInsideFunctionAtDeclarationUint: {
code: 'function withUint() external { uint varUint = uint(1); }',
errorsImplicit: 0,
errorsExplicit: 2,
},

castInsideFunctionUint: {
code: 'function withUint() external { uint varUint; varUint = uint(1);}',
errorsImplicit: 0,
errorsExplicit: 2,
},

castInsideFunctionUint256: {
code: 'function withUint256() external { uint256 varUint; varUint = uint256(1);}',
errorsImplicit: 2,
errorsExplicit: 0,
},

castInsideModifier: {
code: 'modifier withUint256() { _; uint256 varUint; varUint = uint256(1);}',
errorsImplicit: 2,
errorsExplicit: 0,
},
}

module.exports = VAR_DECLARATIONS

0 comments on commit a39eb2e

Please sign in to comment.