Fix CSV path construction so we actually find the CSVs.
Emit clang needles in the right format. Fix bug 1072537.

They were coming out as dicts. Now they are key/value pairs.

I may have screwed up annotations() by changing group_needles(), but I suspect it didn't work before anyway.
Get clang function search working.

* Rename NeedleFilter to be more descriptive. This may change again as we flesh out the various kinds of structural filter superclasses.
* Remove the blank lang and name attrs from the superclass; they should be absent so the abstract superclass crashes if not parametrized.
* Implement filter() and highlight_content(). Highlighting doesn't give the right answers atm because the data it's operating on are wrong.
* Rename CNeedleFilter to _CFilter so the plugin detector doesn't think it's a concrete filter.
* Change highlighting API to no longer require pre-sorting. highlight() has to sort all of them again anyway.
Make column numbers in row/col pairs zero-based.

This lets us use them directly as Python string slices.

We don't touch extents; those are already zero-based.
Make ending column numbers of extents a little less wrong.

Before, all extents were 0-length, as far as cols were concerned. They will still be wrong if an Extent spans lines, but it's an improvement.

Add an assertion to highlight(), because I now have much less trust in the correctness of Extents.
Removed trilite from the makefile and git modules.
Merge fix for Vagrant giving the VM too little RAM. Close #341.
Delete some dead SQLy modules.
fixed needle tests for function needles
Change the "no filtration" return value from {} to None.

That makes it less verbose to write self-skipping filters and is consistent with how we're doing it in direct searchers.
Add plugin API and calling machinery for direct searchers.

Add an __all__ while we're at it, to make clear what's public.
Add the first ES direct searcher: the one for path:line_num.

test_line_number now passes. Move the skips around so we can run it.

Rewrite the direct-search test method so it's more integrationy. Lift it up to dxr.testing.TestCase. The method was coupled to SQLite before and had thus quit working.
Rename eq__.

It's not descriptively named, and it's hard to visually distinguish from eq_.
Be consistent with indentation and with the order of "result" and "expected" in needle tests.
Simplify test_group_needles.

There was no reason to define the ignored first items of the tuples in such depth.
DRY by using @unsparsify_func on needles_by_line.
Rename pack() to key_object_pair(). Vet test_unsparsify(). Don't name a key/value pair "val"; that's confusing.

I just could not remember what pack() meant, even after looking at it for two days.
Pull the key_object_pair call out of span_to_lines.

It had nothing to do with span_to_lines and makes it clearer what by_line does when pulled up into it. Also, DRY.
Correct docs on Position index bases.
We don't need to `git submodule update` anymore.

There are no submodules left.