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//Triggered by Trace and Finalize derive
36#![allow(non_local_definitions)]
37
38pub(crate) mod regex_patterns;
39
40#[macro_use]
41#[doc(hidden)]
42pub mod macros;
43
44pub mod terminal_io;
45pub mod lexer;
46pub mod parser;
47pub mod utils;
48pub mod interpreter;
49
50extern crate self as lang_interpreter;
51
52extern crate lang_interpreter_macros;
53
54/// This macro generates a unique ID for Lang Native Function
55///
56/// This macro is used within the [crate::lang_func_adapter!] macro.
57///
58/// # Arguments
59///
60/// * `$ident` - The identifier of the static LazyLock function id
61pub use lang_interpreter_macros::lang_func_id;
62
63/// This macro generates an instance of [FunctionMetadata](crate::interpreter::data::function::FunctionMetadata)
64///
65/// It should be used in combination with the [crate::lang_func!] macro.
66pub use lang_interpreter_macros::lang_func_metadata;
67
68/// This macro generates a boxed [NativeFunctionAdapter](crate::interpreter::data::function::native::NativeFunctionAdapter)
69/// instance for the given function identifier and metadata combination
70///
71/// The return type of this macro is `(FunctionMetadata, Box<dyn NativeFunctionAdapter>, NativeFuncId)`
72///
73/// This macro is used within the [crate::lang_func!] macro
74///
75/// # Arguments
76///
77/// * `$func` - An identifier of a rust function or lambda
78/// * `$metadata` - The Lang function metadata ([FunctionMetadata](crate::interpreter::data::function::FunctionMetadata))
79pub use lang_interpreter_macros::lang_func_adapter;
80
81use lang_interpreter_macros::internal_tuple_from_lang_args_impl;
82use lang_interpreter_macros::internal_native_function_adapter_impl;