pub trait CppSource:
CodeUnitIndex
+ TypeAliasProvider
+ TypeHierarchyProvider
+ CppWorkspaceSource {
// Required methods
fn include_target_index(&self) -> &IncludeTargetIndex;
fn raw_supertypes_of(&self, code_unit: &CodeUnit) -> Vec<String>;
fn visible_type_units(&self, file: &ProjectFile) -> Arc<Vec<CodeUnit>> ⓘ;
fn visible_type_units_while(
&self,
file: &ProjectFile,
keep_going: &dyn Fn() -> bool,
) -> Option<Arc<Vec<CodeUnit>>>;
fn file_source(&self, file: &ProjectFile) -> Option<String>;
fn prepared_syntax(
&self,
file: &ProjectFile,
) -> Option<Arc<PreparedSyntaxTree>>;
fn cpp_field_linkage(&self, code_unit: &CodeUnit) -> Option<CppFieldLinkage>;
fn cached_unconditional_include_reachability(
&self,
first: &ProjectFile,
donor_source: &ProjectFile,
reference_is_c: bool,
) -> Option<bool>;
fn cache_unconditional_include_reachability(
&self,
first: &ProjectFile,
donor_source: &ProjectFile,
reference_is_c: bool,
reaches: bool,
);
fn structural_parent_of(&self, code_unit: &CodeUnit) -> Option<CodeUnit>;
fn template_metadata(
&self,
code_unit: &CodeUnit,
) -> Option<CppTemplateMetadata>;
fn compile_contexts_for(&self, file: &ProjectFile) -> &[CppCompileContext];
}Required Methods§
Sourcefn include_target_index(&self) -> &IncludeTargetIndex
fn include_target_index(&self) -> &IncludeTargetIndex
The workspace-wide #include resolution table, built once per analyzer
generation from IncludeTargetIndex::build.
Sourcefn raw_supertypes_of(&self, code_unit: &CodeUnit) -> Vec<String>
fn raw_supertypes_of(&self, code_unit: &CodeUnit) -> Vec<String>
The declared base specifiers of code_unit, as written
(TreeSitterAnalyzer::raw_supertypes_of).
Sourcefn visible_type_units(&self, file: &ProjectFile) -> Arc<Vec<CodeUnit>> ⓘ
fn visible_type_units(&self, file: &ProjectFile) -> Arc<Vec<CodeUnit>> ⓘ
Every class-like or alias declaration reachable from file through its
#include closure, memoized per file. See this module’s note.
Sourcefn visible_type_units_while(
&self,
file: &ProjectFile,
keep_going: &dyn Fn() -> bool,
) -> Option<Arc<Vec<CodeUnit>>>
fn visible_type_units_while( &self, file: &ProjectFile, keep_going: &dyn Fn() -> bool, ) -> Option<Arc<Vec<CodeUnit>>>
Self::visible_type_units under a caller’s deadline.
None means the include-closure walk stopped short. Nothing is
memoized in that case: a truncated class table is indistinguishable
from a file that simply sees fewer types, so every later base-specifier
resolution reading it would silently lose ancestors.
This is the shape issue #1748 needed. The closure walk is individually cheap – a fraction of a millisecond to about 180 ms – but the descendant-index build above it runs one per class in the workspace, which on a large tree is tens of thousands of them inside a single request that asked for thirty seconds.
Sourcefn file_source(&self, file: &ProjectFile) -> Option<String>
fn file_source(&self, file: &ProjectFile) -> Option<String>
The indexed source of file (TreeSitterAnalyzer::file_source).
Sourcefn prepared_syntax(&self, file: &ProjectFile) -> Option<Arc<PreparedSyntaxTree>>
fn prepared_syntax(&self, file: &ProjectFile) -> Option<Arc<PreparedSyntaxTree>>
The parsed tree and its source backing for file, from the analyzer’s
query read cache.
The single hottest member of this trait: the usage graph reaches it at
27 call sites. The cache is not rebuilt per call – VisibilityIndex
borrows the analyzer rather than cloning it precisely so this stays warm
across a scan (#1175), so an implementor must forward to the same
analyzer the query is running against.
Sourcefn cpp_field_linkage(&self, code_unit: &CodeUnit) -> Option<CppFieldLinkage>
fn cpp_field_linkage(&self, code_unit: &CodeUnit) -> Option<CppFieldLinkage>
The persisted linkage fact for one C++ field, when the parser recorded it. A missing fact requires the resolver’s syntax fallback.
Sourcefn cached_unconditional_include_reachability(
&self,
first: &ProjectFile,
donor_source: &ProjectFile,
reference_is_c: bool,
) -> Option<bool>
fn cached_unconditional_include_reachability( &self, first: &ProjectFile, donor_source: &ProjectFile, reference_is_c: bool, ) -> Option<bool>
The cached result of a preprocessor-visible include-reachability walk.
The reference language affects only __cplusplus guards. Callers pass
that fact as a Boolean so cache keys do not retain the full reference
path.
Sourcefn cache_unconditional_include_reachability(
&self,
first: &ProjectFile,
donor_source: &ProjectFile,
reference_is_c: bool,
reaches: bool,
)
fn cache_unconditional_include_reachability( &self, first: &ProjectFile, donor_source: &ProjectFile, reference_is_c: bool, reaches: bool, )
Store a completed preprocessor-visible include-reachability walk.
Sourcefn structural_parent_of(&self, code_unit: &CodeUnit) -> Option<CodeUnit>
fn structural_parent_of(&self, code_unit: &CodeUnit) -> Option<CodeUnit>
The declaration’s syntactic owner, which unlike
CodeUnitIndex::parent_of never falls back to a definition-row lookup.
Sourcefn template_metadata(&self, code_unit: &CodeUnit) -> Option<CppTemplateMetadata>
fn template_metadata(&self, code_unit: &CodeUnit) -> Option<CppTemplateMetadata>
The persisted C++ template metadata side table’s row for code_unit.
Sourcefn compile_contexts_for(&self, file: &ProjectFile) -> &[CppCompileContext]
fn compile_contexts_for(&self, file: &ProjectFile) -> &[CppCompileContext]
Every distinct compile_commands.json configuration governing file,
empty when the workspace has no compile database entry naming it. The
only analyzer-resident product crate::diagnostics needs.
A file the build compiles in several configurations yields several contexts, because their include closures can disagree about a name.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".