ReSharper C++ 让 Visual Studio 成为更合适 C++ 开发者的 IDE,它提供实时代码分析、快速修复、强大的搜索与导航、智能代码补全、重构、许多代码生成选项,以及能够帮助您提高日常工作效率的其他功能。
当您在 Visual Studio 编辑器中打开项目后,ReSharper C++ 可以立即开始分析代码,并在您编辑项目时持续重新分析文件,甚至能够在您编译之前检测错误和可能的问题。
40 多个快速修复,可立即解决许多检测到的代码问题。 当您在代码左侧看到灯泡标识后,按 Alt+Enter 可以应用建议的快速修复。
例如,检测到未初始化的变量后,您可以使用默认值立即将变量初始化。 其他快速修复让您能够添加缺失的 #include
指令,或者移除特定语句或更大范围(如文件)甚至整个解决方案中的冗余限定符。
快速修复的另一个好处是,您可以先使用类、方法、变量、属性和字段,然后再声明它们。 检测到未声明的符号时,ReSharper C++ 会建议快速修复,根据符号用法生成对应的符号声明。
对于任何给定范围(如文件、项目或解决方案),您可以要求 ReSharper C++ 在专用工具窗口中显示检测到的所有代码问题。
Find Code Issues 在后台运行,让您能够在 ReSharper C++ 运行分析和填充 Inspection Results 工具窗口时继续编辑或导航代码。
在结果就绪后,您可以按照多个条件对它们进行分组以及通过搜索来查找特定类型的问题。 您还可以保存和加载 Find Code Issues 结果的报告。
ReSharper C++ 代码检查还可以通过 InspectCode 进行,InspectCode 是一款免费的命令行工具,允许您在 Visual Studio 外部运行 ReSharper 检查。
要使用 InspectCode,请下载并解压 Command Line Tools 包,然后运行 InspectCode.exe 并将您的解决方案文件作为参数。 要详细了解如何使用 InspectCode,请阅读此文章。
ReSharper C++ 与 Clang-Tidy 无缝集成,后者是一款功能强大、基于 Clang 编译器的开源代码分析工具。 集成提供了代码检查和快速修复。
ReSharper C++ 引入了一系列语法样式设置,您可以利用这些设置使 ReSharper 遵循所选代码样式并在整个代码库中强制应用。
您可以在 Code Editing | C++ | Syntax Style 页面上自定义语法样式偏好设置。 选定的选项值将同时用于代码生成和代码样式执行。
ReSharper C++ will highlight style violations and offer you quick-fixes to help eliminate them. 所有语法样式快速修复均可在范围内应用,包括函数体或类定义等局部范围。
要强制执行所选的语法样式,您可以使用代码清理或专用的 Apply Syntax Style 操作,操作将根据当前上下文修复所选内容、整个当前文件或一组文件中的语法样式问题。
ReSharper C++ 提供了多个全功能主流重构,例如 Rename、Extract Method 和 Change Signature。 此外,它还提供了许多上下文操作,只需一个快捷键即可完成局部代码转换。
手动修改类或宏的名称可以引起许多问题。 因此,在您调用 Rename 重构时,ReSharper C++ 需要执行所有必需的检查。
无论是自动执行所有修改,还是显示您可以手动解决的冲突列表,都需要确保只进行必要且适当的更改。
除了应用于实际代码符号外,Rename 重构还可以重命名相关文件(源文件和头文件)与注释和文档中的相关文档,以及在 #include
指令中更新用法。
Extract Method 重构可以帮助您根据选定的代码片段创建新方法。 ReSharper 会分析选定的代码块并检测能够转换为方法参数的变量或者显示其返回值。
Change Signature 重构允许您对函数签名应用一个或多个更改。 函数的所有用法、实现和重写均会相应地更新。
Introduce Variable 重构允许您根据选定的表达式创建新的局部变量,使用表达式将其初始化,然后将代码中表达式的所有实例替换为新引入变量的引用。
另一方面,Inline Variable 会将给定变量或局部常量的所有实例替换为变量或常量的初始值设定项。
Introduce Field 重构可以帮助您根据选定的表达式创建新的字段,将原始表达式分配给它自己的初始值设定项或构造函数中的字段,并替换实例。
Introduce Namespace Alias 重构有助于为深层嵌套的命名空间定义快捷键名称。
在您调用重构后,它会立即建议定义想要为其引入命名空间别名的范围。
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
语句(return
、throw
和 break
,等等)的一个出口点上时,ReSharper C++ 现在会自动高亮显示其他所有函数或循环出口。
在 C++ 文件中,您在编写代码时可以使用代码补全,此功能有时会从其他选择中建议代码生成选项。
代码补全甚至能够建议尚未包含在当前文件中的符号。 当您在补全列表中选择这样的符号时,将自动添加相应的 #include
指令。
Quick Documentation 弹出窗口会根据 Doxygen 注释块显示文档,不会强迫您导航到符号的定义:只需在默认按键映射中点击 Ctrl+Shift+F1。
即使没有 Doxygen 文档可用于符号,Quick Documentation 也会显示符号的签名。
ReSharper C++ 还可为 C++ 代码元素显示丰富、语法高亮显示的工具提示。 这些工具提示将显示函数和变量类型,以及文档。
C# 样式 XML 文档注释有时也可以用于 C++ 符号。 ReSharper C++ 能够在 Quick Documentation 弹出窗口和快速信息工具提示中正确显示它们。
C++/CLI 是一组由 Microsoft 提供的 C++ 语言扩展,能够在托管代码和原生代码之间实现简单的互操作性。 ReSharper 为托管语言和 C++ 提供了广泛的支持,当然也能够在使用 C++/CLI 编写代码时提供帮助。
在 C++/CLI 代码中,您可以像在纯 C++ 代码中一样访问所有相同的重构和意图操作。 也可以在 C# 和 C++/CLI 之间导航。
借助 ReSharper C++,在源代码中导航更加简单。 使用简单的快捷键就可以搜索声明、成员、方法调用或继承层次结构的成员。
对于具有单独的声明和定义的所有符号,ReSharper C++ 会在左侧显示 Navigate to declaration/definition 图标 ()。 点击图标或按 Ctrl+B 可以在声明和相应的定义之间切换。
ReSharper C++ 中其他可感知上下文的导航选项包括从选定的符号导航到它的用法、基本符号或派生符号。
ReSharper C++ 提供了一组可感知上下文的导航命令,包括 Go to File、Go to Symbol、Go to File Member 和 Go to Everything。
所有这些命令都支持基于 lowerCamelCase 的搜索和按照路径筛选。 例如,在 Go to Everything 弹出窗口中输入fc movie
会返回文件和文件成员列表,它们的名称中包含字符串 movie 并属于 FollowerC 项目或 FollowerConstants 命名空间(两者都匹配 fc
)。
ReSharper C++ 可为您提供继承层次结构的概览,任何指定类型都是继承层次结构的一部分。 您可以看到基本类型和选定类型的继承者,只需点击一下即可导航到它们中的任何一个。
此外,ReSharper C++ 还提供了层次结构视图,用于可视化并帮助您确定通过 #include
指令引入的依赖项。
使用 Find Usages 可在解决方案的 C++ 代码中搜索特定符号的所有引用。
完成搜索后,找到的实例会显示在工具窗口中,还会显示分组和筛选选项以及预览窗格。
借助 ReSharper C++,您可以使用 File Structure 窗口查看当前文档的结构,这会大大简化在大文件中的导航操作。
在您切换到另一个编辑器标签页时,此工具窗口会显示相应文件的结构。
借助 To-do Explorer 工具窗口,您可以查看、分组和筛选注释,这些注释包含 3 个默认待办事项模式(Bug、Todo 和 Not Implemented)中的一个和您想要设置的任何自定义模式。
如果您使用完整的 ReSharper Ultimate 许可证并拥有多语言解决方案,To-do Explorer 会从以下支持的所有语言中收集待办项:C#、VB.NET、C++、JavaScript、XAML 和 HTML,等等。
ReSharper C++ 提供了多种方法来生成样本代码。 除了基于现有用法声明和定义符号外,它还可以创建类型成员、包围代码块和您在基本代码中常用的任何代码段。
ReSharper C++ 提供了一种快速的方法来生成缺失的成员、重写成员、等式或关系运算符、基于现有声明的定义、哈希与交换函数和构造函数。
只需在文本编辑器中按 Alt+Ins 即可调用 Generate 菜单并查看所有可用选项。
ReSharper C++ 提供了 29 种可自定义的模板。 其中一些为常规代码段,其他的则专门用于包围代码选择。
您还可以使用和创建文件模板。 按 Ctrl+Alt+Ins 可以帮助您快速地将类添加到您正在处理的项目。
借助 ReSharper C++,代码格式化程序会学习现有的代码,您可与团队成员共享格式化和代码样式偏好设置。
ReSharper C++ 让您能够配置和应用代码格式化规则,您在使用特定解决方案时可能想要使用这些规则。
作为深挖所有可用代码格式化选项的替代,您可以选择代码块并仅配置适用于此特定块的规则。
为了在整个团队内确保一致的代码样式,您可以将格式化和命名偏好设置保存到一个设置文件,然后共享给您的团队成员。
ReSharper C++ 还可以让您定义团队编码标准的其他部分,例如修饰符的顺序和指针初始值设定项的首选值。 例如,您可以指定 0
、nullptr
或 NULL
作为首选初始值设定项样式,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 Explorer 和 Unit Test Sessions 工具窗口,让您能够查看、分组、筛选和运行单元测试,以及创建和管理单元测试会话。
如果您正在基于 Unreal Engine 开发游戏,将受益于 ReSharper C++ 中的特定 Unreal Engine 支持。
也为基于 UE 的代码提供了一些代码分析检查,尤其是针对丢失或错误设置的 UE 反射宏:
ReSharper C++ 提供了与 UnrealHeaderTool 的无缝集成,帮助您直接在编辑器中捕获有关 Unreal Engine 类元数据的更多问题。 处理 Unreal Engine 项目时,ReSharper C++ 将在您正在编辑的文件上自动运行 UnrealHeaderTool,并显示任何错误或警告,就像其他检查一样。 观看实际运行中的 UnrealHeaderTool 集成。
为了帮助您轻松地使用 Unreal Engine 反射宏,ReSharper C++ 在反射宏中提供了反射说明符补全。
当文本光标位于说明符上时,UE 反射说明符的内置文档将显示在 Quick Documentation 弹出窗口 (Ctrl+Q) 中。
ReSharper C++ 可在 UFUNCTION
声明语句中通过 Client
、Server
或 NetMulticast
关键字标识 RPC。 对于此类函数,ReSharper C++ 可以意识到应当生成 _Implementation
函数和 _Validate
函数(如果 WithValidation
置 1)。 它可以生成两个函数(两者同时缺失)或只生成一个(如果一个缺失)。
导航到定义时,将建议两个函数(_Validate
和 _Implementation
)。 或者,也可以在 Alt+Enter 菜单中找到这些选项,它们以“Related UE functions”的形式显示。
当您使用当前范围中不可用的符号时,ReSharper C++ 会以红色高亮显示并建议添加缺失的 #include
(如可能)。 当头文件中缺少 #include
时,系统会在 .generated.h
(includes 列表中的最后一项)之前插入它。 位置不正确的 #include
通过对应的检查高亮显示。
Unreal Engine 项目中的 Rename 重构可以更新相应的 .generated.h
include 指令以及前缀为 A
、F
、E
、T
、S
和 U
的相关文件。
UCLASSes
的“新”后缀模板扩展为合适的出厂函数调用(将会在垃圾回收器中注册创建的对象)。 可以使用具有相应名称的实时模板来帮助您快速生成 USTRUCT/UCLASS/UENUM/UENUMCLASS
。
Unreal Engine USF 文件基于 HLSL 并包含多平台着色器代码。 这些文件通常包含虚拟文件路径,ReSharper C++ 可以使用它们并支持所有常规操作。
SpatialOS 游戏开发工具包是一个 Unreal Engine 4 复刻,可以帮助您在云中运行和管理在线游戏。 ReSharper C++ 可以识别 CrossServer、SpatialType、NonSpatialType 和其他 SpatialOS 说明符。 了解更多。
ReSharper C++ 为高级着色器语言 (HLSL) 提供了初步支持。 ReSharper C++ 会根据您的默认配色方案高亮显示 HLSL 代码并显示代码元素的嵌入提示和工具提示以及类型信息和文档。 您还可以搜索并快速导航到结构、函数或整个解决方案中的参数、引用的文件和标准库。 为了使 HLSL 体验更完美,ReSharper C++ 为您提供了智能代码补全、自动插入匹配分隔符,等等。
ReSharper 控制流分析的全部功能登陆 HLSL 着色器文件,包括对不可到达的代码、未初始化变量、冗余控制流跳转和条件分支等问题发出警告。
可免费试用 30 天