use sway_types::{Span, Spanned};
use crate::{
language::parsed::{Expression, VariableDeclaration},
namespace::ModulePath,
Engines, GenericArgument, Namespace,
};
#[derive(Debug, Clone)]
pub struct ParserLifter<T> {
pub var_decls: Vec<VariableDeclaration>,
pub value: T,
}
impl<T> ParserLifter<T> {
#[allow(dead_code)]
pub(crate) fn empty(value: T) -> Self {
ParserLifter {
var_decls: vec![],
value,
}
}
}
pub(crate) fn module_can_be_changed(
_engines: &Engines,
issue_namespace: &Namespace,
absolute_module_path: &ModulePath,
) -> bool {
!issue_namespace.module_is_external(absolute_module_path)
}
pub(crate) fn span_of_arguments(arguments: &[Expression], span: &Span) -> Span {
if arguments.is_empty() {
span.clone()
} else {
Span::join_all(arguments.iter().map(|arg| arg.span()))
}
}
pub(crate) fn span_of_type_arguments(type_arguments: &[GenericArgument], span: &Span) -> Span {
if type_arguments.is_empty() {
span.clone()
} else {
Span::join_all(type_arguments.iter().map(|targ| targ.span()))
}
}