ReSharper C++ 功能

ReSharper C++ 让 Visual Studio 成为更合适 C++ 开发者的 IDE,它提供实时代码分析、快速修复、强大的搜索与导航、智能代码补全、重构、许多代码生成选项,以及能够帮助您提高日常工作效率的其他功能。

代码分析

当您在 Visual Studio 编辑器中打开项目后,ReSharper C++ 可以立即开始分析代码,并在您编辑项目时持续重新分析文件,甚至能够在您编译之前检测错误和可能的问题。

快速修复

40 多个快速修复,可立即解决许多检测到的代码问题。 当您在代码左侧看到灯泡标识后,按 Alt+Enter 可以应用建议的快速修复。

例如,检测到未初始化的变量后,您可以使用默认值立即将变量初始化。 其他快速修复让您能够添加缺失的 #include 指令,或者移除特定语句或更大范围(如文件)甚至整个解决方案中的冗余限定符。

在 ReSharper C++ 中根据用法生成代码

根据用法创建

快速修复的另一个好处是,您可以先使用类、方法、变量、属性和字段,然后再声明它们。 检测到未声明的符号时,ReSharper C++ 会建议快速修复,根据符号用法生成对应的符号声明。

查找代码问题

查找代码问题

对于任何给定范围(如文件、项目或解决方案),您可以要求 ReSharper C++ 在专用工具窗口中显示检测到的所有代码问题。

Find Code Issues 在后台运行,让您能够在 ReSharper C++ 运行分析和填充 Inspection Results 工具窗口时继续编辑或导航代码。

在结果就绪后,您可以按照多个条件对它们进行分组以及通过搜索来查找特定类型的问题。 您还可以保存和加载 Find Code Issues 结果的报告。

从命令行运行 C++ 代码分析

命令行运行 C++ 代码分析

ReSharper C++ 代码检查还可以通过 InspectCode 进行,InspectCode 是一款免费的命令行工具,允许您在 Visual Studio 外部运行 ReSharper 检查。

要使用 InspectCode,请下载并解压 Command Line Tools 包,然后运行 InspectCode.exe 并将您的解决方案文件作为参数。 要详细了解如何使用 InspectCode,请阅读此文章

Clang-Tidy 设置

Clang-Tidy

ReSharper C++ 与 Clang-Tidy 无缝集成,后者是一款功能强大、基于 Clang 编译器的开源代码分析工具。 集成提供了代码检查和快速修复。

语法样式

ReSharper C++ 引入了一系列语法样式设置,您可以利用这些设置使 ReSharper 遵循所选代码样式并在整个代码库中强制应用。

语法样式

您可以在 Code Editing | C++ | Syntax Style 页面上自定义语法样式偏好设置。 选定的选项值将同时用于代码生成和代码样式执行。

快速修复

ReSharper C++ 将高亮显示样式违规并提供快速修复进行消除。 所有语法样式快速修复均可在范围内应用,包括函数体或类定义等局部范围。

应用语法样式

要强制执行所选的语法样式,您可以使用代码清理或专用的 Apply Syntax Style 操作,操作将根据当前上下文修复所选内容、整个当前文件或一组文件中的语法样式问题。

重构

ReSharper C++ 提供了多个全功能主流重构,例如 Rename、Extract Method 和 Change Signature。 此外,它还提供了许多上下文操作,只需一个快捷键即可完成局部代码转换。

ReSharper C++ 中的 Rename 重构

Rename

手动修改类或宏的名称可以引起许多问题。 因此,在您调用 Rename 重构时,ReSharper C++ 需要执行所有必需的检查。

无论是自动执行所有修改,还是显示您可以手动解决的冲突列表,都需要确保只进行必要且适当的更改。

除了应用于实际代码符号外,Rename 重构还可以重命名相关文件(源文件和头文件)与注释和文档中的相关文档,以及在 #include 指令中更新用法。

ReSharper C++ 中的 Extract Method 重构

Extract Method

Extract Method 重构可以帮助您根据选定的代码片段创建新方法。 ReSharper 会分析选定的代码块并检测能够转换为方法参数的变量或者显示其返回值。

C++ 中的 Change Signature 重构

Change Signature

Change Signature 重构允许您对函数签名应用一个或多个更改。 函数的所有用法、实现和重写均会相应地更新。

C++ 中的 Inline Variable 重构

Introduce Variable 和 Inline Variable

Introduce Variable 重构允许您根据选定的表达式创建新的局部变量,使用表达式将其初始化,然后将代码中表达式的所有实例替换为新引入变量的引用。

另一方面,Inline Variable 会将给定变量或局部常量的所有实例替换为变量或常量的初始值设定项。

ReSharper C++ 中的 Introduce Field 重构

Introduce Field

