> ## Documentation Index
> Fetch the complete documentation index at: https://site.aspect.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Query

`function` **Query.eval**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Query</span></span>.<span class="entity name function python"><span class="meta generic-name python">eval</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python">
          \*<span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">flags</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/list">list</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><a href="/axl/types/str">str</a> <span class="keyword operator arithmetic python">|</span> <span class="meta group python"><span class="punctuation section group begin python">(</span><a href="/axl/types/str">str</a><span class="punctuation separator tuple python">,</span> <a href="/axl/types/str">str</a><span class="punctuation section group end python">)</span></span></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="meta structure list python"><span class="punctuation section list begin python">\[</span><span class="punctuation section list end python">]</span></span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">announce\_version</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          <span class="variable parameter python">announce\_command</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/bool">bool</a> </span><span class="meta function parameters default-value python"><span class="keyword operator assignment python">=</span> <span class="constant language python">False</span>
          </span><span class="meta function parameters python"><span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/typing">typing</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/typing">Iterable</a><span class="meta item-access python"><span class="punctuation section brackets begin python">\[</span></span><span class="meta item-access arguments python"><span class="meta qualified-name python"><span class="meta generic-name python">generated\_file</span></span> <span class="keyword operator arithmetic python">|</span> <span class="meta qualified-name python"><span class="meta generic-name python">package\_group</span></span> <span class="keyword operator arithmetic python">|</span> <span class="meta qualified-name python"><span class="meta generic-name python">rule</span></span> <span class="keyword operator arithmetic python">|</span> <span class="meta qualified-name python"><span class="meta generic-name python">source\_file</span></span></span><span class="meta item-access python"><span class="punctuation section brackets end python">]</span></span></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

The query system provides a programmatic interface for analyzing build dependencies and target relationships. Queries are constructed using a chain API and are lazily evaluated only when `.eval()` is explicitly called.

The entry point is `ctx.bazel.query()`, which returns a `query` for creating initial
query expressions. Most operations operate on `query` objects, which represent
sets of targets that can be filtered, transformed, and combined.

**Example**

```starlark theme={null}
**Query** dependencies of a target
deps = ctx.bazel.query().targets("//myapp:main").deps()
all_deps: target_set = deps.eval()

**Chain** multiple operations
sources = ctx.bazel.query().targets("//myapp:main")
    .deps()
    .kind("source file")
    .eval()
```

Fails with Bazel's own stderr if the query exits non-zero (bad
expression, BUILD evaluation error, …), rather than returning an
empty target set — a failed query is not the same as one that
matched nothing.

**Parameters**

* `flags`: - Command flags to pass to `bazel query` (between the expression and `--output`). Callers that run `query` alongside `build` / `test` under `--ignore_all_rc_files` MUST forward the rc-expanded command flags here, so the query resolves external repositories the same way the build does (e.g. an rc-set `--noenable_bzlmod` / `--enable_workspace`). Omitting them lets the query diverge from the build and fail on repos the build can see. Accepts the same `str | (str, version-constraint)` shape as `ctx.bazel.build` / `.test`; version-gated flags are filtered against the running Bazel version identically.
* `announce_version`: - Print an `INFO: Bazel <version>` line before spawning. Resolved from the `--announce-bazel-version` task flag.
* `announce_command`: - Print an `INFO: Spawning: <command>` line before spawning. Resolved from the `--announce-bazel-command` task flag. Both mirror the `ctx.bazel.build` / `.test` disclosure.

`function` **Query.raw**

<div class="code-block mt-5 mb-8 not-prose rounded-2xl relative group text-gray-950 dark:text-gray-50 codeblock-light border border-gray-950/10 dark:border-white/10 dark:twoslash-dark bg-transparent dark:bg-transparent" numberoflines="10" language="python">
  <div class="w-0 min-w-full max-w-full py-3.5 px-4 h-full dark:bg-codeblock relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out [&_*]:ring-0 [&_*]:outline-none [&_*]:focus:ring-0 [&_*]:focus:outline-none [&_pre>code]:pr-[3rem] [&_pre>code>span.line-highlight]:min-w-[calc(100%+3rem)] [&_pre>code>span.line-diff]:min-w-[calc(100%+3rem)] rounded-2xl bg-white overflow-x-auto scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-black/15 hover:scrollbar-thumb-black/20 active:scrollbar-thumb-black/20 dark:scrollbar-thumb-white/20 dark:hover:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25" data-component-part="code-block-root" tabindex="0">
    <div class="font-mono whitespace-pre leading-6">
      <pre class="shiki shiki-themes github-light-default dark-plus" language="python">
        <code language="python">
          <span class="source python"><span class="meta function python"><span class="storage type function python">def</span> <span class="entity name function python"><span class="meta generic-name python">Query</span></span>.<span class="entity name function python"><span class="meta generic-name python">raw</span></span></span><span class="meta function parameters python"><span class="punctuation section parameters begin python">(</span></span><span class="meta function parameters python">
          <span class="variable parameter python">expr</span></span><span class="meta function parameters annotation python"><span class="punctuation separator annotation parameter python">:</span> <a href="/axl/types/str">str</a></span><span class="meta function parameters python"><span class="punctuation separator parameters python">,</span>
          /
          <span class="punctuation section parameters end python">)</span></span><span class="meta function python"> </span><span class="meta function annotation return python"><span class="punctuation separator annotation return python">-></span> <a href="/axl/types/bazel">bazel</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/query">query</a><span class="punctuation accessor dot python">.</span><a href="/axl/types/bazel/query/query">Query</a></span></span>
        </code>
      </pre>
    </div>
  </div>
</div>

Replaces the query `expression` with a raw query expression string.

This escape hatch allows direct use of the underlying query language for complex cases,
while still supporting further chaining.

```starlark theme={null}
**Complex** intersection query
complex = ctx.bazel.query().raw("deps(//foo) intersect kind('test', //bar:*)")

**Path**-based query
path_query = ctx.bazel.query().raw("somepath(//start, //end)")

**Chaining** after raw
filtered = complex.kind("source file")
```
