[AST Eslint] No Console allowed

// eslint exercise 1 (no-console)
// When you're finished with this exercise, run
//   "npm start exercise.eslint.2"
//   to move on to the next exercise

module.exports = {
  create(context) {
    return {
      CallExpression(node) {
        if (hasIdentifierObjectAsConsole(node) && hasPropertyWithInvalidMethods(node)) {
          context.report({
            node,
            message: 'Using console is not allowed',
          })
        }
      },
    }
  },
}

function hasPropertyWithInvalidMethods (node) {
    return (
      node.callee.property && 
      ['warn', 'log', 'info'].includes(node.callee.property.name)
  )
}

function hasIdentifierObjectAsConsole(node) {
  return node.callee.object && 
    node.callee.object.type === "Identifier" && 
    node.callee.object.name === "console";
}

 

// eslint exercise 1 (no-console)
// When you're finished with this exercise, run
//   "npm start exercise.eslint.2"
//   to move on to the next exercise

const {RuleTester} = require('eslint')
const rule = require('./no-console')

const ruleTester = new RuleTester()
ruleTester.run('no-console', rule, {
  valid: ['info()', 'console', 'console.log', 'console.baz()'],
  invalid: [
    invalid('console.log()'),
    invalid('console.info()'),
    invalid('console.warn()'),
  ],
})

function invalid(code) {
  return {
    code,
    errors: [{message: 'Using console is not allowed'}],
  }
}
posted @ 2020-01-23 20:37  Zhentiw  阅读(296)  评论(0编辑  收藏  举报