Crate ra_ap_vfs

Source
Expand description

§Virtual File System

VFS records all file changes pushed to it via set_file_contents. As such it only ever stores changes, not the actual content of a file at any given moment. All file changes 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
Dynamically compatible interface for file watching and reading.

Structs§

AbsPath
Wrapper around an absolute Utf8Path.
AbsPathBuf
A Utf8PathBuf that is guaranteed to be absolute.
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 file changes and the file id to path mapping.
VfsPath
Path in Vfs.

Enums§

Change
Kind of file change.
ChangeKind
Kind of file change.
FileExcluded
FileState