javascript - 如何使用 ESLint 自定义规则分析 JS 文字/标识符
问题描述
我将用一个例子来解释这个场景。
假设我有以下 JS 代码:
$.ajax({
url: '/Department/GetAllUsers',
type: "POST",
data: data,
success: function (result) {
//Some Code
},
error: function () {
//Some Code
}
});
我想限制对控制器该操作的调用。因此,我为此编写了以下自定义 ES Lint 规则:
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 吗?
简而言之,我想要在 Roslyn 中用于 C# 代码分析的 context.SemanticModel.GetSymbolInfo(node) 之类的东西。
谢谢
解决方案
你可以使用 ESLint 的范围管理器 https://eslint.org/docs/developer-guide/scope-manager-interface
在 ESLint 自己的代码库中有很多使用范围管理器的例子: https ://github.com/eslint/eslint/search?q=getScope
使用此 API,您可以跟踪变量引用并检查其分配。
请注意,这有一些限制。例如,您将无法跨模块边界或函数边界跟踪值。
推荐阅读
- tensorflow2.0 - 对自定义数据集上的多类分类进行微调的拥抱脸 DistilBERT 在预测时产生奇怪的输出形状
- function - Function and surface plot Julia
- flutter - Flutter Web:URL 栏不隐藏在滚动条上
- javascript - 对列表中项目的视图的本机更改背景颜色做出反应
- reactjs - 我可以在 ANT 设计表中使用粘性水平滚动条吗?
- c# - Xunit 测试用例给出了涉及构造函数的错误
- postgresql - shp2pgsql gsid 转换问题
- filenet-content-engine - 使用 SearchSQL 时如何加入 Document 和 ClassDefinition 对象?
- python - 我可以使用 python VLC 流式传输文件吗?
- android-studio - 为什么我们需要使用 Android Studio 来构建 Flutter 应用?