Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让SonarQube与AngularJS配合得很好?_Javascript_Angularjs_Sonarqube - Fatal编程技术网

Javascript 如何让SonarQube与AngularJS配合得很好?

Javascript 如何让SonarQube与AngularJS配合得很好?,javascript,angularjs,sonarqube,Javascript,Angularjs,Sonarqube,我一直在考虑使用SonarQube对一些javascript代码进行质量检查,但这段代码是使用AngularJS编写的 SonarQube规则之一是检查函数中的行数——这似乎是合理的——但在AngularJS中,函数用于定义控制器、服务和指令,这些函数可能会变得相当大。从概念上讲,它们实际上更像类定义,其他函数嵌套在其中 理想情况下,我想检查内部函数的长度,可能是排除内部函数的外部函数,但我不知道有什么方法可以做到这一点 有没有其他人在AngularJS中使用SonarQube时遇到过这个问题,

我一直在考虑使用SonarQube对一些javascript代码进行质量检查,但这段代码是使用AngularJS编写的

SonarQube规则之一是检查函数中的行数——这似乎是合理的——但在AngularJS中,函数用于定义控制器、服务和指令,这些函数可能会变得相当大。从概念上讲,它们实际上更像类定义,其他函数嵌套在其中

理想情况下,我想检查内部函数的长度,可能是排除内部函数的外部函数,但我不知道有什么方法可以做到这一点


有没有其他人在AngularJS中使用SonarQube时遇到过这个问题,或者有没有人知道一个好的解决方案?

一个解决方案是在中分别声明所有方法


对于某些开发人员来说,这无疑是一种令人不舒服的模式,但这是一种将SonarQube的函数分解为更小部分的方法。

我对AngularJS一无所知,但如何区分外部函数和内部函数?命名约定?还有什么?所谓“内部函数”,我只是指在另一个函数中声明的函数。在AngularJS中,这通常是一个匿名函数,被声明并立即分配为“scope”对象的属性,该对象被传递给定义相关控制器、服务或指令的外部函数。例如,如果Sonar能够识别出一个只做声明和分配10个其他100行函数的函数本身并不算是1000行函数,那就太好了。请参见这里的“简单辣味控制器”示例(大约在页面的一半处-您需要单击该示例上的app.js按钮来查看代码),一个关于AngularJS中如何声明控制器的非常简单的例子:好的,我明白了。但有一个问题:为什么这些外部函数会变大?没有其他方法来设计它们吗?内部函数的内部函数?这是使用AngularJS框架的模式。控制器是一个函数,其任务是为其分配其他功能作用域。对于大型页面或复杂控件,可能涉及许多内部函数。在这种情况下,控制器实际上更像是一个类声明。在使用控制器将函数分配给作用域之前,您可以在控制器外部定义所需的函数,而不是使用内部函数,但是那么这些函数将是全局作用域的,这并不是你真正想要的。你的例子并不能完全解决这个问题,但是我想如果你声明了你的作用域方法(例如)在您的自执行函数中,但在控制器函数之外,然后在其内部分配它们。但您仍然有嵌套在函数中的函数,只是外部函数是自执行的-或者SonarQube是否忽略了该函数?不幸的是,SonarQube将自执行函数视为只是另一个函数,并将行数检查应用于此,因此这根本无法解决问题。似乎SonarQube真的没有准备好与Javascript一起正常工作,因为这是限制范围的常见常规模式,不应该受到与普通函数相同的限制。
(function(){
    var controller = function(dependency){
         //...
    },

    someDirective = function(dependency){
        //...
    },

    //Finally, your module
    module = angular.module("MyMod", []);

    module.controller("MyController", ['dependency', controller]);
    module.directive("someDirective", ['dependency', someDirective]);
}());