Skip to main content

ForeignFunctionDef

Struct ForeignFunctionDef 

Source
pub struct ForeignFunctionDef {
Show 13 fields pub language: String, pub language_span: Span, pub name: String, pub name_span: Span, pub doc_comment: Option<DocComment>, pub type_params: Option<Vec<TypeParam>>, pub params: Vec<FunctionParameter>, pub return_type: Option<TypeAnnotation>, pub body_text: String, pub body_span: Span, pub annotations: Vec<Annotation>, pub is_async: bool, pub native_abi: Option<NativeAbiBinding>,
}
Expand description

A foreign function definition: fn <language> name(params) -> type { foreign_body }

The body is raw source text in the foreign language, not parsed as Shape.

Fields§

§language: String

The language identifier (e.g., “python”, “julia”, “sql”)

§language_span: Span§name: String§name_span: Span§doc_comment: Option<DocComment>§type_params: Option<Vec<TypeParam>>§params: Vec<FunctionParameter>§return_type: Option<TypeAnnotation>§body_text: String

The raw dedented source text of the foreign function body.

§body_span: Span

Span of the body text in the original Shape source file.

§annotations: Vec<Annotation>§is_async: bool§native_abi: Option<NativeAbiBinding>

Native ABI metadata for extern "C" declarations.

When present, this foreign function is not compiled/invoked through a language runtime extension. The VM links and invokes it via the native C ABI path.

Implementations§

Source§

impl ForeignFunctionDef

Source

pub fn returns_result(&self) -> bool

Whether the declared return type is Result<T>.

Source

pub fn is_native_abi(&self) -> bool

Whether this function uses native ABI binding (e.g. extern "C").

Source

pub fn validate_type_annotations( &self, dynamic_language: bool, ) -> Vec<(String, Span)>

Validate that all parameter and return types are explicitly annotated, and that dynamic-language foreign functions declare Result<T> as their return type.

Foreign function bodies are opaque — the type system cannot infer types from them. This returns a list of (message, span) for each problem, shared between the compiler and the LSP.

dynamic_language should be true for languages like Python, JS, Ruby where every call can fail at runtime. Currently all foreign languages are treated as dynamic (the ABI declares this via ErrorModel).

Trait Implementations§

Source§

impl Clone for ForeignFunctionDef

Source§

fn clone(&self) -> ForeignFunctionDef

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ForeignFunctionDef

Source§

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

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

impl<'de> Deserialize<'de> for ForeignFunctionDef

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for ForeignFunctionDef

Source§

fn eq(&self, other: &ForeignFunctionDef) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for ForeignFunctionDef

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
Source§

impl StructuralPartialEq for ForeignFunctionDef

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> 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.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,