Language record
Vue
A `.vue` file is indexed as one component with a surface: its props, computed values, methods, emitted events and the components its template renders are all recorded, while the script block itself is handed to the real JavaScript/TypeScript analyzer — so a component's logic and its component graph arrive together.
The registry row this page is generated from
Read at render time from the same family row the register reads, so nothing in this block can disagree with it.
- Extensions
- .vue
- Registry names
vue- Recorded symbols
- components · props · events · methods
Relationship types this analyzer constructs
14 of 14 constructed, read from this analyzer's source and re-derived by the languages gate. Each row below is one of the engine's types, in the engine's own order.
| Relationship type | Constructed |
|---|---|
calls | published through delegated analyzers |
extends | constructed by this analyzer |
implements | published through delegated analyzers |
uses | constructed by this analyzer |
imports | published through delegated analyzers |
exports | constructed by this analyzer |
contains | constructed by this analyzer |
references | constructed by this analyzer |
overrides | constructed by this analyzer |
instantiates | published through delegated analyzers |
decorates | published through delegated analyzers |
renders | constructed by this analyzer |
mixes_in | published through delegated analyzers |
part_of | published through delegated analyzers |
14 constructed, 0 not constructed. The 7 types marked as published through delegated analyzers come from the JavaScript, TypeScript analyzers this one hosts for inline blocks; their edges are stored under Vue. The register explains what each label means.
What this analyzer does not resolve
- The template is markup, not symbols. Template elements, attributes and directives are never recorded: a component usage comes from its tag name, a provide/inject key from its argument, and an identifier read in
{{ }}or:attrfrom the expression — so a directive is read, never resolved. - The seven compiler macros are how a file declares its own surface, so they publish props and events rather than edges.
withDefaults(defineProps(xPropsDefaults), …)reads its defaults object within the file: a defaults constant imported from another module yields no defaults, because this lane does not resolve cross-file constants. - A
<style>block is skipped entirely, and it is not the CSS family's either unless a build step writes it out as a real stylesheet file. And a placeholder in a template is read as a name: two corpus files published components literally namedCOMPONENT_NAMEwith 64 edges between them, which is what a template awaiting substitution looks like to an identifier reader.
Every line above was written against Vue’s own analyzer module and is named against a construct in it, so it can be checked against the source. Nothing here is inherited from a template, or from another language’s page.
Where you meet it in a repository
Recognised by extension — .vue. Everything below is about where those files actually sit in a working repository.
- One component per file, and the file's own name is the component's name, so the class symbol, the parent's import and the tag in a template are the same string.
- Options API and
<script setup>land in the same component symbol —methods,computed,props,emits,watch,setupand the lifecycle hooks are all members of it — so a codebase mid-migration reads as one graph rather than two. - A component's real dependencies (a store, a router, an API client) are ordinary imports in its script block, handed to the JavaScript or TypeScript analyzer, so they sit in the same graph as the components it renders. Which of the two runs is decided per script block from the block's declared language rather than from the file extension.
Questions this index answers
Phrased as retrievals, because that is what an index can honestly do: it holds the symbols and the edges between them, and hands them back with the evidence attached.
- Which components does this template render?
- Which props and events does this component declare?
- Which methods does this component define, and what do they call?
- Which key does this component provide or inject?
What the analyzer sees in code like this
<script setup>
const props = defineProps({ id: String, total: Number }) // bb records: properties id, total
const emit = defineEmits(['save']) // bb records: event save
</script>
<template>
<!-- bb records: instantiates edge -> InvoiceRow, from the tag name alone -->
<InvoiceRow :total="props.total" @save="emit('save')" />
</template>Symbols are stored with the file they came from and the bytes they span, so a hit points at a line rather than at a guess. The annotations in the sample are commentary for the reader, not strings the index would store.
Languages that turn up in the same repository
Web, data & config — the count beside each name is how many relationship types that family’s analyzer constructs.
The extensions, registry names, recorded symbols and relationship types above are the parser registry row for Vue, read while the page rendered — the same row the register reads, so the two surfaces cannot tell two stories. Every relationship type listed as constructed appears in src/ast/real-*, the analyzer modules bb ships. bb 0.1.0 answers from a local store over 50 languages (53 registry ids, three of them aliases). There is no benchmark on this page: every claim here is one you can go and read in the source.