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: ToolchainConfigWhich 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
impl HtlConfig
Sourcepub fn find(start: &Path) -> Result<Option<(PathBuf, Self)>>
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.
Sourcepub fn lint_spec(&self) -> String
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.
Sourcepub fn search_paths(&self, root: &Path) -> Vec<PathBuf>
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<'de> Deserialize<'de> for HtlConfig
impl<'de> Deserialize<'de> for HtlConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for HtlConfig
impl RefUnwindSafe for HtlConfig
impl Send for HtlConfig
impl Sync for HtlConfig
impl Unpin for HtlConfig
impl UnsafeUnpin for HtlConfig
impl UnwindSafe for HtlConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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