Crate ra_ap_vfs[][src]

Expand description

Virtual File System

VFS stores all files read by rust-analyzer. Reading file contents from VFS always returns the same contents, unless VFS was explicitly modified with set_file_contents. All changes to VFS are logged, and can be retrieved via take_changes method. The pack of changes is then pushed to salsa and triggers incremental recomputation.

Files in VFS are identified with FileIds – interned paths. The notion of the path, VfsPath is somewhat abstract: at the moment, it is represented as an std::path::PathBuf internally, but this is an implementation detail.

VFS doesn’t do IO or file watching itself. For that, see the loader module. loader::Handle is an object-safe trait which abstracts both file loading and file watching. Handle is dynamically configured with a set of directory entries which should be scanned and watched. Handle then asynchronously pushes file changes. Directory entries are configured in free-form via list of globs, it’s up to the Handle to interpret the globs in any specific way.

VFS stores a flat list of files. file_set::FileSet can partition this list of files into disjoint sets of files. Traversal-like operations (including getting the neighbor file by the relative path) are handled by the FileSet. FileSets are also pushed to salsa and cause it to re-check mod foo; declarations when files are created or deleted.

FileSet and loader::Entry play similar, but different roles. Both specify the “set of paths/files”, one is geared towards file watching, the other towards salsa changes. In particular, single FileSet may correspond to several loader::Entry. For example, a crate from crates.io which uses code generation would have two Entries – for sources in ~/.cargo, and for generated code in ./target/debug/build. It will have a single FileSet which unions the two sources.

Modules

file_set

Partitions a list of files into disjoint subsets.

loader

Object safe interface for file watching and reading.

Structs

AbsPath

Wrapper around an absolute Path.

AbsPathBuf

Wrapper around an absolute PathBuf.

AnchoredPath

Path relative to a file.

AnchoredPathBuf

Path relative to a file.

ChangedFile

Changed file in the Vfs.

FileId

Handle to a file in Vfs

Vfs

Storage for all files read by rust-analyzer.

VfsPath

Path in Vfs.

Enums

ChangeKind

Kind of file change.