Search
Searches a filesystem using a query to find matches in file contents or
paths.
Request
{
"type": "search",
"query": {
"target": "...",
"condition": {},
"paths": [],
"options": {
"allowed_file_types": [],
"include": {},
"exclude": {},
"upward": false,
"follow_symbolic_links": false,
"limit": 1234,
"max_depth": 1234,
"pagination": 1234,
"ignore_hidden": false,
"use_ignore_files": false,
"use_parent_ignore_files": false,
"use_git_ignore_files": false,
"use_global_git_ignore_files": false,
"use_git_exclude_files": false
}
}
}
Fields
-
query: object containing the details of the search to perform.-
target: what to search for matches.-
contents: indicates to look through the contents of files.
-
path: indicates to look through file paths. For example, you can provide a search for all paths that contain
Cargo.toml.
-
-
condition: the criteria to check for a match. This is an object with atypefield to indicate what kind of match to perform. There is also avaluefield that varies per match type.-
contains: with this type,
valueis a string representing the text that must be contained within a file's contents or path depending on thetarget. -
ends_with: with this type,
valueis a string representing the text that must be at the end of a file's contents (per line) or path depending on thetarget. -
equals: with this type,
valueis a string representing the text that must exactly equal file's contents (per line) or path depending on thetarget. -
or: with this type,
valueis a nested array ofconditions. For example, two separate contains conditions can be provided where a match is valid if either is a match. -
regex: with this type,
valueis a string representing some regular expression to apply to a file's contents (per line) or path depending on thetarget. -
starts_with: with this type,
valueis a string representing the text that must be at the beginning of a file's contents (per line) or path depending on thetarget.
-
-
paths: an array of strings representing the paths to search for a match with logic based ontargetandcondition. -
options: (optional) object containing additional constraints to place on the search as it is performed. All fields within this object are optional, as is the object itself.-
allowed_file_types: (optional) restrict search to only these file types (otherwise all are allowed). Types are dir, file, and symlink. -
include: (optional) condition to use to filter paths being searched to only those that match the include condition. Applies the condition to each path being examined, regular of thetarget. This is the same format as theconditionfield. -
exclude: (optional) condition to use to filter paths being searched to only those that do not match the exclude condition. Applies the condition to each path being examined, regular of thetarget. This is the same format as theconditionfield. -
upward: (optional) if true, will search upward through parent directories rather than the traditional downward search that recurses through all children directories.Note that this will use maximum depth to apply to the reverse direction, and will only look through each ancestor directory's immediate entries. In other words, this will not result in recursing through sibling directories.
An upward search will ALWAYS search the contents of a directory, so this means providing a path to a directory will search its entries EVEN if the max_depth is 0.
-
follow_symbolic_links: (optional) if true, search should follow symbolic links when examining files & directories. -
limit: (optional) maximum results to return before stopping the search. -
max_depth: (optional) maximum depth (directories) to search.The smallest depth is 0 and always corresponds to the path given to the new function on this type. Its direct descendents have depth 1, and their descendents have depth 2, and so on.
Note that this will not simply filter the entries of the iterator, but it will actually avoid descending into directories when the depth is exceeded.
-
pagination: (optional) amount of results to batch before sending back excluding final submission that will always include the remaining results even if less than pagination request. -
ignore_hidden: (optional) if true, will skip searching hidden files. -
use_ignore_files: (optional) if true, will read.ignorefiles that are used byripgrepandThe Silver Searcherto determine which files and directories to not search. -
use_parent_ignore_files: (optional) if true, will read.ignorefiles from parent directories that are used byripgrepandThe Silver Searcherto determine which files and directories to not search. -
use_git_ignore_files: (optional) If true, will read.gitignorefiles to determine which files and directories to not search. -
use_global_git_ignore_files: (optional) if true, will read global.gitignorefiles to determine which files and directories to not search. -
use_git_exclude_files: (optional) if true, will read.git/info/excludefiles to determine which files and directories to not search.
-
-
Response
The immediate response will be a confirmation that a search started with a
numeric id associated with the search:
{
"type": "search_started",
"id": 1234
}
Search results
As results are acquired, they can be returned as a collection of matches. The
rate at which the results are returned is controlled by the pagination
option.
By default, only a singular collection of results is returned once the search
finishes, but before the search_done response is sent. Pagination enables
control of how many matches are collected before a search_results message is
sent.
{
"type": "search_results",
"id": 1234,
"matches": []
}
The id field is the same as the one provided in search_started. The
matches field contains a collection of objects, each being a singular match
for the earlier query.
Contents search results
When target is set to contents, each match will be in this format:
{
"type": "contents",
"path": "...",
"lines": [] | {},
"line_number": 1234,
"absolute_offset": 1234,
"submatches": []
}
type: will always be the string contents.path: is the path to the file, directory, or symlink that matched.lines: is the matching data for one or more lines, either as a byte array or a string. If the data is UTF-8 format, it will be a string, otherwise binary matches are possible.line_number: line number where the match starts (base index 1).absolute_offset: absolute byte offset corresponding to the start oflinesin the data being searched.-
submatches: collection of objects representing singular submatches tied tolineswhere each submatch's byte offset is relative tolinesand not the overall content.match: same aslines(byte array or string), but only for the specific submatch's contents.start: byte offset representing start of submatch (inclusive).end: byte offset representing end of submatch (exclusive).
Path search results
When target is set to path, each match will be in this format:
{
"type": "path",
"path": "...",
"submatches": []
}
type: will always be the string contents.path: is the path that matched.-
submatches: collection of objects representing singular submatches tied topathwhere each submatch's byte offset is relative topath.match: same aspath, but only for the specific submatch's contents.start: byte offset representing start of submatch (inclusive).end: byte offset representing end of submatch (exclusive).
Search done
When a search finishes, a final message will be sent with a type and id
where the id is the same as the one received from the search_started
message:
{
"type": "search_done",
"id": 1234
}