Javascript 如何使用ESLint自定义规则分析JS文本/标识符

Javascript 如何使用ESLint自定义规则分析JS文本/标识符,javascript,eslint,static-analysis,eslintrc,typescript-eslint,Javascript,Eslint,Static Analysis,Eslintrc,Typescript Eslint,我将用一个例子来解释这个场景 假设我有以下JS代码: $.ajax({ url: '/Department/GetAllUsers', type: "POST", data: data, success: function (result) { //Some Code }, error: function () { //Some Code } }); 我想限制对控制器动作的调用。因此,我

我将用一个例子来解释这个场景

假设我有以下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是否可能实现这一点

简言之,我想要像context.SemanticModel.GetSymbolInfo(节点)这样的东西,它在Roslyn中用于C#代码分析


谢谢

您可以使用ESLint的scope manager

在ESLint自己的代码库中有许多使用范围管理器的示例:

使用此API,您可以跟踪变量引用并检查其赋值


请注意,这有一些限制。例如,您将无法跨模块边界或功能边界跟踪值。

您可以使用ESLint的范围管理器

在ESLint自己的代码库中有许多使用范围管理器的示例:

使用此API,您可以跟踪变量引用并检查其赋值


请注意,这有一些限制。例如,您将无法跨模块边界或函数边界跟踪值。

如何准确地检查
var URL={main:'/Department/getalUsers'}?如何准确地检查
var url={main:'/Department/getalluser'}