Skip to main content

HtlConfig

Struct HtlConfig 

Source
pub struct HtlConfig {
    pub toolchain: ToolchainConfig,
    pub lint: LintConfig,
    pub fmt: FmtConfig,
    pub check: CheckConfig,
    pub build: BuildConfig,
    pub fix: FixConfig,
    pub cache: CacheConfig,
    pub contract: Vec<Contract>,
}
Expand description

A project’s htl.toml, parsed.

Every section defaults, so a project may write only the one it has an opinion about and a project with no file at all is this struct’s Default. deny_unknown_fields throughout: a key nobody reads is a key the writer believed in, and reporting it is the only way they find out it did nothing.

Fields§

§toolchain: ToolchainConfig

Which htl command the project expects. Checked once where the config is loaded, before the command reads anything else.

§lint: LintConfig

[lint] — which rules this project has an opinion about, and whether what they report stops a run.

§fmt: FmtConfig

[fmt] — what htl fmt writes where the formatter has a choice.

§check: CheckConfig

[check] — where require may resolve from besides the project’s own tree.

§build: BuildConfig

[build] — what htl build cannot learn from the sources alone.

§fix: FixConfig

[fix] — per-rule control over what htl fix applies.

§cache: CacheConfig

[cache] — how htl check reuses what it already worked out.

§contract: Vec<Contract>

Static counterpart of TealResolver::expect_type / require_fields: files directly under dir must return type; checked by the contract lint.

Implementations§

Source§

impl HtlConfig

Source

pub fn parse(text: &str) -> Result<Self>

Parse htl.toml text.

Source

pub fn find(start: &Path) -> Result<Option<(PathBuf, Self)>>

Nearest htl.toml at or above start (a file or directory). Ok(None) when there is none; Err when one exists but does not parse.

A htl.toml inside a directory an enclosing project declares as a dependency’s — a patch_dir, a target_dir — is passed over, and the walk goes on to the project’s own. htl pkg patch copies a dependency’s package root whole, config file included, and the copy is code the project owns rather than a project of its own: one root, one store, one lint selection over the whole tree, the patched directories with it. The question is pkg::owning_project’s, asked here and by Project::find so that the manifest and the config cannot disagree about where the root is.

Source

pub fn lint_spec(&self) -> String

The [lint.rules] table as a rule=level spec for Htl::configure_lints. Append a command-line / env spec after it so later entries win.

The spec is also part of a cache key, so the rendering is ordered (the table is a BTreeMap): two runs that say the same thing have to produce the same string.

Source

pub fn search_paths(&self, root: &Path) -> Vec<PathBuf>

Directories the checker should search, in the order it consults them: root, root/src, root/types (hand-written .d.tl for modules the host provides, the DefinitelyTyped shape), then [check] paths (resolved against root, ~ expanded). Only existing dirs. The project’s own code comes before declarations it keeps for other people’s, and both come before anything supplied from outside.

Put them on the path with Htl::add_search_paths, which preserves this order; add_path alone prepends, so adding the list front to back reverses it.

A .tl source anywhere on the path beats a .d.tl, so a declaration under types/ never shadows an implementation, and the order only decides between two declarations of one module — which duplicate-declaration reports.

Trait Implementations§

Source§

impl Clone for HtlConfig

Source§

fn clone(&self) -> HtlConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HtlConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for HtlConfig

Source§

fn default() -> HtlConfig

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for HtlConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> MaybeSend for T

Source§

impl<T> MaybeSync for T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.