Introduce Field 重构可以帮助您根据选定的表达式创建新的字段,将原始表达式分配给它自己的初始值设定项或构造函数中的字段,并替换实例。

Introduce Namespace Alias

Introduce Namespace Alias 重构有助于为深层嵌套的命名空间定义快捷键名称。

在您调用重构后,它会立即建议定义想要为其引入命名空间别名的范围。

ReSharper C++ 中的 Introduce typedef 和 Inline typedef 重构

Introduce typedef 和 Inline typedef

Introduce typedef 重构让您能够为选定的数据类型快速创建 typedef,并将此数据类型及其所有实例替换为新创建的 typedef。

Inline typedef 重构则相反:它会将现有的 typedef 替换为实际的数据类型。

上下文操作

除了重构,ReSharper C++ 还提供了一组上下文操作:局部代码转换,通常可以帮助您在替代语法选项之间切换。 与快速修复相似,您按 Alt+Enter 就可以调用这些操作。

例如,您可以快速将 auto 替换为显式类型或将类型替换为 auto。 其他上下文操作能够帮助您合并嵌套的 if 语句,在切换枚举时生成缺失的 case 语句,替换宏调用或 typedef,等等。

代码辅助

ReSharper C++ 扩展了 Visual Studio 高亮显示语法和匹配代码结构部分的方法,提供了自有的代码补全实现,还可帮助为任意 C++ 符号可视化可用的文档。

出口点自动高亮显示

语法和结构高亮显示

ReSharper C++ 可以识别您的解决方案中的 *.c*.cc*.cxx*.cpp*.h*.hpp 文件,并根据您随时可以调整的配色方案高亮显示这些文件中的源代码。

此外,ReSharper C++ 还可在您将脱字符号放置在一对项中的一个上时高亮显示多个匹配项,可以是匹配的分隔符、宏或格式说明符和 printf 函数调用中的参数。

当您将脱字符号放置在函数、循环、或 switch 语句(returnthrowbreak,等等)的一个出口点上时,ReSharper C++ 现在会自动高亮显示其他所有函数或循环出口

自动补全未包含在当前文件中的 C++ 符号

代码补全

在 C++ 文件中,您在编写代码时可以使用代码补全,此功能有时会从其他选择中建议代码生成选项。

代码补全甚至能够建议尚未包含在当前文件中的符号。 当您在补全列表中选择这样的符号时,将自动添加相应的 #include 指令。

文档摘要

Quick Documentation 弹出窗口会根据 Doxygen 注释块显示文档,不会强迫您导航到符号的定义:只需在默认按键映射中点击 Ctrl+Shift+F1

即使没有 Doxygen 文档可用于符号,Quick Documentation 也会显示符号的签名。

ReSharper C++ 还可为 C++ 代码元素显示丰富、语法高亮显示的工具提示。 这些工具提示将显示函数和变量类型,以及文档。

C# 样式 XML 文档注释有时也可以用于 C++ 符号。 ReSharper C++ 能够在 Quick Documentation 弹出窗口和快速信息工具提示中正确显示它们。

C++/CLI

C++/CLI支持

C++/CLI 是一组由 Microsoft 提供的 C++ 语言扩展,能够在托管代码和原生代码之间实现简单的互操作性。 ReSharper 为托管语言和 C++ 提供了广泛的支持,当然也能够在使用 C++/CLI 编写代码时提供帮助。

在 C++/CLI 代码中,您可以像在纯 C++ 代码中一样访问所有相同的重构和意图操作。 也可以在 C# 和 C++/CLI 之间导航。

借助 ReSharper C++,在源代码中导航更加简单。 使用简单的快捷键就可以搜索声明、成员、方法调用或继承层次结构的成员。

ReSharper C++ 中的 Navigate To 菜单

上下文导航

对于具有单独的声明和定义的所有符号,ReSharper C++ 会在左侧显示 Navigate to declaration/definition 图标 (Navigate to declaration/definition icon in ReSharper C++)。 点击图标或按 Ctrl+B 可以在声明和相应的定义之间切换。

ReSharper C++ 中其他可感知上下文的导航选项包括从选定的符号导航到它的用法、基本符号或派生符号。

ReSharper C++ 中的可感知上下文导航

转到任意内容

ReSharper C++ 提供了一组可感知上下文的导航命令,包括 Go to FileGo to SymbolGo to File MemberGo to Everything

所有这些命令都支持基于 lowerCamelCase 的搜索和按照路径筛选。 例如,在 Go to Everything 弹出窗口中输入fc movie 会返回文件和文件成员列表,它们的名称中包含字符串 movie 并属于 FollowerC 项目或 FollowerConstants 命名空间(两者都匹配 fc)。

可视化层次结构

