Rust IDE没有检测到error_chain的结果,认为我正在使用std :: result :: Result

时间:2017-05-20 17:48:52

标签: intellij-idea rust

我有errors.rserror_chain! {}个文件,该文件导出ResultResultExtErrorErrorKind

如果我use self::errors::*,IntelliJ认为我使用的是默认Resultstd::result::Result,我认为)。但是,如果我使用use self::errors::{Result, ...}显式导入类型,那么一切都会变得很糟糕。

我可以说,因为标准结果有两种类型参数,但error_chain只有一种。

在任何一种情况下,它仍然会编译。

我使用的是标准的Rust IntelliJ插件,版本为0.1.0.1991

帮助!有谁知道如何让插件了解宏正在做什么?

1 个答案:

答案 0 :(得分:4)

IntelliJ-Rust插件使用自己的代码解析器。它允许利用所有IntelliJ平台功能(如代码导航,格式化,重构,检查,快速文档,标记和许多其他功能),但需要实现所有语言功能,这对Rust来说不是一项简单的任务(你可以找到更多在this reddit post)中深入讨论Rust编译器解析器与IDE解析器。

宏扩展可能是目前插件解析器不支持的最大语言功能。也就是说,插件会看到此error_chain!调用,可以将其解析为其定义,但不会将其扩展为实际代码,因此无法了解新的Result结构从stdlib中隐藏一个。不幸的是,在某些情况下会导致这种误报错误消息。

我已将此错误注释转换为检查,因此在下一个插件版本中,您可以完全关闭它或为特定代码块关闭它。关于宏扩展的工作也在进行中。