Javascript 将@author的使用视为违反代码样式
目标: 如果项目中的Javascript 将@author的使用视为违反代码样式,javascript,jslint,jshint,eslint,static-code-analysis,Javascript,Jslint,Jshint,Eslint,Static Code Analysis,目标: 如果项目中的.js文件中的任何位置使用了@author标记,则发出警告 问题: 这是jshint或其他静态代码检查工具可以帮助的吗?如果没有,我有什么选择 说明: 我完全同意Paul在thread上的回答,并将@author标记视为不必要的噪音 而且,在Python世界中,我看到人们检查标记的使用情况。例如,明确声明不使用@author标记。他们开发了一套定制的flake 8检查,包括: [H105] Don’t use author tags. 现在,我正试图用JavaScript解
.js
文件中的任何位置使用了@author
标记,则发出警告
问题:
这是jshint
或其他静态代码检查工具可以帮助的吗?如果没有,我有什么选择
说明:
我完全同意Paul在thread上的回答,并将@author
标记视为不必要的噪音
而且,在Python世界中,我看到人们检查标记的使用情况。例如,明确声明不使用@author
标记。他们开发了一套定制的flake 8
检查,包括:
[H105] Don’t use author tags.
现在,我正试图用JavaScript解决同样的问题
示例(这不应通过代码质量检查):
/**
*@作者约翰·史密斯
*/
"严格使用",;
不,jshint不能这样做。只需在源代码中搜索@author。如果需要,可以将其放入git预提交挂钩中。或者,如果JSDoc遇到@author,您可以让它在创建文档时出错 对不起,我本想在发布答案之前尝试一下,但悬赏金快用完了。^)
声称有一种方法可以编写自己的JSHint模块
- 看起来像是在一个分支机构里做的
- 据说,这个项目已经过时了。它被合并到主存储库中,这是一个好迹象
// This module errs on any identifier that doesn't starts with 'kitty'.
function myModule(linter) {
linter.on("Identifier", function (ident) {
if (ident.name && ident.name.slice(0, 5) !== "kitty")
linter.report.addError("C001", "More cats please.");
});
}
以下是关于如何设置过梁的初始部分:
var Linter = require("jshint").Linter;
var code = "<your beautiful JavaScript code here>";
// Create a new instance of Linter.
var linter = new Linter(code);
// Now you can teach JSHint about your predefined variables.
// Note that default JavaScript identifiers are already there.
linter.addGlobals({
jQuery: false,
MyPlugin: true
});
// If you have any JSHint extensions, you can attach them
// to the current instance.
linter.addModule(myModule);
// Finally, parse your code.
linter.parse();
var Linter=require(“jshint”).Linter;
var代码=”;
//创建Linter的新实例。
var linter=新的linter(代码);
//现在,您可以向JSHint教授预定义变量。
//请注意,默认JavaScript标识符已经存在。
林特·阿德格罗巴尔斯({
jQuery:false,
MyPlugin:true
});
//如果您有任何JSHint扩展,可以附加它们
//到当前实例。
linter.addModule(myModule);
//最后,解析代码。
parse();
我意识到这是非常通用的(您仍然需要研究linter.on
选项,而不仅仅是标识符
;还有一个字符串,例如),但它看起来很有希望。同样,您可以看到如何使用说明进行集成。看起来这就是它的格式
我还没有试过这个。只是没有时间在家;抱歉
torazaburo的“Justgrep
it”回答不起作用有什么具体原因吗?您是否需要将其作为代码质量工作流的一部分?如果是这样,那么“编写您自己的模块”似乎就是一条出路
如果你愿意的话,也有相当明显的方法来破解JSLint,但我不确定Crockford是否会喜欢 通过一个用于JavaScript的可插入linting实用程序解决了这个问题
创建了一个(注意它是多么简单)并将其保存到规则/no author.js
:
/**
* @fileoverview A rule to disallow @author tag in code
*/
module.exports = function (context) {
"use strict";
function checkComment(node) {
var commentToCheck = node.value.toLowerCase().trim();
if (commentToCheck.indexOf("@author") !== -1) {
context.report(node, "A comment unexpectedly contains @author.");
}
}
return {
"BlockComment": checkComment,
"LineComment": checkComment
};
};
现在,假设我有一个test.js
文件,它违反了@author
标记的使用:
/**
* @author John Smith <john@smith.com>
*/
仅供参考,no author:2
此处将规则作为错误打开(触发时退出代码为1)。no,jshint不能这样做。只需在源代码中搜索@author
。如果需要,可以将其放入git预提交挂钩中。或者,如果JSDoc在创建文档时遇到@author
@torazaburo,你可以让它出错。谢谢你的有用评论,它实际上可以是一个合法的答案。哈,当然,在我写这个答案的时候,赏金会被授予。这就是我得到的。:)别担心,我会试试看,然后再给你回复。非常感谢你。(今天的投票数不多,但这绝对值得一次)仅供参考,我已经发布了我是如何用ESLint
解决这个问题的(注意简单性)。不管怎样,赏金归你。谢谢你调查这件事。
/**
* @author John Smith <john@smith.com>
*/
$ eslint test.js --rulesdir=rules/ --rule='no-author: 2'
test.js
1:0 error A comment unexpectedly contains @author no-author
✖ 1 problem