1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use std::ops::Deref;
use python_parser::ast::Expression;
use crate::check::context::clss::python::UNION;
use crate::check::name::{Empty, Name};
use crate::check::name::true_name::python::to_ty_name;
use crate::check::name::true_name::TrueName;
impl From<&Expression> for Name {
fn from(value: &Expression) -> Self {
match value {
Expression::Name(_) | Expression::TupleLiteral(_) => Name::from(&TrueName::from(value)),
Expression::Subscript(id, exprs) =>
if id.deref() == &Expression::Name(String::from(UNION)) {
let names: Vec<TrueName> = exprs.iter().map(to_ty_name).collect();
Name::from(&names)
} else {
Name::from(&TrueName::from(value))
},
_ => Name::from(&TrueName::empty())
}
}
}