Skip to main content

SemanticModel

Struct SemanticModel 

Source
pub struct SemanticModel {
    pub hir: Program,
    pub enums: Vec<EnumDecl>,
    pub symbols: Vec<Symbol>,
}
Expand description

The resolved program model: the Opy HIR semantic program plus the queryable symbol index and custom-enum declarations.

Custom enums are not retained in the Opy HIR (they fold to numeric constants at use sites, reference behavior), so they are carried here from the CST to keep declarations queryable.

Fields§

§hir: Program§enums: Vec<EnumDecl>§symbols: Vec<Symbol>

Implementations§

Source§

impl SemanticModel

Source

pub fn build(hir: Program, cst: &Program) -> SemanticModel

Build the queryable model from a resolved HIR program and its parsed CST (required for custom-enum declarations).

Source

pub fn declarations(&self) -> &[Declaration]

The HIR declarations (globals, players, subroutines, constants, macros). Custom enums are queried through SemanticModel::enums.

Source

pub fn rules(&self) -> &[RuleEntry]

The rule listing: rules and subroutine definitions.

Source

pub fn defines(&self) -> &[Define]

The recorded preprocessing defines (macro-expansion provenance).

Source

pub fn enums(&self) -> &[EnumDecl]

The custom-enum declarations of the project.

Source

pub fn symbols(&self) -> &[Symbol]

Every indexed program-scope symbol with its declaration site and reference sites.

Source

pub fn symbol(&self, name: &str) -> Option<&Symbol>

The first symbol bound under name (a subroutine declaration and a def definition of the same name index as separate symbols).

Source

pub fn symbol_at(&self, span: Span) -> Option<&Symbol>

The symbol whose declaration site contains span, or — failing that — the symbol owning a reference site containing span.

Source

pub fn provenance(&self, span: Span) -> Option<SourceLocation>

Resolve a span to its file id, path, and line/column through the file registry.

Source

pub fn file(&self, id: u32) -> Option<&str>

The registry path of a file id.

Trait Implementations§

Source§

impl Clone for SemanticModel

Source§

fn clone(&self) -> SemanticModel

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 SemanticModel

Source§

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

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

impl Serialize for SemanticModel

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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> 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> Same for T

Source§

type Output = T

Should always be Self
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, <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.