• [Javascript AST] 3. Continue: Write ESLint rule


    The rule we want to write is show warning if user using console method:

    // valid
    foo.console()
    console()
    info()
    console.baz()
    
    // invalid
    console.log()
    console.info()
    console.warn()

    Rule:

    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 console is not allowed"
            });
          }
        };
      }
    };
    
    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);
    }

    'looksLike' & isPrimitive is pretty handy, you can save as until lib.

  • 相关阅读:
    方法和参数
    【转】priority_queue优先队列
    【转】主席树学习
    【转】树链剖分
    【转】线段树完全版~by NotOnlySuccess
    【转】树状数组
    【转】最大流EK算法
    【转】POJ题目分类推荐 (很好很有层次感)
    【转】原根
    【转】Polya定理
  • 原文地址:https://www.cnblogs.com/Answer1215/p/7594742.html
Copyright © 2020-2023  润新知