Browse Source

Handle function names in backtraces

Gaël Métais 10 năm trước cách đây
mục cha
commit
cac36727e8

+ 1 - 0
front/src/css/rule.css

@@ -122,6 +122,7 @@
 }
 .offenders .offenderButton .backtrace {
   white-space: nowrap;
+  padding: 0.5em;
 }
 .offenders .offenderButton:hover {
   border-bottom-left-radius: 0;

+ 1 - 0
front/src/less/rule.less

@@ -137,6 +137,7 @@
 
         .backtrace {
             white-space: nowrap;
+            padding: 0.5em;
         }
 
         &:hover {

+ 13 - 6
lib/offendersHelpers.js

@@ -107,13 +107,19 @@ var OffendersHelpers = function() {
             var parts = null;
 
             for (var i=0 ; i<traceArray.length ; i++) {
-                parts = /^([^ ]+):(\d*)$/.exec(traceArray[i]);
+                parts = /^(([\w$]+) )?([^ ]+):(\d+)$/.exec(traceArray[i]);
 
                 if (parts) {
-                    results.push({
-                        file: parts[1],
-                        line: parseInt(parts[2], 10)
-                    });
+                    var obj = {
+                        file: parts[3],
+                        line: parseInt(parts[4], 10)
+                    };
+
+                    if (parts[2]) {
+                        obj.functionName = parts[2];
+                    }
+
+                    results.push(obj);
                 } else {
                     return null;
                 }
@@ -131,7 +137,8 @@ var OffendersHelpers = function() {
 
         var html = '<div class="offenderButton opens">backtrace<div class="backtrace">';
         backtraceArray.forEach(function(backtraceObj) {
-            html += '<div><a href="' + backtraceObj.file + '" target="_blank">' + backtraceObj.file + '</a> line ' + backtraceObj.line + '</div>';
+            var functionName = (backtraceObj.functionName) ? backtraceObj.functionName + '() ' : '';
+            html += '<div>' + functionName + '<a href="' + backtraceObj.file + '" target="_blank">' + backtraceObj.file + '</a> line ' + backtraceObj.line + '</div>';
         });
         return html + '</div></div>';
     };

+ 4 - 2
test/core/offendersHelpersTest.js

@@ -137,7 +137,7 @@ describe('offendersHelpers', function() {
     describe('backtraceToArray', function() {
 
         it('should transform a backtrace into an array', function() {
-            var result = offendersHelpers.backtraceToArray('http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js:1 / http://pouet.com/js/main.js:1');
+            var result = offendersHelpers.backtraceToArray('http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js:1 / callback http://pouet.com/js/main.js:1');
 
             result.should.deep.equal([
                 {
@@ -145,6 +145,7 @@ describe('offendersHelpers', function() {
                     line: 1
                 },
                 {
+                    functionName: 'callback',
                     file: 'http://pouet.com/js/main.js',
                     line: 1
                 }
@@ -168,12 +169,13 @@ describe('offendersHelpers', function() {
                     line: 1
                 },
                 {
+                    functionName: 'callback',
                     file: 'http://pouet.com/js/main.js',
                     line: 1
                 }
             ]);
 
-            result.should.equal('<div class="offenderButton opens">backtrace<div class="backtrace"><div><a href="http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js" target="_blank">http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js</a> line 1</div><div><a href="http://pouet.com/js/main.js" target="_blank">http://pouet.com/js/main.js</a> line 1</div></div></div>');
+            result.should.equal('<div class="offenderButton opens">backtrace<div class="backtrace"><div><a href="http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js" target="_blank">http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js</a> line 1</div><div>callback() <a href="http://pouet.com/js/main.js" target="_blank">http://pouet.com/js/main.js</a> line 1</div></div></div>');
         });
 
         it('should display "no backtrace"', function() {