[Guest Post]使用更好地重构Unity项目。NET分析器

约翰·米勒

这篇文章由特邀博客写手Shreya Pandit撰写,她是Visual Studio Tools for Unity团队的实习生,团队代表她发布了这篇文章。

我叫Shreya Pandit,是麻省理工学院计算机科学和认知科学专业的本科生。在过去的一个月里,我有了一个难以置信的机会在团结工具团队实习。我专门从事于Microsoft Analyzers for Unity项目,这是GitHub上的一个开源项目。此项目为Unity中的开发人员提供代码建议并抑制警告,以提高代码正确性和性能。在开始实习时,我掌握了C#和Unity的基本知识,最初的重点是熟悉语言和游戏环境。然后,我准备将注意力转移到Analyzer项目上,在该项目中,我将基于社区建议在GitHub存储库中。

项目概述

微软Unity分析器项目旨在为开发人员提供Unity特定的建议,以改进他们的代码。此工具通过功能强大的IDE Visual Studio提供,并依赖于。NET编译器平台,罗斯林编译器在开发人员编程时使用API检查和分析代码,这对检查语法和语义很有用。添加新的分析器使Roslyn能够检查特定的代码模式,如果检测到,它将建议使用分析器指定的代码修复。例如,其中一个分析器标识为空单一行为方法,例如开始(),并建议删除该方法以提高代码效率。在Visual Studio中显示Unity重构的动画

示例:创建新分析器

在实习期间,我创建了各种分析器来检测不同的代码模式。我将浏览我最近添加的一个分析程序,该分析程序用于分解过程,并在此过程中提供提示。

确定问题和解决方案

我添加的一个分析器来自社区建议在GitHub存储库中。它通过最小化Unity类“transform”的访问次数来提高代码性能。目标是替换代码分配,例如:

transform.position=新位置;transform.rrotation=新旋转;

具有:

转换。设置位置和旋转(newPosition,newRotation);

项目设置

项目存储库提供了一个易于遵循的自述文件设置项目。下载适当的包后,通过以下部分标题为新分析器生成文件:“创建新分析器”。所需要的只是一个描述性的标题,在这个例子中,我命名了分析器设置位置和旋转.

检测代码模式

一旦创建了新的分析器,我发现在测试文件中创建几个测试用例是最容易的。这确保了分析器找到了通用模式,而不是单个特定案例。接下来,我想创建一个能够检测问题中标识的代码模式的方法。对于这个示例,我查找了两条指定了新位置和新旋转的连续线。

Windows中的Visual Studio提供了一个称为语法可视化工具。该窗口允许用户打开任何C#代码文件,并检查从类声明到方法操作的当前工作树。要查找此窗口,请转到查看/其他窗口/语法可视化工具。下面是可视化工具中显示的语法树的示例。

显示Visual Studio中语法树的屏幕截图

基于语法树,我需要检测赋值表达式的两个后续表达式语句,其中一个访问变换的位置属性,另一个访问旋转属性。我通过运行测试用例并检查意外的诊断错误来测试代码模式的分析。

建议代码修复

语法可视化器同样可以用于理解目标表达式的语法。我首先使用适当的语法构造新行,并能够替换和删除最初检测到的节点。这方面的代码可以在下面看到,并可以在分析仪的GitHub上的文件.

var调用=调用表达式(成员访问表达式(句法类型。SimpleMemberAccessExpression,baseExpression,标识符名称(“设置位置和旋转”).WithArgumentList(argList).有领先的琐事(琐事);var documentEditor=等待documentEditor。CreateAsync(document,cancellationToken);文档编辑器。RemoveNode(assignmentExpression.Parent,SyntaxRemoveOptions.KeepNoTrivia);文档编辑器。ReplaceNode(nextAssignmentExpression,调用);return documentEditor。获取更改文档();

当代码修复正确完成时,所有测试用例都应该通过。

提交拉取请求

在完成这些步骤并添加文档之后,分析器就可以进行检查并合并到代码库中了。提交拉请求并检查最终分析仪。这里有一个链接到我的公关,以及下面的设置位置和旋转分析器的示例。

显示Visual Studio中正在使用的已完成重构的屏幕截图。

为项目做出贡献

在过去的几周里,我真的很喜欢与这个团队一起进行微软Unity分析器项目。即使在Unity和C#方面知识有限,我也很快适应了环境,并开始创建新的分析器和抑制器。对于具有不同编码背景的人来说,这是一个非常独立的项目。如果你想了解更多关于VisualStudio和Unity的信息,或者想为开源项目做贡献,那么创建一个分析器需要一个低门槛,才能产生高影响。在这个过程中我学到了很多,我想特别感谢我的经理JB Evain和团队其他成员对我的支持。我相信他们会感谢您的建议和公关意见,以继续改善Unity的开发人员体验。

访问GitHub存储库开始吧!

1条评论

讨论结束。登录以编辑/删除现有评论。

  • Reyhoon设计 0

    我经常阅读客人的帖子,他们有非常有用的信息,谢谢

    https://deochoob.com/

反馈usabilla图标