JSLint:控制注释(选择性忽略)

Posted

技术标签:

【中文标题】JSLint:控制注释(选择性忽略)【英文标题】:JSLint: control comments (selective ignore) 【发布时间】:2010-10-10 15:14:49 【问题描述】:

JSLint 是否有类似 javascript Lint 的 control comments(例如 /*jsl:fallthru*/)的东西来使其忽略某些段落?

【问题讨论】:

您想忽略哪个警告/规则? [将此连接到我现在注册的帐户] 我想忽略一个特定 switch..case 块中的失败。 这会很棒。尤其是在企业环境中,全局 linting 规则可能由一组人设置,但可以理解并接受有意识的覆盖。 【参考方案1】:

/*ignore jslint start*/

之前和

/*ignore jslint end*/ 

后面的代码被忽略。例如:

function ignore()
    /*ignore jslint start*/
    var x; var y;
    /*ignore jslint end*/

或导出 JsLint 设置,定义您的 IgnoreErrorStart/ IgnoreErrorEnd 符号并导入。


编辑 有些人可能会将这个答案与 JSHint 混淆。在这种情况下,请使用这些:
/*jshint ignore:start*/
  <!-- code in here -->
/*jshint ignore:end*/

取自https://***.com/a/26012357/313501

【讨论】:

一些上下文将有助于 OP 你可以在 VS > JS Lint options 查看这两条指令 注意:/*ignore jslint end*/ 不能在文件的最后一行。如果不是,它将无法工作。 (匿名) 同意@ZachL,尽管你can hack JSLint yourself(链接是如何在另一个问题上做的例子)如果你感觉邪恶。然而,我想不出在那个链接问题的用例之外曾经有用的时间,即使这样也不聪明,只是一个糟糕的情况。 这对我有用:***.com/a/26012357/313501 - 它使用 /*jshint ignore:start*/:end【参考方案2】:

是的。来自文档[请注意,这是来自旧版本的文档,但它仍然适用]:

JSLint 的实现接受一个选项对象,该对象允许您确定您可以接受的 JavaScript 子集。也可以在脚本的源代码中设置这些选项。

选项规范可能如下所示:

/*jslint nomen: true, debug: true,
  evil: false, vars: true */

选项规范以 /*jslint 开头。请注意,j 之前没有空格。该规范包含一系列名称值对,其中名称是 JSLint 选项,值是真或假。选项规范优先于选项对象。

文档没有具体提及,但您可以使用多个 jslint cmets 在整个代码中启用和禁用不同的检查(感谢 Dominic Mitchell)。

有一个complete list of options in the documentation。

【讨论】:

实际上,您可以随时将这些 jslint cmets 添加到您的代码中,并根据需要启用和禁用。但重写并避免这种需要可能更明智。 谢谢,我不知道你能做到。我想我认为这与传递 options 参数相同。【参考方案3】:

以下是补充 Matthew Crumley 出色答案的代码示例:

(function ($) 
  $.isValidEmail = function(email)
    /*jslint maxlen: 1000*/
    var EMAIL_REGEXP = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`\|~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`\|~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i;
    /*jslint maxlen: 200*/
    return EMAIL_REGEXP.test(email);
  ;
(jQuery));

【讨论】:

请详细说明这个问题的答案,即。这如何强制 JSLint 忽略标记代码段中的错误。 我的代码就是一个例子。在某些情况下,这种方法允许您忽略 1+ 行代码的某些规则,然后将其重新打开。如果你想完全关闭 JSLint,这种方法是行不通的。但是,很多时候您只想关闭一两个规则,而不是完全关闭 JSLint。使用这种方法,可以完全关闭 JSLint,但我不确定确切的注释文本是什么。【参考方案4】:

据我所知,这里没有人回答这个问题。下面的代码仍然给我验证错误,我不能让 JSLint 接受我现在没有时间更正一个工作正则表达式给定 ACTUAL PRIORITIES。

