ryanluker / vscode-coverage-gutters

Display test coverage generated by lcov and xml - works with many languages
https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters
MIT License
460 stars 88 forks source link

Error: Cannot read property 'forEach' of undefined #204

Closed learn-more closed 5 years ago

learn-more commented 5 years ago

Describe the bug When trying to run this on my repo, the following error is shown:

[1548524642981][coverageparser][clover-parse]: Error: filename: r:\src\mattermost\build\logs\clover.xml Cannot read property 'forEach' of undefined
[1548524642981][coverageparser][clover-parse]: Stacktrace: TypeError: filename: r:\src\mattermost\build\logs\clover.xml Cannot read property 'forEach' of undefined
    at C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\@cvrg-report\clover-json\src\index.js:11:31
    at Array.forEach (<anonymous>)
    at classDetailsFromProjects (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\@cvrg-report\clover-json\src\index.js:10:14)
    at unpackage (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\@cvrg-report\clover-json\src\index.js:23:24)
    at C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\@cvrg-report\clover-json\src\index.js:82:26
    at Parser.<anonymous> (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\xml2js\lib\parser.js:303:18)
    at emitOne (events.js:116:13)
    at Parser.emit (events.js:211:7)
    at SAXParser.onclosetag (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\xml2js\lib\parser.js:261:26)
    at emit (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\sax\lib\sax.js:624:35)
    at emitNode (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\sax\lib\sax.js:629:5)
    at closeTag (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\sax\lib\sax.js:889:7)
    at SAXParser.write (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\sax\lib\sax.js:1436:13)
    at Parser.exports.Parser.Parser.parseString (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\xml2js\lib\parser.js:322:31)
    at Parser.bind [as parseString] (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\xml2js\lib\parser.js:5:59)
    at exports.parseString (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\xml2js\lib\parser.js:354:19)
    at parse.parseContent (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\@cvrg-report\clover-json\src\index.js:78:9)
    at new Promise (<anonymous>)
    at Object.parse.parseContent (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\node_modules\@cvrg-report\clover-json\src\index.js:77:12)
    at CoverageParser.<anonymous> (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:118:50)
    at Generator.next (<anonymous>)
    at __awaiter (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:7:71)
    at new Promise (<anonymous>)
    at __awaiter (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:3:12)
    at CoverageParser.xmlExtractClover (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:116:16)
    at CoverageParser.<anonymous> (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:39:47)
    at Generator.next (<anonymous>)
    at __awaiter (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:7:71)
    at new Promise (<anonymous>)
    at __awaiter (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:3:12)
    at CoverageParser.filesToSections (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\files\coverageparser.js:27:16)
    at CoverageService.<anonymous> (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\coverage-system\coverageservice.js:76:64)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Users\Mark.DEV2\.vscode\extensions\ryanluker.vscode-coverage-gutters-2.3.0\out\src\coverage-system\coverageservice.js:4:58)
    at <anonymous>

To Reproduce Attached is the coverage file, and a snapshot of the repo. (It is expected to move owner soon, hence the snapshot as attachment) The coverage file is inside the zip, at build/logs/clover.xml. mattermost.zip

I have seen the related issues with the same title, but from what I can see, there are no empty classes in my project.

Desktop (please complete the following information):

The only configuration set for this extension is:

"coverage-gutters.xmlname": "build/logs/clover.xml"
ryanluker commented 5 years ago

@learn-more Thanks for submitting such a detailed bug ticket! When I get some more time to work on my OSS I will take a look at this issue.

Quick note: the coverage-gutters.xmlname configuration is only meant to be a filename not path but I believe this wouldn't effect the extension like you are seeing (having just clover.xml will still have the extension search for the coverage file within the open workspaces). Although if your build folder is not in an open workspace you may get issues like you are seeing.

learn-more commented 5 years ago

@ryanluker I am not 100% clear on what would be called a workspace, but I have opened the root folder of the repository using File->Open Folder. The file build/logs/clover.xml does show up in the Explorer window in VS Code.

ryanluker commented 5 years ago

@learn-more thanks for the extra info, if it appears in the explorer then yes it will be in "workspace".

ryanluker commented 5 years ago

@learn-more this appears to be an issue with the upstream package clover-json, I am going to open a ticket there to see if a fix can be applied but will move this out of the 2.3.1 release in the meantime. It seemed to be caused by not having package defined in the xml output as an immediate child of project https://github.com/coverage-report/clover-json/blob/master/src/index.js#L11.

ryanluker commented 5 years ago

@learn-more this is fixed in the upstream clover-json 0.3.0 release. I have pulled this version into master 1d96e001872e39652b3ca1ac570a07419ae35337 and tested that it fixes your issue with the provided example project, thanks again for that! This should get released to the marketplace in the next couple days.

learn-more commented 5 years ago

Awesome, thanks!