ReSharper C++ 可为您提供继承层次结构的概览,任何指定类型都是继承层次结构的一部分。 您可以看到基本类型和选定类型的继承者,只需点击一下即可导航到它们中的任何一个。

此外,ReSharper C++ 还提供了层次结构视图,用于可视化并帮助您确定通过 #include 指令引入的依赖项。

使用 ReSharper C++ 查找符号的用法

查找用法

使用 Find Usages 可在解决方案的 C++ 代码中搜索特定符号的所有引用。

完成搜索后,找到的实例会显示在工具窗口中,还会显示分组和筛选选项以及预览窗格。

C++ 中的 File Structure

文件结构

借助 ReSharper C++,您可以使用 File Structure 窗口查看当前文档的结构,这会大大简化在大文件中的导航操作。

在您切换到另一个编辑器标签页时,此工具窗口会显示相应文件的结构。

ReSharper C++ 中的 To-do Explorer

To-do Explorer

借助 To-do Explorer 工具窗口,您可以查看、分组和筛选注释,这些注释包含 3 个默认待办事项模式(BugTodoNot Implemented)中的一个和您想要设置的任何自定义模式。

如果您使用完整的 ReSharper Ultimate 许可证并拥有多语言解决方案,To-do Explorer 会从以下支持的所有语言中收集待办项:C#、VB.NET、C++、JavaScript、XAML 和 HTML,等等。

代码生成

ReSharper C++ 提供了多种方法来生成样本代码。 除了基于现有用法声明和定义符号外,它还可以创建类型成员、包围代码块和您在基本代码中常用的任何代码段。

ReSharper C++ 中的 Code Generation 弹出窗口

生成普通代码

ReSharper C++ 提供了一种快速的方法来生成缺失的成员、重写成员、等式或关系运算符、基于现有声明的定义、哈希与交换函数和构造函数。

只需在文本编辑器中按 Alt+Ins 即可调用 Generate 菜单并查看所有可用选项。

ReSharper C++ 中的包围模板

代码和文件模板

ReSharper C++ 提供了 29 种可自定义的模板。 其中一些为常规代码段,其他的则专门用于包围代码选择。

您还可以使用和创建文件模板。 按 Ctrl+Alt+Ins 可以帮助您快速地将类添加到您正在处理的项目。

代码样式辅助

借助 ReSharper C++,代码格式化程序会学习现有的代码,您可与团队成员共享格式化和代码样式偏好设置。

ReSharper C++ 中的代码样式辅助

代码格式化程序

ReSharper C++ 让您能够配置和应用代码格式化规则,您在使用特定解决方案时可能想要使用这些规则。

作为深挖所有可用代码格式化选项的替代,您可以选择代码块并仅配置适用于此特定块的规则。

适用于默认指针初始值设定项的代码样式设置

代码样式设置

为了在整个团队内确保一致的代码样式,您可以将格式化和命名偏好设置保存到一个设置文件,然后共享给您的团队成员。

ReSharper C++ 还可以让您定义团队编码标准的其他部分,例如修饰符的顺序和指针初始值设定项的首选值。 例如,您可以指定 0nullptrNULL 作为首选初始值设定项样式,ReSharper C++ 在为您生成新的初始值设定项时会尊重您的选择。

使用 ReSharper Options | Code Editing | C++ | Naming Style 可选择一个预定义的 C++ 命名样式:STL、Google、LLVM、CamelCase 或 Microsoft。

检测代码样式

检测格式化设置

通常情况下,自定义格式化设置更加简单,只需在现有代码中检测它们。 使用 ReSharper | Edit | Detect 格式化设置菜单可让 ReSharper 检测代码格式化设置。 您将获得包含检测到的值的工具窗口,您可以在计算机上检查这些值并应用到 ReSharper 设置。 或者,您也可以将它们保存到团队共享的设置层中,以便团队中的其他开发者在打开当前解决方案时获得相同的代码格式化配置。

了解详情

单元测试

Visual Studio 集成的单元测试运行程序支持 Google Test、Boost.Test、Catch 和 Doctest 框架。

单元测试运行程序

ReSharper C++ 在 Visual Studio 中提供了一个单元测试运行程序,它支持 Google Test、Boost.Test、Catch 和 Doctest 框架。

您可以直接在文本编辑器中通过 Alt+Enter 上下文菜单运行和调试单元测试,以及将测试添加到不同的会话。

ReSharper C++ 提供了 Unit Test ExplorerUnit Test Sessions 工具窗口,让您能够查看、分组、筛选和运行单元测试,以及创建和管理单元测试会话。

Unreal Engine

如果您正在基于 Unreal Engine 开发游戏,将受益于 ReSharper C++ 中的特定 Unreal Engine 支持。

