Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions lib/common/contract-builder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
const { times } = require('lodash')

function contractWith(code) {
return `
pragma solidity 0.4.4;


contract A {
${code}
}
`
}

function libraryWith(code) {
return `
pragma solidity 0.4.4;


library A {
${code}
}
`
}

function funcWith(statements) {
return contractWith(`
function b() public {
${statements}
}
`)
}

function modifierWith(statements) {
return contractWith(`
modifier b() {
${statements}
}
`)
}

function multiLine(...args) {
return args.join('\n')
}

function contractWithPrettier(code) {
return `pragma solidity 0.4.4;

contract A {
${code}
}
`
}

function stateDef(count) {
return repeatLines(' uint private a;', count)
}

function constantDef(count) {
return repeatLines(' uint private constant TEST = 1;', count)
}

function repeatLines(line, count) {
return times(count)
.map(() => line)
.join('\n')
}

module.exports = {
contractWith,
libraryWith,
funcWith,
modifierWith,
multiLine,
contractWithPrettier,
stateDef,
constantDef,
repeatLines,
}
4 changes: 2 additions & 2 deletions lib/rules/best-practices/code-complexity.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ const meta = {
good: [
{
description: 'Low code complexity',
code: require('../../../test/fixtures/best-practices/code-complexity-low'),
code: require('../../fixtureCases/best-practices/code-complexity-low'),
},
],
bad: [
{
description: 'High code complexity',
code: require('../../../test/fixtures/best-practices/code-complexity-high'),
code: require('../../fixtureCases/best-practices/code-complexity-high'),
},
],
},
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/best-practices/max-states-count.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ const meta = {
good: [
{
description: 'Low number of states',
code: require('../../../test/fixtures/best-practices/number-of-states-low'),
code: require('../../fixtureCases/best-practices/number-of-states-low'),
},
],
bad: [
{
description: 'High number of states',
code: require('../../../test/fixtures/best-practices/number-of-states-high'),
code: require('../../fixtureCases/best-practices/number-of-states-high'),
},
],
},
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/best-practices/reason-string.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ const meta = {
good: [
{
description: 'Require with reason string',
code: require('../../../test/fixtures/best-practices/require-with-reason'),
code: require('../../fixtureCases/best-practices/require-with-reason'),
},
],
bad: [
{
description: 'Require without reason string',
code: require('../../../test/fixtures/best-practices/require-without-reason'),
code: require('../../fixtureCases/best-practices/require-without-reason'),
},
],
},
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/miscellaneous/comprehensive-interface.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ const meta = {
good: [
{
description: 'All public functions are overrides',
code: require('../../../test/fixtures/miscellaneous/public-function-with-override'),
code: require('../../fixtureCases/miscellaneous/public-function-with-override'),
},
],
bad: [
{
description: 'A public function is not an override',
code: require('../../../test/fixtures/miscellaneous/public-function-no-override'),
code: require('../../fixtureCases/miscellaneous/public-function-no-override'),
},
],
},
Expand Down
8 changes: 4 additions & 4 deletions lib/rules/miscellaneous/quotes.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ const meta = {
good: [
{
description: 'Configured with double quotes',
code: require('../../../test/fixtures/miscellaneous/string-with-double-quotes'),
code: require('../../fixtureCases/miscellaneous/string-with-double-quotes'),
},
{
description: 'Configured with single quotes',
code: require('../../../test/fixtures/miscellaneous/string-with-single-quotes'),
code: require('../../fixtureCases/miscellaneous/string-with-single-quotes'),
},
{
description: 'Configured with double quotes',
Expand All @@ -46,11 +46,11 @@ const meta = {
bad: [
{
description: 'Configured with single quotes',
code: require('../../../test/fixtures/miscellaneous/string-with-double-quotes'),
code: require('../../fixtureCases/miscellaneous/string-with-double-quotes'),
},
{
description: 'Configured with double quotes',
code: require('../../../test/fixtures/miscellaneous/string-with-single-quotes'),
code: require('../../fixtureCases/miscellaneous/string-with-single-quotes'),
},
],
},
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/order/ordering.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ const meta = {
description: `Check order of elements in file and inside each contract, according to the style guide`,
category: 'Style Guide Rules',
examples: {
good: require('../../../test/fixtures/order/ordering-correct'),
bad: require('../../../test/fixtures/order/ordering-incorrect'),
good: require('../../fixtureCases/order/ordering-correct'),
bad: require('../../fixtureCases/order/ordering-incorrect'),
},
},

Expand Down
4 changes: 2 additions & 2 deletions lib/rules/order/visibility-modifier-order.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ const meta = {
good: [
{
description: 'Visibility modifier placed first',
code: require('../../../test/fixtures/order/visibility-modifier-first'),
code: require('../../fixtureCases/order/visibility-modifier-first'),
},
],
bad: [
{
description: 'Visibility modifier not placed first',
code: require('../../../test/fixtures/order/visibility-modifier-not-first'),
code: require('../../fixtureCases/order/visibility-modifier-not-first'),
},
],
},
Expand Down
2 changes: 1 addition & 1 deletion lib/rules/security/avoid-low-level-calls.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/* eslint-disable default-case */
const BaseChecker = require('../base-checker')
const { hasMethodCalls } = require('../../common/tree-traversing')
const LOW_LEVEL_CALLS = require('../../../test/fixtures/security/low-level-calls')
const LOW_LEVEL_CALLS = require('../../fixtureCases/security/low-level-calls')

const WARN_LOW_LEVEL_CALLS = LOW_LEVEL_CALLS[0]
const ALLOWED_LOW_LEVEL_CALLS = LOW_LEVEL_CALLS[1]
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/security/func-visibility.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ const meta = {
good: [
{
description: 'Functions explicitly marked with visibility',
code: require('../../../test/fixtures/security/functions-with-visibility').join('\n'),
code: require('../../fixtureCases/security/functions-with-visibility').join('\n'),
},
],
bad: [
{
description: 'Functions without explicitly marked visibility',
code: require('../../../test/fixtures/security/functions-without-visibility').join('\n'),
code: require('../../fixtureCases/security/functions-without-visibility').join('\n'),
},
],
},
Expand Down
10 changes: 5 additions & 5 deletions lib/rules/security/reentrancy.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,25 @@ const meta = {
good: [
{
description: 'Invulnerable Contract 1',
code: require('../../../test/fixtures/security/reentrancy-invulnerable')[0],
code: require('../../fixtureCases/security/reentrancy-invulnerable')[0],
},
{
description: 'Invulnerable Contract 2',
code: require('../../../test/fixtures/security/reentrancy-invulnerable')[1],
code: require('../../fixtureCases/security/reentrancy-invulnerable')[1],
},
{
description: 'Invulnerable Contract 3',
code: require('../../../test/fixtures/security/reentrancy-invulnerable')[2],
code: require('../../fixtureCases/security/reentrancy-invulnerable')[2],
},
],
bad: [
{
description: 'Vulnerable Contract 1',
code: require('../../../test/fixtures/security/reentrancy-vulnerable')[0],
code: require('../../fixtureCases/security/reentrancy-vulnerable')[0],
},
{
description: 'Vulnerable Contract 2',
code: require('../../../test/fixtures/security/reentrancy-vulnerable')[1],
code: require('../../fixtureCases/security/reentrancy-vulnerable')[1],
},
],
},
Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "solhint",
"version": "6.0.1",
"version": "6.0.2",
"description": "Solidity Code Linter",
"main": "lib/index.js",
"keywords": [
Expand Down Expand Up @@ -32,7 +32,6 @@
"files": [
"/conf/",
"/lib/",
"/test/",
"/solhint.js"
],
"author": "Ilya Drabenia <ilya.drobenya@gmail.com>",
Expand Down
77 changes: 11 additions & 66 deletions test/common/contract-builder.js
Original file line number Diff line number Diff line change
@@ -1,69 +1,14 @@
const { times } = require('lodash')

function contractWith(code) {
return `
pragma solidity 0.4.4;


contract A {
${code}
}
`
}

function libraryWith(code) {
return `
pragma solidity 0.4.4;


library A {
${code}
}
`
}

function funcWith(statements) {
return contractWith(`
function b() public {
${statements}
}
`)
}

function modifierWith(statements) {
return contractWith(`
modifier b() {
${statements}
}
`)
}

function multiLine(...args) {
return args.join('\n')
}

function contractWithPrettier(code) {
return `pragma solidity 0.4.4;

contract A {
${code}
}
`
}

function stateDef(count) {
return repeatLines(' uint private a;', count)
}

function constantDef(count) {
return repeatLines(' uint private constant TEST = 1;', count)
}

function repeatLines(line, count) {
return times(count)
.map(() => line)
.join('\n')
}
const {
contractWith,
libraryWith,
funcWith,
modifierWith,
multiLine,
contractWithPrettier,
stateDef,
constantDef,
repeatLines,
} = require('../../lib/common/contract-builder')

module.exports = {
contractWith,
Expand Down
6 changes: 3 additions & 3 deletions test/rules/best-practices/code-complexity.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const { assertErrorCount, assertErrorMessage, assertNoErrors } = require('../../
describe('Linter - code-complexity', () => {
it('should raise error when cyclomatic complexity of a function is too high', () => {
const report = linter.processStr(
funcWith(require('../../fixtures/best-practices/code-complexity-high')),
funcWith(require('../../../lib/fixtureCases/best-practices/code-complexity-high')),
{
rules: { 'code-complexity': 'error' },
}
Expand All @@ -17,7 +17,7 @@ describe('Linter - code-complexity', () => {

it('should not raise error when cyclomatic complexity of a function is equal to max default allowed', () => {
const report = linter.processStr(
funcWith(require('../../fixtures/best-practices/code-complexity-low')),
funcWith(require('../../../lib/fixtureCases/best-practices/code-complexity-low')),
{
rules: { 'code-complexity': 'error' },
}
Expand All @@ -28,7 +28,7 @@ describe('Linter - code-complexity', () => {

it('should raise error when cyclomatic complexity of a modifier is too high', () => {
const report = linter.processStr(
modifierWith(require('../../fixtures/best-practices/code-complexity-high')),
modifierWith(require('../../../lib/fixtureCases/best-practices/code-complexity-high')),
{
rules: { 'code-complexity': 'error' },
}
Expand Down
2 changes: 1 addition & 1 deletion test/rules/best-practices/explicit-types.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const linter = require('../../../lib/index')
const contractWith = require('../../common/contract-builder').contractWith
const { assertErrorCount, assertNoErrors, assertErrorMessage } = require('../../common/asserts')
const VAR_DECLARATIONS = require('../../fixtures/best-practices/explicit-types')
const VAR_DECLARATIONS = require('../../../lib/fixtureCases/best-practices/explicit-types')

const getZeroErrorsObject = () => {
const zeroErrorsExplicit = {}
Expand Down
Loading
Loading