#[path = "binding_rules.generated.rs"]
mod binding_rules;
#[path = "built_ins.generated.rs"]
mod built_ins;
use std::rc::Rc;
use built_ins::define_built_ins;
use metaslang_bindings::ScopeGraphBuilder;
use metaslang_cst::text_index::TextIndex;
use semver::Version;
use crate::cst::{KindTypes, Node, NonterminalKind};
pub(crate) type BindingGraphBuilder = metaslang_bindings::BindingGraphBuilder<KindTypes>;
pub type BindingGraph = metaslang_bindings::BindingGraph<KindTypes>;
pub type Definition = metaslang_bindings::Definition<KindTypes>;
pub type Reference = metaslang_bindings::Reference<KindTypes>;
pub type BindingLocation = metaslang_bindings::BindingLocation<KindTypes>;
pub type UserFileLocation = metaslang_bindings::UserFileLocation<KindTypes>;
pub type BuiltInLocation = metaslang_bindings::BuiltInLocation;
#[cfg(feature = "__private_testing_utils")]
#[doc(hidden)]
pub fn create_with_resolver(
version: &Version,
resolver: Rc<dyn metaslang_bindings::PathResolver<KindTypes>>,
) -> BindingGraphBuilder {
create_with_resolver_internal(version, resolver)
}
pub(crate) fn create_with_resolver_internal(
version: &Version,
resolver: Rc<dyn metaslang_bindings::PathResolver<KindTypes>>,
) -> BindingGraphBuilder {
let mut binding_graph = BindingGraphBuilder::create(
version.clone(),
binding_rules::BINDING_RULES_SOURCE,
resolver,
);
add_built_ins(&mut binding_graph, version);
binding_graph
}
#[cfg(feature = "__private_testing_utils")]
#[doc(hidden)]
pub fn get_binding_rules() -> &'static str {
binding_rules::BINDING_RULES_SOURCE
}
pub(crate) fn add_built_ins(builder: &mut BindingGraphBuilder, version: &Version) {
let empty_node = Node::nonterminal(NonterminalKind::SourceUnit, Vec::new())
.into_nonterminal()
.unwrap();
let empty_cursor = Rc::clone(&empty_node).create_cursor(TextIndex::ZERO);
let mut file_builder = builder.build_built_ins_file("built_ins.sol", empty_cursor);
let root_node = file_builder.root_node();
let mut globals = ScopeGraphBuilder::new(&mut file_builder, "@@built-ins@@", root_node, None);
define_built_ins(&mut file_builder, &mut globals, version);
}