Skip to content

Commit

Permalink
Merge pull request #391 from protofire/fix/no-console-update
Browse files Browse the repository at this point in the history
fix: no-console rule update
  • Loading branch information
dbale-altoros committed Feb 8, 2023
2 parents 735dd49 + 7110266 commit 021c960
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
25 changes: 15 additions & 10 deletions lib/rules/best-practises/no-console.js
Expand Up @@ -15,11 +15,11 @@ const meta = {
},
{
description: 'No hardhat/console.sol import statements',
code: 'import "hardhat/console.sol"' // eslint-disable-line
code: 'import "hardhat/console.sol"',
},
{
description: 'No forge-std console.sol & console2.sol import statements',
code: 'import "forge-std/consoleN.sol"' // eslint-disable-line
code: 'import "forge-std/consoleN.sol"',
},
],
},
Expand All @@ -37,26 +37,31 @@ class NoConsoleLogChecker extends BaseChecker {
}

ImportDirective(node) {
this.isAnImport(node)
if (this.isAnImport(node)) {
this.error(node, 'No import "hardhat/console.sol" or "forge-std/console.sol" statements') // eslint-disable-line
if (this.isConsoleImport(node)) {
this.error(node, 'Unexpected import of console file')
}
}

FunctionCall(node) {
if (this.isConsoleLog(node)) {
this.error(node, 'No console.logX or console2.log statements')
this.error(node, 'Unexpected console statement')
}
}

isConsoleLog(node) {
return node.expression.expression.name.includes('console')
return (
node.expression.expression.type === 'Identifier' &&
(node.expression.expression.name === 'console' ||
node.expression.expression.name === 'console2') &&
node.expression.memberName.startsWith('log')
)
}

isAnImport(node) {
isConsoleImport(node) {
return (
node.type === 'ImportDirective' &&
(node.path === 'hardhat/console.sol' || node.path.includes('forge-std/console'))
node.path === 'hardhat/console.sol' ||
node.path === 'forge-std/console.sol' ||
node.path === 'forge-std/console2.sol'
)
}
}
Expand Down
27 changes: 25 additions & 2 deletions test/rules/best-practises/no-console.js
Expand Up @@ -3,8 +3,8 @@ const linter = require('../../../lib/index')
const { assertErrorMessage } = require('../../common/asserts')
const { funcWith } = require('../../common/contract-builder')

const FUNCTION_CALL_ERROR = 'No console.logX or console2.log statements'
const IMPORT_ERROR = 'No import "hardhat/console.sol" or "forge-std/console.sol" statements'
const FUNCTION_CALL_ERROR = 'Unexpected console statement'
const IMPORT_ERROR = 'Unexpected import of console file'

describe('Linter - no-console', () => {
it('should raise console.log() is not allowed', () => {
Expand Down Expand Up @@ -113,4 +113,27 @@ describe('Linter - no-console', () => {

assert.equal(report.errorCount, 0)
})

it('should NOT raise error when method invocation contains "console" string', () => {
const code = `
contract A {
struct Console {
uint256 one;
uint256 two;
}
Console[] public consoleTest;
Console[] public console;
function niceFunction() external {
consoleTest.push(0,0);
console.push = (1,1);
}
}
`

const report = linter.processStr(code, {
rules: { 'no-console': ['error'] },
})

assert.equal(report.errorCount, 0)
})
})

0 comments on commit 021c960

Please sign in to comment.