UE 命名约定

UE 命名约定

ReSharper C++ 的所有操作都适应了 UE 命名约定,这些操作包括 Introduce Variable 和 Rename 重构、针对 getter 和 setter 的代码生成,等等。 ReSharper C++ 还会密切注意您在基本代码中使用的名称。 它可以通过运行 Inconsistent UE naming 检查的方式高亮显示与 UE 命名约定的任何不一致。

了解详情

UE 分析

UE 代码分析

也为基于 UE 的代码提供了一些代码分析检查,尤其是针对丢失或错误设置的 UE 反射宏:

  • UCLASS 声明必须公开继承 UObject 或从它派生的类。
  • 由 UCLASS 标记的类必须只继承从 UObject 派生的一个类或直接继承 UObject。
  • UCLASS 必须是一个类/USTRUCT 必须是一个结构。
  • UInterface 必须为空。
  • 在 UE 类/接口/结构声明中缺少 UCLASS/UINTERFACE/USTRUCT 宏调用。
  • UE 类不能在另一个类中声明。
  • 声明前的 UPROPERTY/UFUNCTION 宏调用无效。
  • 存储在非 uproperty 成员中的对象可以随时进行垃圾回收。
UnrealHeaderTool

UnrealHeaderTool

ReSharper C++ 提供了与 UnrealHeaderTool 的无缝集成,帮助您直接在编辑器中捕获有关 Unreal Engine 类元数据的更多问题。 处理 Unreal Engine 项目时,ReSharper C++ 将在您正在编辑的文件上自动运行 UnrealHeaderTool,并显示任何错误或警告,就像其他检查一样。 观看实际运行中的 UnrealHeaderTool 集成

UE 反射说明符补全

反射说明符的代码补全

为了帮助您轻松地使用 Unreal Engine 反射宏,ReSharper C++ 在反射宏中提供了反射说明符补全。

UE 反射说明符文档

反射说明符的代码文档

当文本光标位于说明符上时,UE 反射说明符的内置文档将显示在 Quick Documentation 弹出窗口 (Ctrl+Q) 中。

RPC 导航

UE 远程过程调用支持

ReSharper C++ 可在 UFUNCTION 声明语句中通过 ClientServerNetMulticast 关键字标识 RPC。 对于此类函数,ReSharper C++ 可以意识到应当生成 _Implementation 函数和 _Validate 函数(如果 WithValidation 置 1)。 它可以生成两个函数(两者同时缺失)或只生成一个(如果一个缺失)。

导航到定义时,将建议两个函数(_Validate_Implementation)。 或者,也可以在 Alt+Enter 菜单中找到这些选项,它们以“Related UE functions”的形式显示。

了解详情

UE 生成头检查

自动导入和生成头

当您使用当前范围中不可用的符号时,ReSharper C++ 会以红色高亮显示并建议添加缺失的 #include(如可能)。 当头文件中缺少 #include 时,系统会在 .generated.h(includes 列表中的最后一项)之前插入它。 位置不正确的 #include 通过对应的检查高亮显示。

Unreal Engine 项目中的 Rename 重构可以更新相应的 .generated.h include 指令以及前缀为 AFETSU 的相关文件。

UE 代码生成

代码生成

UCLASSes 的“新”后缀模板扩展为合适的出厂函数调用(将会在垃圾回收器中注册创建的对象)。 可以使用具有相应名称的实时模板来帮助您快速生成 USTRUCT/UCLASS/UENUM/UENUMCLASS

USF 文件

USF 文件

Unreal Engine USF 文件基于 HLSL 并包含多平台着色器代码。 这些文件通常包含虚拟文件路径,ReSharper C++ 可以使用它们并支持所有常规操作。

HLSL

SpatialOS GDK

SpatialOS 游戏开发工具包是一个 Unreal Engine 4 复刻,可以帮助您在云中运行和管理在线游戏。 ReSharper C++ 可以识别 CrossServer、SpatialType、NonSpatialType 和其他 SpatialOS 说明符。 了解更多。

HLSL

HLSL

ReSharper C++ 为高级着色器语言 (HLSL) 提供了初步支持ReSharper C++ 会根据您的默认配色方案高亮显示 HLSL 代码并显示代码元素的嵌入提示和工具提示以及类型信息和文档。 您还可以搜索并快速导航到结构、函数或整个解决方案中的参数、引用的文件和标准库。 为了使 HLSL 体验更完美,ReSharper C++ 为您提供了智能代码补全、自动插入匹配分隔符,等等。

HLSL

ReSharper 控制流分析的全部功能登陆 HLSL 着色器文件,包括对不可到达的代码、未初始化变量、冗余控制流跳转和条件分支等问题发出警告。

下载

可免费试用 30 天