Skip to main content

FsLoader

Struct FsLoader 

Source
pub struct FsLoader { /* private fields */ }
Expand description

Loader that reads files from the filesystem with std::fs::read_to_string.

This is the production loader used by the CLI; the LSP wraps it with a file-watch invalidation layer in PR 8. lex-core’s resolver code does not reference std::fsFsLoader is the one place where it does, isolated behind the Loader trait so the rest of the crate stays sandbox- and WASM-friendly.

FsLoader is constructed with the resolution root and rechecks every load against it post-fs::canonicalize, so a symlink pointing outside the root is rejected even though the lexical-only check in [resolve_path] cannot see it. Also rejects non-regular files (devices, FIFOs, directories) before reading, so the loader can’t be tricked into blocking on /dev/zero or allocating against an open device.

Errors map:

Implementations§

Source§

impl FsLoader

Source

pub const DEFAULT_MAX_FILE_SIZE: u64

Default per-file size cap: 10 MiB. Generous for realistic Lex source documents (text only) and tight enough to bound memory allocation per include against an adversarial 1 GB file.

Source

pub fn new(root: PathBuf) -> Self

Construct a loader rooted at root with default size limits. The loader stores root’s fs-canonical form (with symlinks resolved); subsequent loads validate that the requested path’s canonical form lives under it.

Source

pub fn with_max_file_size(self, max_file_size: u64) -> Self

Override the default per-file size cap (bytes). Use to widen the limit for projects with genuinely large source files, or tighten it for stricter sandboxes (e.g., LSPs serving untrusted content).

Trait Implementations§

Source§

impl Loader for FsLoader

Source§

fn load(&self, path: &Path) -> Result<LoadedFile, LoadError>

Load the source text for path and return both the contents and a canonical identity for the loaded resource. The path is what the resolver decided on after applying the rules in §4 of the proposal. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more