在ESLint

时间:2016-06-22 13:25:56

标签: javascript node.js protractor eslint static-code-analysis

故事:

目前,我正在开发一个特定的ESLint规则(link)来捕捉所有存在阴影内置量角器的变量的地方全局变量,例如browserelement

目前规则的表现如下:

module.exports = function (context) {
  var protractorGlobals = [
    'browser',
    'protractor',
    'element',
    'by',
    '$',
    '$$'
  ]

  function checkVariables (node) {
    var variables = context.getDeclaredVariables(node)
    for (var i = 0; i < variables.length; ++i) {
      if (protractorGlobals.indexOf(variables[i].name) !== -1) {
        context.report(node, 'Unexpected Protractor built-in global variable shadowing')
      }
    }
  }

  return {
    'VariableDeclaration': checkVariables,
    'FunctionDeclaration': checkVariables,
    'FunctionExpression': checkVariables,
    'CatchClause': checkVariables
  }
}

如您所见,我正在寻找涵盖以下情况的所有变量和函数声明,函数表达式,catch子句和switch语句:

var browser = "something";
function test (browser) {};
var browser;
function browser () {};
var browser = 1;
for (var browser = 0; by < 10; ++by) {}
try { json = JSON.parse(input) } catch (browser) {}

问题:

我是否覆盖了当前范围中引入新变量的所有位置?是否有一个更通用的方法来在代码中的任何地方获取声明的变量而不需要猜测并明确定义要查找它们的位置?

1 个答案:

答案 0 :(得分:1)

如果您支持ES6,那么您将缺少val hadoopConf = new Configuration() hadoopConf.set("mapreduce.output.basename", "yourPrefix") yourRDD.map(str => (null, str)) .saveAsNewAPIHadoopFile(s"$outputPath/$dirName", classOf[NullWritable], classOf[String], classOf[TextOutputFormat[NullWritable, String]], hadoopConf) 声明。但是,这样做的方法稍微容易一些。 ESLint使用名为Escope的软件包来跟踪变量声明和用法。您可以查看有关如何访问它的no-redeclare规则,并参阅Escope文档以获取有关API的信息。 Escope应该允许您检查当前范围内的所有变量,看看您是否重新声明已存在的变量。