istanbuljs / nyc

the Istanbul command line interface
https://istanbul.js.org/
ISC License
5.57k stars 357 forks source link

Add a new `profile` option. #144

Open jamestalmage opened 8 years ago

jamestalmage commented 8 years ago

Since stumbling into this process while trying to improve NYC's performance, I have continued to discover ways that coverage data can answer questions beyond "is it tested?".

I think it would be really interesting to add a new profile command.

The signature would be:

nyc profile <profiled-dependency> <command ...>

It would not add coverage for the local library, but the dependency.

Assume some module uses AVA as it's test runner:

$ nyc profile ava ./node_modules/.bin/ava test/*.js

This executes ava ./node_modules/.bin/ava test/*.js using NYC's spawn-wrap goodness, but instead of excluding node_modules, our require hook hooks everything in node_modules/ava/ (but not node_modules/ava/node_modules).

This basically turns nyc into a quick and dirty profiling tool, allowing you to identify hot loops in your code and identify lines that are only used by your test suite.

bcoe commented 8 years ago

@jamestalmage I like this idea a lot, I'll need to see it in practice -- but sounds really slick.