首页 > 编程语言 > 详细

[Javascript AST] 2. Write a simple ESLint rule

时间:2017-09-25 21:16:58      阅读:247      评论:0      收藏:0      [点我收藏+]

What we want to do is checking if user write nested if statements which actually can combine to one:

// BAD
if (a) {
  console.log("a");
} else { 
  if (b) {
    console.log("b");
  } 
}

// GOOD
if (a) {
  console.log("a");
} else if (b) {
    console.log("b");
  } 
}

////////////////////////

// BAD
if (a) {
   if (b) {
    console.log("b");
   } 
} 

// GOOD
if (a) {
  console.log("a");
   if (b) {
    console.log("b");
   } 
} 

// GOOD
if (a && b) {
    console.log("b");
} 

 

Notice that if statement can write with block statement or without block statem, such as:

if(a) 
 if(b) 
   console.log(‘b‘)

 

Rule:

export default function(context) {
  return {
    IfStatement(node) {
      var ancestors = context.getAncestors(),
        parent = ancestors.pop(),
        grandparent = ancestors.pop();

      if (typeof grandparent === "undefined") {
        return;
      }

      if (
        (parent.type === "BlockStatement" && // if has if() { if() {}}, nested if‘s parent is a BlockStatement
        parent.body.length === 1 && // if() { console.log(); if() {} }, we consider this is fine
          grandparent.type === "IfStatement") || // grandparent should be a if statement
        parent.consequent === node // sometime we write if() something, don‘t have blockstatement, then we check consequent should be the node iteself
      ) {
        context.report(node, "nested if statement");
      }
    }
  };
}

 

 

 

[Javascript AST] 2. Write a simple ESLint rule

原文:http://www.cnblogs.com/Answer1215/p/7593975.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!