我收到的错误与未转义的“”有关,可能会导致我的新专业团队拒绝将 JSLint 作为可行的工具。对于我们为更有效地发展所做的努力,似乎没有办法闭嘴,这似乎是有问题的。

/*jslint browser: true, devel: true, todo: true, regexp: true */
/*global $ */
/*
    Abstract:
        + This module constitutes a layer of abstraction surrounding our bootstrap dependencies.
        + This module also contains some utility functions (so find a better place for them already!).
    Validation:
        + This module has been validated using JSLint (www.jslint.com).
*/
var shoelaceModule = (function () 
    'use strict';
    return 
        showModal: function ($target) 
            $target.modal('show');
        ,

        hideModal: function ($target) 
            $target.modal('hide');
        ,

        /*jsl:ignore */
        /*ignore jslint start */
        stringFormat: function (format) 
            var args = Array.prototype.slice.call(arguments, 1);
            return format.replace(/([^]*)/g, function (match, number) 
                return args[number] !== 'undefined' ? args[number] : match;
            );
        ,
        /*ignore jslint end */
        /*jsl:end */

        init: function () 
            return this;
        
    ;
());

【讨论】:

【参考方案5】:

好像不是这样。一些谷歌搜索发现了其他人的几篇帖子,以及 JSLint 人员的回复,内容是“修复你的代码而不是故意标记它有缺陷”。看起来并不完全友好。当然,也许在这种情况下你应该只修复代码,但我留给你回答。

【讨论】:

嗯,有一个故意的失败 - 这真的很有意义。我最终创建了一种虚拟函数,这有点烦人。【参考方案6】:

您还可以:......

ignoreThis(); // jslint ignore:line

Is there a way to suppress JSHint warning for one given line?

【讨论】:

如果你有一段代码,这不是很直观,但对于我遇到的问题来说已经足够了。谢谢! 我相信问题是关于 JSLint,而不是 JSHint【参考方案7】:

我要说,不。JSLint 似乎没有简单的方法来说“忽略这段代码”,这让我很烦恼。单独禁用不同的选项,然后像马特建议的那样重新打开它们应该可以工作,但它不会像 JSHint 的/* jshint ignore:start *//* jshint ignore:end */ 那样优雅。

我之所以研究这个是因为我使用的是Brackets,它是 JSLint 附带的,因为它是默认的 linter。我有一些缩小的 3rd 方代码,我暂时复制到我的 .js 中,只要它在那里,JSLint 就会抱怨。令人讨厌的是我经常想在早期粘贴一个缩小的块,这也是我希望 linter 查看 my 代码以帮助我排除模糊错误的时候。稍后我将使用 Grunt 缩小并连接所有内容,但无法在早期禁用它真的非常非常烦人。

【讨论】:

【参考方案8】:

这似乎对我有用。 (使用 zedapp 中嵌入的 jslint - zedapp.org)

/*jslint ignore:start*/
require([],function(require, exports, module) 
  /*jslint ignore:end*/
  
  var api = 
    life: 
      universe: 
        everything: function() 
          this.everything = answer : 42;
        
      
    
  ;
 api.life.universe.everything.bind(api.life.universe)();
 console.log(JSON.stringify(api));

  /*jslint ignore:start*/
  return api;
);
/*jslint ignore:end*/
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.js"&gt;&lt;/script&gt;

【讨论】:

【参考方案9】:

/*jsl:ignore*//*jsl:end*/ 放在代码周围。

【讨论】:

这是用于 JavascriptLint,而不是 JSLint

以上是关于JSLint:控制注释(选择性忽略)的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 jslint(VS 2010 扩展名)以忽略文件?

JSLint,全局禁用规则

Idea版本控制

Sourcetree忽略文件

从 chrome 或 firefox 中的调试控制台对 .js 文件运行 JSLint

PHPDocument 代码注释规范总结