Skip to main content

Scope

Struct Scope 

Source
pub struct Scope {
    pub kind: ScopeKind,
    pub parent: Option<ScopeId>,
    /* private fields */
}
Expand description

Single scope: variables and optional main-only data.

Fields§

§kind: ScopeKind§parent: Option<ScopeId>

Implementations§

Source§

impl Scope

Source

pub fn new_main() -> Self

Source

pub fn new_child(kind: ScopeKind, parent: ScopeId) -> Self

Source

pub fn add_variable(&mut self, info: VariableInfo)

Source

pub fn has_variable(&self, name: &str) -> bool

Source

pub fn variable_names(&self) -> Vec<String>

Variable names in this scope (for LSP completion).

Source

pub fn global_names(&self) -> Option<Vec<String>>

Global names in this scope (main scope only; for LSP completion).

Source

pub fn function_names(&self) -> Option<Vec<String>>

Function names in this scope (main scope only; for LSP completion).

Source

pub fn class_names(&self) -> Option<Vec<String>>

Class names in this scope (main scope only; for LSP completion).

Source

pub fn add_global(&mut self, name: String)

Add a global name (main scope only).

Source

pub fn add_function( &mut self, name: String, min_arity: usize, max_arity: usize, span: Span, )

Add a user function (main scope only). Supports overloads and default params via (min_arity, max_arity).

Source

pub fn add_function_with_types( &mut self, name: String, min_arity: usize, max_arity: usize, span: Span, param_types: Option<Vec<Type>>, return_type: Option<Type>, )

Add a user function with optional param/return types (main scope only).

Source

pub fn add_class(&mut self, name: String, span: Span)

Add a class name (main scope only). Keeps first declaration; span is for duplicate reporting. A non-empty span (e.g. from the document) overwrites an empty one (e.g. from builtins/signatures) so that LSP rename/definition use the real location.

Source

pub fn has_global(&self, name: &str) -> bool

Source

pub fn function_accepts_arity(&self, name: &str, arity: usize) -> bool

True if this scope has a function with the given name that accepts the given arity.

Source

pub fn get_function_span(&self, name: &str) -> Option<Span>

Span of the first overload for a function name (for go-to-def).

Source

pub fn get_function_span_for_arity_range( &self, name: &str, min_arity: usize, max_arity: usize, ) -> Option<Span>

Span of an existing overload with the same (min_arity, max_arity), if any (for duplicate same-signature).

Source

pub fn get_function_arity(&self, name: &str) -> Option<usize>

Legacy: single arity (for resolve symbol). Returns first range’s max if any.

Source

pub fn get_function_type( &self, name: &str, arity: usize, ) -> Option<(Vec<Type>, Type)>

Get param types and return type for a function call that passes arity arguments, if known.

Source

pub fn get_function_type_as_value(&self, name: &str) -> Option<Type>

Get the type of a function when used as a value (e.g. foo without calling). For a single overload with optional params (min_arity < max_arity), returns a union of function types per arity, e.g. getMP(entity?) -> integer gives Function< => integer> | Function<integer => integer>.

Source

pub fn add_global_with_type(&mut self, name: String, ty: Type)

Add a global name with type (main scope only). Used when seeding from .sig.

Source

pub fn get_global_type(&self, name: &str) -> Option<Type>

Get the type of a global, if known (from .sig).

Source

pub fn has_class(&self, name: &str) -> bool

Source

pub fn get_class_first_span(&self, name: &str) -> Option<Span>

First declaration span for a class in this scope (for duplicate diagnostic).

Source

pub fn get_variable(&self, name: &str) -> Option<&VariableInfo>

Trait Implementations§

Source§

impl Debug for Scope

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Scope

§

impl RefUnwindSafe for Scope

§

impl Send for Scope

§

impl Sync for Scope

§

impl Unpin for Scope

§

impl UnsafeUnpin for Scope

§

impl UnwindSafe for Scope

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