Closed simonw closed 3 years ago
I'm going to support multiple ?glob=
querystring arguments which will be passed to rg
.
-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/**'*.
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.
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.
Those new examples:
with.*AsyncClient
.plugin_config(
datasette/
top foldertest
but exclude results in HTML files
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