#[non_exhaustive]
pub enum Source {
    Unknown,
    Stdin,
    Alias {
        original: Location,
        alias: Rc<Alias>,
    },
    CommandSubst {
        original: Location,
    },
    Trap {
        condition: String,
        origin: Location,
    },
}
Expand description

Origin of source code.

Variants (Non-exhaustive)

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.

Unknown

Source code of unknown origin.

Normally you should not use this value, but it may be useful for quick debugging.

Stdin

Standard input.

Alias

Fields

original: Location

Position of the original word that was replaced

alias: Rc<Alias>

Definition of the alias that was substituted

Alias substitution.

This applies to a code fragment that replaced another as a result of alias substitution.

CommandSubst

Fields

original: Location

Command substitution.

Trap

Fields

condition: String

Trap condition name, typically the signal name.

origin: Location

Location of the simple command that has set this trap command.

Trap command.

Implementations

Appends complementary annotations describing this source.

Tests if this source is alias substitution for the given name.

Returns true if self is Source::Alias with the name or such an original, recursively.

// `is_alias_for` returns false for sources other than an Alias
assert_eq!(Source::Unknown.is_alias_for("foo"), false);
// `is_alias_for` returns true if the names match
let original = Location::dummy("");
let alias = std::rc::Rc::new(yash_syntax::alias::Alias{
    name: "foo".to_string(),
    replacement: "".to_string(),
    global: false,
    origin: original.clone()
});
let source = Source::Alias{original, alias};
assert_eq!(source.is_alias_for("foo"), true);
assert_eq!(source.is_alias_for("bar"), false);
// `is_alias_for` checks aliases recursively.
let mut original = Location::dummy("");
let alias = Rc::new(yash_syntax::alias::Alias{
    name: "foo".to_string(),
    replacement: "".to_string(),
    global: false,
    origin: original.clone()
});
let source = Source::Alias{original: original.clone(), alias};
let alias = Rc::new(yash_syntax::alias::Alias{
    name: "bar".to_string(),
    replacement: "".to_string(),
    global: false,
    origin: original.clone()
});
Rc::make_mut(&mut original.code).source = source;
let source = Source::Alias{original, alias};
assert_eq!(source.is_alias_for("foo"), true);
assert_eq!(source.is_alias_for("bar"), true);
assert_eq!(source.is_alias_for("baz"), false);

Returns a label that describes the source.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.

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

🔬 This is a nightly-only experimental API. (toowned_clone_into)

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

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.