我有errors.rs
个error_chain! {}
个文件,该文件导出Result
,ResultExt
,Error
和ErrorKind
。
如果我use self::errors::*
,IntelliJ认为我使用的是默认Result
(std::result::Result
,我认为)。但是,如果我使用use self::errors::{Result, ...}
显式导入类型,那么一切都会变得很糟糕。
我可以说,因为标准结果有两种类型参数,但error_chain
只有一种。
在任何一种情况下,它仍然会编译。
我使用的是标准的Rust IntelliJ插件,版本为0.1.0.1991
。
帮助!有谁知道如何让插件了解宏正在做什么?
答案 0 :(得分:4)
IntelliJ-Rust插件使用自己的代码解析器。它允许利用所有IntelliJ平台功能(如代码导航,格式化,重构,检查,快速文档,标记和许多其他功能),但需要实现所有语言功能,这对Rust来说不是一项简单的任务(你可以找到更多在this reddit post)中深入讨论Rust编译器解析器与IDE解析器。
宏扩展可能是目前插件解析器不支持的最大语言功能。也就是说,插件会看到此error_chain!
调用,可以将其解析为其定义,但不会将其扩展为实际代码,因此无法了解新的Result
结构从stdlib中隐藏一个。不幸的是,在某些情况下会导致这种误报错误消息。
我已将此错误注释转换为检查,因此在下一个插件版本中,您可以完全关闭它或为特定代码块关闭它。关于宏扩展的工作也在进行中。