我有一个传递JSLint的巨大脚本(包括避免所有坏的部分)。除了一个延伸,这是一个非常复杂的混淆代码嵌入在更大的上下文中。 JSLint对这一部分产生了相当多的抱怨,我想为这段代码选择性地禁用它。我已经使用了选择性的
/*jlsint xxx:true/false*/
指令禁用某些微小代码的特定警告,这些代码执行与结构解释相反的操作。
我使用的混淆代码使用了我不知道是否可以禁用的构造。
例如:
for(L=(117.>
导致此消息:
Problem at line 1 character 57: A trailing decimal point can be confused with a dot '117.
当然,我知道我可以清理代码,但它是从混淆器中发出的,我真的不想要清理混淆的代码!
那么,有没有办法告诉JSLint完全忽略拉伸代码?
我知道这个查询JSLint: control comments (selective ignore),但没有回答。
答案 0 :(得分:12)
我认为这已经在JSHint中修复了一段时间。只需用注释包装代码:
/* jshint ignore:start */
// Code here will be linted with ignored by JSHint.
/* jshint ignore:end */
可以找到文档here并向下滚动到“指令”部分。
答案 1 :(得分:1)
如果你愿意,你可以自己将它添加到JSLint,尽管那是边缘邪恶。
这是当前版本的一种快速而肮脏的方式:
我要采取的路线是劫持token
函数switch
阻止/*
样式评论。这是at line 1276 currently:
case '/*':
for (;;) {
i = source_row.search(lx);
...
让我们改变它,以便在一行中查找看起来像/*ignore:true */
的评论(尽管在这种情况下技术上true
一半可以在线上的任何地方,尽管{ {1}}行已经单独排在一行,所以让我们假设两者都成立了。
示例错误,lint-faileding代码:
/*ignore:false */
如果我们找到function spam()
{
var sand = "sand";
/*ignore:true */
var spud = "spud";
/*ignore:false */
window.console.log(sand);
}
,请跳过这一行,直到找到/*ignore:true */
且/*ignore:false */
作为行中第一个字符的行。 。直到那条线上的虚假陈述,我们忽略所有。
/*ignore:...
那很难看,但似乎在起作用。
现在这可能会导致问题。例如,如果您忽略并在以后使用它的部分中有case '/*':
// Opening /* has already been sliced.
if (source_row.startsWith("ignore:true")) {
do {
if (console.log) { console.log(source_row) };
} while (next_line() && !source_row.trim().startsWith("/*ignore:false"));
} else {
// Put in the code that was originally there
}
break;
声明,JSLint_Hacked会抱怨var
示例:
myVar was used before it was defined.
所以这种东西可能会变得讨厌。
而且我只会在你被迫强行扯掉所有东西的情况下使用它,但由于某些原因你没有权力修复每个文件中的内容,虽然你确实有能力编辑它,奇怪的是,就像在这种情况下使用混淆代码一样。整个/*jslint white:true, sloppy:true, browser:true */
function spam()
{
var sand = "spam";
/*ignore:true */
var spud = "spud";
/*ignore:false */
window.console.log(sand + spud);
}
事情都是昙花一现。
我需要花更多时间在JSLint中知道它是如何工作的,但ignore
函数似乎是非破坏性的。也就是说,你可能(并且应该)在next_line()
函数中使用" real" do_jslint()
样式指令,但是当你调用/*jslint ignore:true */
函数时,你必须处理副作用。我在这里使用的黑客行为要容易得多,但也非常强大。