首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ESLint自定义规则分析JS文字/标识符

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

Stack Overflow用户
提问于 2020-09-25 13:02:05
回答 1查看 168关注 0票数 1

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

假设我有以下JS代码:

代码语言:javascript
复制
$.ajax({
    url: '/Department/GetAllUsers',
    type: "POST",
    data: data,
    success: function (result) {
        //Some Code
    },
    error: function () {
        //Some Code
    }
});

我想把呼叫限制在控制器的动作上。为此,我编写了以下Custom规则:

代码语言:javascript
复制
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',这是很好的工作。当我拆分字符串或将字符串赋值给变量时,就会出现问题。例如

代码语言:javascript
复制
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#代码分析。

谢谢

EN

回答 1

Stack Overflow用户

发布于 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,您可以跟踪变量引用并检查其赋值。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64064701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档