| Coverage.py TODO |
| |
| Key: |
| * Heading |
| - Not done yet. |
| + Done. |
| x Not going to do. |
| |
| * 4.0 |
| |
| - What defaults should change? |
| x --source = . ? |
| x --branch = True ? |
| |
| - Remove 2.3, 2.4, 2.5 limitations |
| + set, sorted, reversed, rpartition |
| + generator expressions |
| + decorators |
| + collections.defaultdict |
| + .startswith((,)) |
| + "with" statements |
| - .format() ? |
| + try/except/finally |
| + with assertRaises |
| + addCleanup instead of tearDown |
| + exec statement can look like a function in py2 (since when?) |
| - runpy ? |
| + we can use "except ExcClass as e:" |
| |
| - Plugins |
| + Clean up |
| + implement plugin support in CTracer |
| + remove plugin support from PyTracer |
| x add services: |
| - filelocator |
| - warning |
| - dynamic_source_filename: return should be a canonical path |
| - update the omit test to use "quux*" instead of "*quux*" |
| + docs |
| + Make reports use filenames, not module names |
| - documentation |
| - test helpers |
| + cov.config["run:branch"] api (well, coverage.get_option etc) |
| + "added in 4.0" |
| - tweaks to theme? |
| - Plugins! |
| Once per process |
| Once per file |
| - create a file tracer |
| - call its has_dynamic_source_file() |
| Once per call |
| Once per line |
| - build process |
| - don't publish to nedbat.com any more (but still need the sample html reports) |
| + don't need .px tooling |
| - write a new nedbat.com/code/coverage page. |
| - all doc links should point to rtfd |
| + Remove code only run on <2.6 |
| + Change data file to json |
| + Create data api |
| + gevent, etc. |
| + Remove the old command-line syntax |
| + A pain, b/c of the structure of the tests. |
| + BTW: make an easier way to write those tests. |
| |
| - tests |
| - test the kit has the right contents |
| - test the kit installs the right stuff |
| |
| |
| * --source stuff: |
| + warn if a package is never found. |
| + warn if no data was collected |
| - tie --source into reporting |
| |
| * Soon |
| |
| + Better omit handling that ignores files during measurement. |
| - Deal with ~ in specified paths correctly. |
| + while TRUE claims to be partial. |
| + A way to mark lines as partial branches, with a regex? |
| + Default to "while True:", "while 1:" |
| + HTML keyboard short cuts |
| |
| |
| * 3.2 |
| |
| + Some kind of indication in the HTML where yellow lines aren't going. |
| - Profile the reporting code: it's REALLY slow. |
| - parser is doing some redundant work. |
| + Analysis class should do rolling up of stats also (actually Numbers) |
| + Update docs for --branch. |
| x self.coverage.data.has_arcs is ugly. |
| + Branches that never jump to nocover lines shouldn't be marked as partial. |
| (see top of test_cogapp for examples) |
| + Maybe turning off yellow lines should make those lines green? |
| + A missing branch to leave the function shows an annotation of -1. Now "exit". |
| + XML report needs to get branch information. |
| + Add branch info to "coverage debug data" |
| + Polish up the help, and double-check the docs. |
| |
| |
| * Speed |
| |
| + C extension collector |
| - bitvector in trace extension. |
| - Ignore certain modules |
| + Record linenos rather than (file,lineno) pairs in tracer. |
| x Tricky swapping of collector like figleaf, pycov, et al. (Don't need to do |
| this with C collector). |
| - Seems like there should be a faster way to manage all the line number sets in |
| CodeParser.raw_parse. |
| - If tracing, canonical_filename_cache overlaps with should_trace_cache. Skip |
| canonical_filename_cache. Maybe it isn't even worth it... |
| - Would pre-allocating line number integers make the C tracer faster? It would |
| use less memory. |
| |
| |
| * Accuracy |
| |
| - Record magic number of module to ensure code hasn't changed |
| - Record version of coverage data file, so we can update what's stored there. |
| - Record options in coverage data file, so multiple runs are certain to make |
| sense together. |
| - Do I still need the lines in annotate_file that deal specially with "else"? |
| |
| |
| * Power |
| |
| + Branch coverage |
| Titus' idea: |
| 1: if a: |
| 2: b = 2 |
| 3: c = 3 |
| if the coverage data shows 1,2,3, it was if-then. if it's 1,3, then the |
| missing else was executed. |
| + API for getting coverage data. |
| - Instruction tracing instead of line tracing. |
| - Path tracing (how does this even work?) |
| - Count execution of lines |
| - Track callers of functions (ala std module trace) |
| - Method/Class/Module coverage reporting. |
| - .coverage files that can be kept separate, rather than accumulated. |
| - test/coverage map: http://rbtcollins.wordpress.com/2009/09/16/back-from-hiatus/ |
| - Similar to figleaf's sections. |
| |
| |
| * Convenience |
| |
| - Command line modules should also be directories, meaning all the modules in that |
| directory. |
| - Why can't a morf also be a string, the name of a module? |
| - ignore by module as well as file? |
| + Use a .coveragerc file to control coverage.py without the programmatic API. |
| - Add a --data switch to explicitly control the data file on the command line. |
| x Why can't you specify execute (-x) and report (-r) in the same invocation? |
| Maybe just because -x needs the rest of the command line? |
| + Support 2.3 - 3.1! |
| http://pythonology.blogspot.com/2009/02/making-code-run-on-python-20-through-30.html |
| http://www.rfk.id.au/blog/entry/preparing-pyenchant-for-python-3 |
| http://pydev.blogspot.com/2008/11/making-code-work-in-python-2-and-3.html |
| + Explicitly set pickle protocol to 2. |
| - An inference mode that marks lines as executed if they "must have been" executed: |
| class definitions, etc, when coverage is started after the class is defined. |
| - Different categories of exclude pragma? So you can enable and disable them |
| from the command line, to reconsider exclusions. |
| + Reporting on files never touched by coverage.py (package completeness) |
| - A setup.py command? http://jeetworks.org/node/50 |
| - Deltas: indicate the change in coverage percentage from the last run. |
| + Show lines missing rather than lines run in the reporting, since that's what |
| you need to focus on. |
| |
| |
| * Beauty |
| |
| + HTML report |
| - Colored bars indicating coverage per file. |
| - Package navigation. |
| - Rolled-up statistics. |
| - Some way to focus in on red and yellow |
| - Show only lines near highlights? |
| + Jump to next highlight? |
| + Keyboard navigation: j and k. |
| - Cookie for changes to pyfile.html state. |
| + Clickable column headers on the index page. |
| + Syntax coloring in HTML report. |
| + Dynamic effects in HTML report. |
| + Footer in reports pointing to coverage.py home page. |
| + Baseline grid for linenumber font. |
| + Separate out css and HTML. |
| + Does it work right with utf-8 source files? http://www.python.org/dev/peps/pep-0263/ |
| - Use vim modeline to determine tab width: http://vimdoc.sourceforge.net/htmldoc/options.html#modeline |
| |
| |
| * Community |
| |
| + New docs, rather than pointing to Gareth's |
| + Min python version is 2.3. |
| - Three phases of work: |
| - Collection |
| - Analysis |
| - Reporting |
| - Distinction between: |
| - ignore (files not to collect) |
| - exclude (lines not to report as missed) |
| - omit (files not to report) |
| - Changes from coverage.py 2.x: |
| - Bare "except:" lines now count as executable code. |
| - Double function decorators: all decorator lines count as executable code. |
| x Document the .coverage file format. |
| + HTML reporting. |
| - Much more detail about what's in the report. |
| - References between pages are off: |
| - They have <em> tags around them. |
| - They use #anchors that don't survive the px->html conversion. |
| + Be sure --help text is complete (-i is missing). |
| + Host the project somewhere with a real bug tracker: bitbucket.org |
| + Point discussion to TIP |
| - PEP 8 compliance? |
| |
| |
| * Programmability |
| |
| + Don't use sys.exit in CoverageScript. |
| + Remove singleton |
| + Initialization of instance variables in the class. |
| |
| |
| * Installation |
| |
| x How will coverage.py package install over coverage.py module? |
| x pip can't install it: it reads the coverage.py html page, and finds the kit link, |
| but then can't handle the root-relative link. |
| |
| |
| * Modernization |
| |
| + Decide on minimum supported version |
| + 2.3 |
| + Get rid of the basestring protection |
| + Use enumerate |
| + Use sets instead of dicts |
| + Switch from getopt to optparse. |
| + Get rid of the recursive nonsense. |
| + Docstrings. |
| + Remove huge document-style comments. |
| - Better names: |
| + self.cache -> self.cache_filename -> CoverageData.filename |
| + self.usecache -> CoverageData.use_file |
| - More classes: |
| - Module munging |
| + Coverage data files |
| + Why are some imports at the top of the file, and some in functions? |
| + Get rid of sys.exitfunc use. |
| + True and False (with no backward adaptation: the constants are new in 2.2.1) |
| + Get rid of compiler module |
| + In analyzing code |
| + In test_coverage.py |
| + Style: |
| + lineno |
| + filename |
| |
| |
| * Correctness |
| |
| - What does -p (parallel mode) mean with -e (erase data)? |
| |
| |
| * Tests |
| |
| + Switch to a real test runner, like nose. |
| + Test both the C trace function and the Python trace function. |
| + parser.py has no direct tests. |
| + Tests about the .coverage file. |
| + Tests about the --long-form of arguments. |
| + Tests about overriding the .coverage filename. |
| - Tests about parallel mode. |
| + Tests about assigning a multi-line string. |
| - Tests about tricky docstrings. |
| + Coverage test coverage.py! |
| - Tests that tracing stops after calling stop() |
| - More intensive thread testing. |
| x Tests about the "import __main__" in cmdline.py |
| + What happens if the -x script raises an exception? |
| - Test that the kit has all the proper contents. |