mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-11 20:05:25 +00:00
Some checks failed
Publish to ghcr / build (linux/amd64, blacksmith-4vcpu-ubuntu-2404) (push) Has been cancelled
Publish to ghcr / build (linux/arm64, blacksmith-8vcpu-ubuntu-2204-arm) (push) Has been cancelled
Update Roadmap Released / update (push) Has been cancelled
Publish to ghcr / merge (push) Has been cancelled
* generate protobuf types * stream poc over SSE * wip: make stream search api follow existing schema. Modify UI to support streaming * fix scrolling issue * Dockerfile * wip on lezer parser grammar for query language * add lezer tree -> grpc transformer * remove spammy log message * fix syntax highlighting by adding a module resolution for @lezer/common * further wip on query language * Add case sensitivity and regexp toggles * Improved type safety / cleanup for query lang * support search contexts * update Dockerfile with query langauge package * fix filter * Add skeletons to filter panel when search is streaming * add client side caching * improved cancelation handling * add isSearchExausted flag for flagging when a search captured all results * Add back posthog search_finished event * remove zoekt tenant enforcement * migrate blocking search over to grpc. Centralize everything in searchApi * branch handling * plumb file weburl * add repo_sets filter for repositories a user has access to * refactor a bunch of stuff + add support for passing in Query IR to search api * refactor * dev README * wip on better error handling * error handling for stream path * update mcp * changelog wip * type fix * style * Support rev:* wildcard * changelog * changelog nit * feedback * fix build * update docs and remove uneeded test file
54 lines
3.5 KiB
Text
54 lines
3.5 KiB
Text
---
|
|
title: Writing search queries
|
|
---
|
|
|
|
Sourcebot uses a powerful regex-based query language that enabled precise code search within large codebases.
|
|
|
|
## Syntax reference guide
|
|
|
|
Queries consist of space-separated search patterns that are matched against file contents. A file must have at least one match for each expression to be included. Queries can optionally contain search filters to further refine the search results.
|
|
|
|
## Keyword search (default)
|
|
|
|
Keyword search matches search patterns exactly in file contents. Wrapping search patterns in `""` combines them as a single expression.
|
|
|
|
| Example | Explanation |
|
|
| :--- | :--- |
|
|
| `foo` | Match files containing the keyword `foo` |
|
|
| `foo bar` | Match files containing both `foo` **and** `bar` |
|
|
| `"foo bar"` | Match files containing the phrase `foo bar` |
|
|
| `"foo \"bar\""` | Match files containing `foo "bar"` exactly (escaped quotes) |
|
|
|
|
## Regex search
|
|
|
|
Toggle the regex button (`.*`) in the search bar to interpret search patterns as regular expressions.
|
|
|
|
| Example | Explanation |
|
|
| :--- | :--- |
|
|
| `foo` | Match files with regex `/foo/` |
|
|
| `foo.*bar` | Match files with regex `/foo.*bar/` (foo followed by any characters, then bar) |
|
|
| `^function\s+\w+` | Match files with regex `/^function\s+\w+/` (function at start of line, followed by whitespace and word characters) |
|
|
| `"foo bar"` | Match files with regex `/foo bar/`. Quotes are not matched. |
|
|
|
|
## Search filters
|
|
|
|
Search queries (keyword or regex) can include multiple search filters to further refine the search results. Some filters can be negated using the `-` prefix.
|
|
|
|
| Prefix | Description | Example |
|
|
| :--- | :--- | :--- |
|
|
| `file:` | Filter results from filepaths that match the regex. By default all files are searched. | `file:README` - Filter results to filepaths that match regex `/README/`<br/>`file:"my file"` - Filter results to filepaths that match regex `/my file/`<br/>`-file:test\.ts$` - Ignore results from filepaths match regex `/test\.ts$/` |
|
|
| `repo:` | Filter results from repos that match the regex. By default all repos are searched. | `repo:linux` - Filter results to repos that match regex `/linux/`<br/>`-repo:^web/.*` - Ignore results from repos that match regex `/^web\/.*/` |
|
|
| `rev:` | Filter results from a specific branch or tag. By default **only** the default branch is searched. | `rev:beta` - Filter results to branches that match regex `/beta/` |
|
|
| `lang:` | Filter results by language (as defined by [linguist](https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml)). By default all languages are searched. | `lang:TypeScript` - Filter results to TypeScript files<br/>`-lang:YAML` - Ignore results from YAML files |
|
|
| `sym:` | Match symbol definitions created by [universal ctags](https://ctags.io/) at index time. | `sym:\bmain\b` - Filter results to symbols that match regex `/\bmain\b/` |
|
|
| `context:` | Filter results to a predefined [search context](/docs/features/search/search-contexts). | `context:web` - Filter results to the web context<br/>`-context:pipelines` - Ignore results from the pipelines context |
|
|
|
|
## Boolean operators & grouping
|
|
|
|
By default, space-separated expressions are and'd together. Using the `or` keyword as well as parentheses `()` can be used to create more complex boolean logic. Parentheses can be negated using the `-` prefix.
|
|
|
|
| Example | Explanation |
|
|
| :--- | :--- |
|
|
| `foo or bar` | Match files containing `foo` **or** `bar` |
|
|
| `foo (bar or baz)` | Match files containing `foo` **and** either `bar` **or** `baz`. |
|
|
| `-(foo) bar` | Match files containing `bar` **and not** `foo`. |
|