ReSharper根据文件的使用方式分析依赖关系-如何禁用

ReSharper analyze dependencies based on how file used - how to disable

本文关键字:依赖 关系 何禁用 方式 文件 ReSharper      更新时间:2023-10-16

Resharper分析C++代码并标记尚未导入的类/函数。此外,Resharper建议导入带有类/函数声明的文件。

其中一个问题是,Resharper不是单独分析每个文件,而是考虑到该文件的使用方式。

示例:

test1.h
#pragma once
boost::filesystem::path path1;

通常这个文件是不可编译的-类boost::filesystem::path是未知的,我们需要导入它#include <boost/filesystem/path.hpp>

但我们有第二个文件:

test2.h
#pragma once
#include <boost/filesystem/path.hpp>
#include "test1.h"
boost::filesystem::path path2;

现在一切都是可编译的,因为test1.h之前包含的boost::filesystem::path和Resharper停止将test1.h中的boost::filesystem::path标记为未知。但这并不好——如果我们试图在未导入boost::filesystem::path的不同位置使用test1.h,就会出现错误。

我需要Resharper仅基于该文件中的#import命令来分析每个文件的依赖关系。如何设置?

有时,标头只有在包含它的.cpp文件的上下文中才有意义(例如,当使用预编译的标头时,或者当标头隐含地依赖于其他标头时),因此要解析和分析文件,R++必须找到相应的.cpp文件,并对其进行处理,直到达到所需的标头。所有分析,包括自动导入功能,都使用作为结果构建的抽象语法树,这是您描述的行为的原因。

对于许多只是.cpp文件接口的标头,最好将标头作为.cpp文件中包含的第一个文件。在这种情况下,R++将选择它作为解析的上下文,您将获得所需的自动导入行为。

如果这对您的项目有效,那么添加一个选项来解析标头可能是可行的,就好像它们是独立的文件一样。如果您希望实现此选项,请在R++的问题跟踪器中创建一个请求。