simonw / datasette-ripgrep

Web interface for searching your code using ripgrep, built as a Datasette plugin
https://ripgrep.datasette.io
Apache License 2.0
72 stars 1 forks source link

Ability to filter by file paths (ripgrep -g) #9

Closed simonw closed 3 years ago

simonw commented 3 years ago

ripgrep has robust support for this: https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md#manual-filtering-globs

Suggested here: https://news.ycombinator.com/item?id=25236933

simonw commented 3 years ago

I'm going to support multiple ?glob= querystring arguments which will be passed to rg.

simonw commented 3 years ago
    -g, --glob <GLOB>...                    
            Include or exclude files and directories for searching that match the given
            glob. This always overrides any other ignore logic. Multiple glob flags may be
            used. Globbing rules match .gitignore globs. Precede a glob with a ! to exclude
            it. If multiple globs match a file or directory, the glob given later in the
            command line takes precedence.

            When this flag is set, every file and directory is applied to it to test for
            a match. So for example, if you only want to search in a particular directory
            'foo', then *-g foo* is incorrect because 'foo/bar' does not match the glob
            'foo'. Instead, you should use *-g 'foo/**'*.
simonw commented 3 years ago

I'm a bit confused about what is meant to happen if you pass -g multiple times.

Globs are interpreted in exactly the same way as .gitignore patterns. That is, later globs will override earlier globs. For example, the following command will search only *.toml files:

$ rg clap -g '!*.toml' -g '*.toml'

I was expecting these to act as "AND" rules - so -g '*.py' -g 'datasette/**' would return all .py files in my datasette/ directory. That doesn't appear to be happening - I get back results for all .py files ignoring whether they are inside datasette/ no matter which order I pass the -g flags in.

simonw commented 3 years ago

I'm going to support ?glob=&glob= in the querystring (as an advanced power user feature) but I'm not going to expose it in the UI, since it doesn't behave the way I expected it to.

simonw commented 3 years ago

Those new examples:

simonw commented 3 years ago
ripgrep__with__AsyncClient