我将用一个例子来解释这个场景。
假设我有以下JS代码:
$.ajax({
url: '/Department/GetAllUsers',
type: "POST",
data: data,
success: function (result) {
//Some Code
},
error: function () {
//Some Code
}
});我想把呼叫限制在控制器的动作上。为此,我编写了以下Custom规则:
module.exports = {
meta: {
type: "problem",
docs: {
description: "Prohibited Method",
category: "Method",
recommended: true,
url: ""
},
messages: {
messageDefault: "This method is Prohibited to use"
},
fixable: "code",
schema: [] // no options
},
create: function (context) {
return {
Literal(node) {
var literalValue = node.value.toString();
var cont = literalValue.split("/").filter(x => x.length > 1);
{
if (cont[0] === 'Department' && cont[1] === 'GetAllUsers') {
context.report({
node: node,
messageId: "messageDefault",
});
}
}
}
};
}
};因此,在这里,我限制使用'Department/GetAllUsers',这是很好的工作。当我拆分字符串或将字符串赋值给变量时,就会出现问题。例如
var controller = "Department";
var action = "GetAllUsers";
$.ajax({
url: "/" + controller + "/" + action,
//or '/Department/' + 'GetAllUsers'
type: "POST",
data: data,
success: function (result) {
//Some Code
},
error: function () {
//Some Code
}
});在这里,限制不起作用,我是否可以在url中解析变量值?这可以使用ESLint吗?
简而言之,我想要类似于context.SemanticModel.GetSymbolInfo(节点)的东西,它用于C#代码分析。
谢谢
发布于 2020-09-25 22:16:41
您可以使用ESLint的范围管理器https://eslint.org/docs/developer-guide/scope-manager-interface
在ESLint自己的代码库:https://github.com/eslint/eslint/search?q=getScope中使用范围管理器的例子很多
使用此API,您可以跟踪变量引用并检查其赋值。
请注意,这有一些限制。例如,您将无法跨模块边界或函数边界跟踪值。
https://stackoverflow.com/questions/64064701
复制相似问题