[Webkit-unassigned] [Bug 117941] code coverage report

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Jun 25 11:56:18 PDT 2013


https://bugs.webkit.org/show_bug.cgi?id=117941


Joseph Pecoraro <joepeck at webkit.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #205327|review?                     |review+
               Flag|                            |




--- Comment #6 from Joseph Pecoraro <joepeck at webkit.org>  2013-06-25 11:58:13 PST ---
(From update of attachment 205327)
View in context: https://bugs.webkit.org/attachment.cgi?id=205327&action=review

Overall this looks good. I'd like to see a second patch with more style consistency and a few of the other comments addressed, but the logic looks good so r+

> Tools/CodeCoverage/report.html:77
> +                if(hits == -1)
> +                    return 'white'; // Non-code lines
> +                else if(hits == 0)
> +                    return 'orange'; // Unexecuted lines

Style: "if(" => "if ("

Suggestion: For JS in the Web Inspector we prefer to use === wherever possible. These and others could be made strict equality.

> Tools/CodeCoverage/report.html:79
> +                    // Executed lines are between red and green

Nit: Comments should be sentences and end with a period. Here and throughout the patch.

> Tools/CodeCoverage/report.html:81
> +                    return 'rgb('+ relativeHeat + ',' + (255 - relativeHeat) + ', 0)';

Style: space between substrings, so between 'rob(' and the +.

> Tools/CodeCoverage/report.html:88
> +                return 'rgb('+ (255 - value) + ',' + value + ', 0)';

Ditto.

> Tools/CodeCoverage/report.html:93
> +                var children = this.parentNode.childNodes[this.parentNode.childNodes.length - 1];

Suggestion: this.parentNode.lastChild

> Tools/CodeCoverage/report.html:114
> +                for (var i = 0; i < fileData.hitLines.length; i++)

Suggestion: Newlines before/after these for loops would make the code a little more readable.

> Tools/CodeCoverage/report.html:133
> +                    textColumn.style.background = getHeatBackgroundColor(hits[i],fileData.maxHeat);

Style: space after comma

> Tools/CodeCoverage/report.html:135
> +                    textColumn.style.whiteSpace = 'nowrap';
> +                    textColumn.style.fontFamily = 'Courier, monospace';

How about giving the textColumn a className and putting these styles in CSS?

> Tools/CodeCoverage/report.html:146
> +            function fileClicked()

I'd prefer to see an "event" parameter to this click handler instead of depending on window.event below. Being explicit makes code easier to follow.

> Tools/CodeCoverage/report.html:154
> +                var xmlhttp=new XMLHttpRequest();
> +                xmlhttp.onreadystatechange=function()
> +                {
> +                    if (xmlhttp.readyState==4) {
> +                        var codeviewer = document.getElementById('codeviewer');
> +                        codeviewer.replaceChild(processFile(xmlhttp.fileData,xmlhttp.responseText), codeviewer.childNodes[0]);
> +                    }

Style: spaces around =, ==, and comma. This comment applies here and throughout the code.

"xmlhttp" is a weird name, how about "xhr"?

> Tools/CodeCoverage/report.html:190
> +                a.href = 'javascript:void(0)';

We try to avoid javascript: whenever possible. This could just be:

    a.href = '#';

And inside the event handler (fileClicked) you can call:

    event.preventDefault();

> Tools/CodeCoverage/report.html:191
> +                a.onclick = fileClicked;

I'd prefer to see addEventListener. How about:

    a.addEventListener('click', fileClicked.bind(a));

Or just "fileClicked" and instead of using "this" in the handler you could use "event.target".

> Tools/CodeCoverage/report.html:211
> +                var subdirNames = [];
> +                var fileNames = [];
> +                for (var subdir in dir.subdirs)
> +                    subdirNames.push(subdir);
> +                for (var file in dir.files)
> +                    fileNames.push(file);
> +                subdirNames.sort();
> +                fileNames.sort();

Seems like this could be:

    var subdirNames = Object.keys(dir.subdirs).sort();
    var fileNames = Object.keys(dir.files).sort();

> Tools/CodeCoverage/report.html:222
> +                img.onclick = expandClicked;

Style: addEventListener. You may need to bind so that "this" makes sense in the handler.

> Tools/CodeCoverage/report.html:235
> +                li.appendChild(makeGraphs(dir));

There is a lot of makeGraphs going on. Could some of this be done lazily like when you click an item?

> Tools/CodeCoverage/report.html:291
> +                directory.coverage = directory.totalHitLines / directory.totalLines;

Is it possible that directory.totalLines is 0? If so then coverage would be Infinity. You should 0 check like you do with branchCoverage just in case.

> Tools/CodeCoverage/report.html:314
> +                var directory = {};

How about naming this rootDirectory, or something more descriptive?

> Tools/CodeCoverage/report.html:336
> +                directories.replaceChild(report, directories.childNodes[0]);

Suggestion: directories.childNodes[0] => directories.firstChild

> Tools/Scripts/generate-coverage-data:80
> +# Open report
> +my $url = 'file://' . sourceDir() . '/Tools/CodeCoverage/report.html?' . $resultName;
> +system "open -g -a Safari";
> +system "osascript -e \"tell application \\\"Safari\\\" to make new document with properties {URL:\\\"" . $url . "\\\"} at front\"";

Why not just do:

    system "open '$url'";

Does the Apple Script (Mac only by the way) do anything special?

It might also be nice to have a way to open a URL that supports other OSs, like linux. I see there are some Perl modules that do that, but nothing built-in.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list