SonarQube JavaScript custom plugin, improvements in description
authorGustavo Martin Morcuende <gu.martinm@gmail.com>
Sun, 21 Aug 2016 21:20:57 +0000 (23:20 +0200)
committerGustavo Martin Morcuende <gu.martinm@gmail.com>
Sun, 21 Aug 2016 21:20:57 +0000 (23:20 +0200)
Sonar/Plugins/sonar-custom-javascript-plugin/src/main/resources/de/example/l10n/javascript/rules/custom/GUJS0001_javascript.html
Sonar/Plugins/sonar-custom-javascript-plugin/src/main/resources/de/example/l10n/javascript/rules/custom/GUJS0001_javascript.json

index ab6882f..16fffe2 100644 (file)
@@ -1,18 +1,21 @@
-<p>Custom rule description.</p>
+<p>AngularJS Controllers are instantiated every time a web page is loaded. <code>$rootScope.$on</code> do not automatically release the pointer to 
+the Controller where it was called and <code>$rootScope</code> is an AngularJS singleton. After a couple of web page refreshes we end up having 
+many instantiated Controllers that will not be used and they can not be reclaimed by the garbage collector because there is a reference to them 
+from <code>$rootScope</code>. As a good practice we will not use <code>$rootScope.$on</code> in AngularJS Controllers.</p>
 <h2>Noncompliant Code Example</h2>
 <pre>
-class MyClass {
-       
-       int foo1(int value) { return 0; }
-               
-       MyClass foo2(MyClass value) { return null; }
-       
-       ...
+function MyController($rootScope, USERS) {
+    var vm = this;
+
+    $rootScope.$on(USERS.ROOTSCOPE.BROADCAST, usersChildOnRootBroadcast); //$rootScope is a singleton, it is not released and either MyController
+        
+    function usersChildOnRootBroadcast(events, broadcastUser) {
+        vm.broadcastUser = broadcastUser;
+    }
 }
 </pre>
 <h2>See</h2>
 <ul>
-  <li> <a href="https://www.securecoding.cert.org/confluence/x/EYBUC">CERT, MSC11-J.</a> - You are doing wrong!!! </li>
+  <li> <a href="https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy">AngularJS</a> - Do not use $rootScope.$on in AngularJS Controllers</li>
 </ul>
 
index 928a6af..82d0ab8 100644 (file)
@@ -1,12 +1,13 @@
 {
-  "title": "Function names should comply with a naming convention",
+  "title": "Do not use $rootScope.$on in AngularJS Controllers",
   "status": "ready",
   "remediation": {
     "func": "Constant\/Issue",
     "constantCost": "5min"
   },
   "tags": [
-    "bug"
+    "bug",
+    "angularjs"
   ],
   "defaultSeverity": "Major"
 }