Sourcegraph search query language
This page provides a visual breakdown of our Search Query Language and a handful of examples to get you started. It is complementary to our syntax reference and illustrates syntax using railroad diagrams instead of tables.
How to read railroad diagrams. Follow the lines in these railroad diagrams to see how pieces of syntax combine. When a line splits it means there are multiple options available. When it is possible to repeat a previous syntax, the split line will loop back on itself like this:
At a basic level, a query consists of search patterns and parameters. Typical queries contain one or more space-separated search patterns that describe what to search, and parameters refine searches by filtering results or changing search behavior.
repo:github.com/sourcegraph/sourcegraph file:schema.graphql The result ↗
Build query expressions by combining basic queries and operators like
Group expressions with parentheses to build more complex expressions. If there are no balanced parentheses,
AND operators bind tighter, so
foo or bar and baz means
foo or (bar and baz). You may also use lowercase
repo:github.com/sourcegraph/sourcegraph rtr AND newRouter ↗
A pattern to search. By default the pattern is searched literally. The kind of search may be toggled to change how a pattern matches:
- Perform a regular expression search. We support RE2 syntax. Quoting patterns performs a literal search.
- Perform a structural search. See our dedicated documentation to learn more about structural sexarch.
Search parameters allow you to filter search results or modify search behavior.
Search repositories that match the regular expression. A
excludes the repository. By default the repository will be searched at the
HEAD commit of the default branch. You can optionally change the
Search a repository at a given revision. For example, a branch name, commit hash, or git tag.
You can search multiple revisions by separating the revisions with
HEAD for the default branch.
Search files whose full path matches the regular expression. A
excludes the file from being searched.
Only search files in the specified programming language, like
lang:typescript encoding ↗
Set the search pattern to search using a dedicated parameter. Useful, for
example, when searching literally for a string like
repo:my-repo that may
conflict with the syntax of parameters in this Sourcegraph language.
repo:sourcegraph content:"repo:sourcegraph" ↗
Selects the specified result type from the set of search results. If a query produces results that aren’t of the selected type, the results will be converted to the selected type.
For example, the query
file:package.json lodash will return content matches for
select:repo is added, the repository those matches belong to is pulled out and it now only returns
repositories that contain
package.json files that contain the term
lodash. All selected results are deduplicated,
so if there are multiple content matches in a repository,
select:repo will still only return unique results.
A query like
type:commit example select:symbol will return no results because commits have no associated symbol
and cannot be converted to that type.
Select a specific kind of symbol. For example
type:symbol select:symbol.function zoektSearch will only return functions that contain the
type:symbol zoektSearch select:symbol.function ↗
When searching commit diffs, select only diffs where the pattern matches on
removed) lines. For example, search for recent commits
TODOs in your code.
- Note: if any line exists that satisfies the condition, the entire diff is included in the result set.
type:diff must be specified in the query.
repo:^github\.com/sourcegraph/sourcegraph$ type:diff TODO select:commit.diff.removed ↗
Set whether the search pattern should perform a search of a certain type. Notable search types are symbol, commit, and diff searches.
Set whether the search pattern should be treated case-sensitively. This is synonymous with the toggle button.
OPEN_FILE case:yes ↗
yes if repository forks should be included or
only if only forks
should be searched. Repository forks are excluded by default.
fork:yes repo:sourcegraph ↗
yes if archived repositories should be included or
only if only
archives should be searched. Archived repositories are excluded by default.
archived:only repo:sourcegraph ↗
Only include results from the named group of repositories (defined by the server admin). Same as using repo that matches all of the group’s repositories. Use repo unless you know that the group exists.
repogroup:go-gh-100 helm ↗ – searches the top 100 Go repositories on GitHub, ranked by stars.
Repo has file
Deprecated. Prefer Repo contains file. Only include results from repositories that contain a matching file. This keyword is a pure filter, so it requires at least one other search term in the query. Note: this filter currently only works on text matches and file path matches.
repohasfile:\.py file:Dockerfile$ pip ↗
Repo has commit after
Deprecated. Prefer Repo contains commit after. Filter out stale repositories that don’t contain commits past the specified time frame. This parameter is experimental.
repo:github\.com/sourcegraph repohascommitafter:"1 week ago" ↗
Retrieve N results. By default, Sourcegraph stops searching early and returns if it finds a full page of results. This is desirable for most interactive searches. To wait for all results, use count:all.
Set a search timeout. The time value is a string like 10s or 100ms, which is parsed by the Go time package’s ParseDuration. By default the timeout is set to 10 seconds, and the search will optimize for returning results as soon as possible. The timeout value cannot be set longer than 1 minute.
timeout:15s count:10000 func ↗ – sets a longer timeout for a search that contains a lot of results.
Filter results to only public or private repositories. The default is to include both private and public repositories.
type:repo visibility:public ↗
Set whether the pattern should run a literal search, regular expression search, or a structural search pattern. This parameter is available as a command-line and accessibility option, and synonymous with the visual search pattern toggles. in search pattern.
Repo contains file
Search only inside repositories that contain a file path matching the regular expression.
Repo contains content
Search only inside repositories that contain file content matching the regular expression.
Repo contains file and content
Search only inside repositories that contain a file matching the
repo:contains(file:CHANGELOG content:fix) ↗
Repo contains commit after
Search only inside repositories that contain a a commit after some specified time. See git date formats for accepted formats. Use this to filter out stale repositories that don’t contain commits past the specified time frame. This parameter is experimental.
repo:contains.commit.after(1 month ago) ↗
A string that is interpreted as a RE2 regular expression.
An unquoted string is any contiguous sequence of characters not containing whitespace.
Any string, including whitespace, may be quoted with single
' or double
quotes. Quotes can be escaped with
\ characters will need to be escaped, e.g.,
Set parameters that apply only to commit and diff searches.
Include commits or diffs that are authored by the user.
Include results which have a commit date before the specified time frame.
Include results which have a commit date before the specified time frame.
Include results which have commit messages containing the string.
type:commit message:"testing" ↗