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 FileId
s – 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
.
FileSet
s 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§
- Partitions a list of files into disjoint subsets.
- Object safe interface for file watching and reading.
Structs§
- Wrapper around an absolute
Utf8Path
. - A
Utf8PathBuf
that is guaranteed to be absolute. - Path relative to a file.
- Path relative to a file.
- Changed file in the
Vfs
. - Handle to a file in
Vfs
- Storage for all file changes and the file id to path mapping.
- Path in
Vfs
.
Enums§
- Kind of file change.
- Kind of file change.