123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- 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.
|