lang_interpreter/
lib.rs

1//! # Lang Interpreter RS
2//!
3//! langRS is an implementation of the Lang Programming language.
4//!
5//! This is a rust reimplementation of the Standard Lang interpreter ([Standard Lang GitHub repo](https://github.com/lang-programming/lang-interpreter))
6//!
7//! # Features
8//! - All Lang standard language features
9//! - Support for Rust Native Functions (Native modules are currently **not** supported, but will be in the future: Both statically linked and dynamically linked)
10
11#![warn(clippy::allow_attributes)]
12#![warn(clippy::assigning_clones)]
13#![warn(clippy::cloned_instead_of_copied)]
14#![warn(clippy::collection_is_never_read)]
15#![warn(clippy::debug_assert_with_mut_call)]
16#![warn(clippy::filetype_is_file)]
17#![warn(clippy::filter_map_next)]
18#![warn(clippy::flat_map_option)]
19#![warn(clippy::fn_to_numeric_cast_any)]
20#![warn(clippy::format_push_string)]
21#![warn(clippy::implicit_clone)]
22#![warn(clippy::imprecise_flops)]
23#![warn(clippy::inconsistent_struct_constructor)]
24#![warn(clippy::inefficient_to_string)]
25#![warn(clippy::iter_filter_is_ok)]
26#![warn(clippy::iter_filter_is_some)]
27#![warn(clippy::large_types_passed_by_value)]
28#![warn(clippy::manual_string_new)]
29#![warn(clippy::option_as_ref_cloned)]
30#![warn(clippy::renamed_function_params)]
31#![warn(clippy::semicolon_if_nothing_returned)]
32#![warn(clippy::suboptimal_flops)]
33#![warn(clippy::too_long_first_doc_paragraph)]
34
35#![allow(clippy::uninlined_format_args)]
36
37//Triggered by Trace and Finalize derive
38#![allow(non_local_definitions)]
39
40pub(crate) mod regex_patterns;
41
42#[macro_use]
43#[doc(hidden)]
44pub mod macros;
45
46pub mod terminal_io;
47pub mod lexer;
48pub mod parser;
49pub mod utils;
50pub mod interpreter;
51
52extern crate self as lang_interpreter;
53
54extern crate lang_interpreter_macros;
55
56/// This macro generates a unique ID for Lang Native Function
57///
58/// This macro is used within the [crate::lang_func_adapter!] macro.
59///
60/// # Arguments
61///
62/// * `$ident` - The identifier of the static LazyLock function id
63pub use lang_interpreter_macros::lang_func_id;
64
65/// This macro generates an instance of [FunctionMetadata](crate::interpreter::data::function::FunctionMetadata)
66///
67/// It should be used in combination with the [crate::lang_func!] macro.
68pub use lang_interpreter_macros::lang_func_metadata;
69
70/// This macro generates a boxed [NativeFunctionAdapter](crate::interpreter::data::function::native::NativeFunctionAdapter)
71/// instance for the given function identifier and metadata combination
72///
73/// The return type of this macro is `(FunctionMetadata, Box<dyn NativeFunctionAdapter>, NativeFuncId)`
74///
75/// This macro is used within the [crate::lang_func!] macro
76///
77/// # Arguments
78///
79/// * `$func` - An identifier of a rust function or lambda
80/// * `$metadata` - The Lang function metadata ([FunctionMetadata](crate::interpreter::data::function::FunctionMetadata))
81pub use lang_interpreter_macros::lang_func_adapter;
82
83use lang_interpreter_macros::internal_tuple_from_lang_args_impl;
84use lang_interpreter_macros::internal_native_function_adapter_impl;