phadej/jsstana

View on GitHub
eslint-rules/npm-require-name.js

Summary

Maintainability
A
3 hrs
Test Coverage
"use strict";

var jsstana = require("../lib/jsstana.js");
var path = require("path");

module.exports = jsstana.eslintRule("(var ?name (call require ?param))", function(context, node, m) {
  var n = jsstana.match("(string ?paramname)", m.param);
  if (!n) {
    context.report(m.param, "require argument isn't string");
  }

  if (m.name.toLowerCase() === n.paramname.toLowerCase()) { return; }
  if (m.name === "_" && (n.paramname === "underscore" || n.paramname === "lodash")) { return; }
  if (m.name === "p" && n.paramname === "packrattle") { return; }
  if (m.name === "program" && n.paramname === "commander") { return; }
  if (m.name === "jsc" && n.paramname === "jsverify") { return; }
  if (m.name === "walk" && n.paramname === "walkdir") { return; }
  if (n.paramname[0] === ".") {
    var fileName = path.basename(n.paramname).replace(/\.js$/, "");
    if (m.name == fileName) { return; }
  }

  context.report(node, "require assignment variable name and required module name doesn't match");
});