[Javascript AST] 4. Continue: Report ESLint error

const disallowedMethods = ["log", "info", "warn", "error", "dir"];

module.exports = {
  meta: {
    docs: {
      description: "Disallow use of console",
      category: "Best Practices",
      recommended: true
    }
  },
  create(context) {
    return {
      Identifier(node) {
        
        const isConsoleCall = looksLike(node, {
          name: "console",
          parent: {
            type: "MemberExpression",
            property: {
              name: val => disallowedMethods.includes(val)
            }
          }
        });
        // find the identifier with name 'console'
        if (!isConsoleCall) {
          return;
        }

 context.report({ node, message: "Using {{identifier}} is not allowed", data: { identifier: node.name // console
 } });
      }
    };
  }
};

function looksLike(a, b) {
  return (
    a &&
    b &&
    Object.keys(b).every(bKey => {
      const bVal = b[bKey];
      const aVal = a[bKey];
      if (typeof bVal === "function") {
        return bVal(aVal);
      }
      return isPrimitive(bVal) ? bVal === aVal : looksLike(aVal, bVal);
    })
  );
}

function isPrimitive(val) {
  return val == null || /^[sbn]/.test(typeof val);
}

 

We can use placeholder for more detail information:node

"Using {{identifier}} is not allowed"

The placeholder can be found in data prop:ide

          data: {
             identifier: node.name // console
          }
相關文章
相關標籤/搜索