Skip to main content

Signatures

Struct Signatures 

Source
pub struct Signatures<'a> { /* private fields */ }
Expand description

A two-tier signature lookup: a per-document SignatureDb of scanned \newcommand/\newenvironment/xparse definitions consulted first, falling back to the process-wide builtin DB. Cheap to copy (it borrows the scanned DB), so it threads through the formatter’s lowering like a context handle.

Scanned-first matches TeX scoping intuition: a locally (re)defined command shadows a built-in of the same name. (We do not yet model where a definition becomes visible — a whole-file union — which is sound for the formatter’s arity needs; lexical/conditional visibility is out of scope, per AGENTS.md #1.)

Implementations§

Source§

impl<'a> Signatures<'a>

Source

pub fn new(user: &'a SignatureDb) -> Self

Resolve against user first, then the built-in DB.

Source

pub fn command(&self, name: &str) -> Option<&'a CommandSig>

The signature of command name: scanned definition first, then the curated built-in, then the bulk CWL tier. CWL is consulted last and contributes only argument arity (its behavior flags are all default), so a CWL-only command is laid out like any unknown command, just with its argument count known.

Source

pub fn environment(&self, name: &str) -> Option<&'a EnvironmentSig>

The signature of environment name: scanned, then built-in, then CWL. See command for why the CWL tier is safe to consult here.

Environment aliases are deliberately not consulted: an alias names a command, and a name alone cannot tell a \bea-opened delimiter from a literal \begin{bea} that happens to spell the same word. Resolve those through environment_at, which has the node.

Source

pub fn environment_at(&self, node: &SyntaxNode) -> Option<&'a EnvironmentSig>

The signature governing node — an ENVIRONMENT or its BEGIN — which is environment except that an environment-alias delimiter resolves through the alias map instead.

This is the node-keyed lookup every layout decision wants, because an alias BEGIN (a bare control word, Begin::is_alias) and a literal \begin{X} are indistinguishable once reduced to a name. Only the former inherits the target’s behavior; a literal \begin{bea} in a file that also defines \bea as an alias is an unrelated environment of that name and stays unknown.

The alias arm resolves against curated data only, for the same reason the parser’s ParseCtx::is_math_environment does: an alias declares a spelling, never a semantic, so every behavior flag still comes from curated data. That means builtin plus the scope’s declared entries — a declaration is curated (like copies a built-in entry and resolves against nothing else), which is what lets \startmyenv … \endmyenv reach the behavior of a myenv that has no built-in counterpart. A scanned \newenvironment of the same name still lends an alias nothing.

Trait Implementations§

Source§

impl<'a> Clone for Signatures<'a>

Source§

fn clone(&self) -> Signatures<'a>

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<'a> Copy for Signatures<'a>

Source§

impl<'a> Debug for Signatures<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Signatures<'a>

§

impl<'a> RefUnwindSafe for Signatures<'a>

§

impl<'a> Send for Signatures<'a>

§

impl<'a> Sync for Signatures<'a>

§

impl<'a> Unpin for Signatures<'a>

§

impl<'a> UnsafeUnpin for Signatures<'a>

§

impl<'a> UnwindSafe for Signatures<'a>

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> 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> 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 = 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.