Plugins 如何找出rustc::middle::ty::ty所代表的类型?
为了在Rust中写入另一个lint,我需要确保Expr的类型实际上是一个Plugins 如何找出rustc::middle::ty::ty所代表的类型?,plugins,rust,lint,internals,Plugins,Rust,Lint,Internals,为了在Rust中写入另一个lint,我需要确保Expr的类型实际上是一个选项(或任何指向该选项的指针)。我已经对任何ptrs和rptrs进行了总结,留下了一个rustc::middle::ty,在我的测试用例中调试到(手动格式化以提高可读性): 然而,现在我有点不知所措了——如何确定TyS是否是一种选项类型?您需要在DefId上使用。将为您提供一个必须使用的迭代器 下面是一个粗略的草图,但是如果稍微调整一下,应该会给出一个Names数组 if let ty_enum(did, ..) = ty.
选项
(或任何指向该选项的指针)。我已经对任何ptr
s和rptr
s进行了总结,留下了一个rustc::middle::ty
,在我的测试用例中调试到(手动格式化以提高可读性):
然而,现在我有点不知所措了——如何确定TyS是否是一种选项类型?您需要在DefId上使用。将为您提供一个必须使用的迭代器
下面是一个粗略的草图,但是如果稍微调整一下,应该会给出一个Name
s数组
if let ty_enum(did, ..) = ty.sty {
tcx.with_path(did, |iter| iter.map(|elem| elem.name())).collect::<Vec<Name>>;
}
如果让ty_enum(did,…)=ty.sty{
tcx.with_path(did,| iter | iter.map(| elem | elem.name()).collect:;
}
很酷。我甚至能够用一片&str
s对Name
s的iter
进行.zip
比较,而无需先构建Vec。
if let ty_enum(did, ..) = ty.sty {
tcx.with_path(did, |iter| iter.map(|elem| elem.name())).collect::<Vec<Name>>;
}