Наша команда разработки инструментов Visual Studio для Unity видит свою миссию в повышении производительности разработчиков Unity. В Visual Studio 2019 коллеги представили инструменты Unity, набор диагностик и исправлений кода, специфичный для Unity. Сегодня мы рады анонсировать, что Unity Analyzers стали Open Source. Подробности под катом.
![](https://habrastorage.org/r/w1560/webt/hb/pd/ts/hbpdtskz4jt1_cxmarbdmlvskem.png)
Visual Studio и Visual Studio для Mac связаны с Roslyn, нашей инфраструктурой компилятора, чтобы обеспечить фантастический опыт программирования на C#. Одна из любимых функций Roslyn — это возможность программно подсказывать разработчикам при использовании API. В основе этого опыта анализатор обнаруживает шаблон кода и может предложить заменить его более рекомендуемым шаблоном.
Типичным примером, характерным для Unity API, является сравнение тегов на игровых объектах. Вы могли бы написать
Чтобы сравнить теги
![](https://habrastorage.org/r/w1560/webt/sq/xl/3k/sqxl3kinbxt5gnbbf5fgo5fz-n8.png)
Но Unity предлагает метод CompareTag, который является более эффективным, поэтому мы внедрили диагностику CompareTag, которая обнаружит этот шаблон и предложит использовать вместо этого более оптимизированный метод. В Windows просто нажмите (CTRL+.) Или нажмите (Alt-Enter) в Visual Studio для Mac, чтобы активировать быстрые фиксы, и вам будет предложен предварительный просмотр изменения:
![](https://habrastorage.org/r/w1560/webt/uj/ov/sx/ujovsxzickvzfvjzfzskfqz6lly.png)
В настоящее время у нас есть дюжина анализаторов, которые находятся в инструментах для Unity, и еще больше создается прямо сейчас.
Недавно команда Roslyn представила анализаторы-подавители. Эта функция позволяет нам программно подавлять набор анализаторов по умолчанию, который поставляется Roslyn.
Это отлично для разработчиков Unity, потому что позволяет нашей команде Tools for Unity удалять предупреждения или предложения по исправлению кода, которые не относятся к разработке Unity.
Типичным примером являются поля, украшенные атрибутами Unity SerializeField, для подсветки полей в Unity Inspector. Например, без анализаторов Unity Visual Studio предложит сделать сериализованное поле доступным только для чтения, в то время как мы знаем, что механизм Unity устанавливает значение этого поля. Если бы вы приняли это исправление кода, Unity удалила бы любую связь, которую вы установили в Инспекторе для этого поля, что могло бы все сломать. Написав подавитель, мы можем программно подавить это поведение, оставив его включенным для стандартных полей C#.
Сегодня Unity Analyzers поставляются как часть Инструментов для Unity и включены в Visual Studio и Visual Studio для Mac. Анализаторы работают в Visual Studio. Это означает, что если вы подавите предупреждение, вы все равно сможете увидеть его в списке ошибок Unity. Мы работаем над улучшением этого для будущего выпуска.
У команды Tools for Unity есть бэклог анализаторов, исправлений кода и подавителей, над которыми мы работаем, но мы всегда ищем новые анализаторы, которые улучшат опыт программирования на C# для разработчиков Unity. Проекту легко помочь. Просто зайдите в наш README и предложите новый анализатор или даже отправьте запрос в репозитории.
До встречи на GitHub!
![](https://habrastorage.org/webt/hb/pd/ts/hbpdtskz4jt1_cxmarbdmlvskem.png)
Unity Analyzers
Visual Studio и Visual Studio для Mac связаны с Roslyn, нашей инфраструктурой компилятора, чтобы обеспечить фантастический опыт программирования на C#. Одна из любимых функций Roslyn — это возможность программно подсказывать разработчикам при использовании API. В основе этого опыта анализатор обнаруживает шаблон кода и может предложить заменить его более рекомендуемым шаблоном.
Типичным примером, характерным для Unity API, является сравнение тегов на игровых объектах. Вы могли бы написать
collision.gameObject.tag == "enemy";
Чтобы сравнить теги
![](https://habrastorage.org/webt/sq/xl/3k/sqxl3kinbxt5gnbbf5fgo5fz-n8.png)
Но Unity предлагает метод CompareTag, который является более эффективным, поэтому мы внедрили диагностику CompareTag, которая обнаружит этот шаблон и предложит использовать вместо этого более оптимизированный метод. В Windows просто нажмите (CTRL+.) Или нажмите (Alt-Enter) в Visual Studio для Mac, чтобы активировать быстрые фиксы, и вам будет предложен предварительный просмотр изменения:
![](https://habrastorage.org/webt/uj/ov/sx/ujovsxzickvzfvjzfzskfqz6lly.png)
В настоящее время у нас есть дюжина анализаторов, которые находятся в инструментах для Unity, и еще больше создается прямо сейчас.
Улучшение опыта по умолчанию
Недавно команда Roslyn представила анализаторы-подавители. Эта функция позволяет нам программно подавлять набор анализаторов по умолчанию, который поставляется Roslyn.
Это отлично для разработчиков Unity, потому что позволяет нашей команде Tools for Unity удалять предупреждения или предложения по исправлению кода, которые не относятся к разработке Unity.
Типичным примером являются поля, украшенные атрибутами Unity SerializeField, для подсветки полей в Unity Inspector. Например, без анализаторов Unity Visual Studio предложит сделать сериализованное поле доступным только для чтения, в то время как мы знаем, что механизм Unity устанавливает значение этого поля. Если бы вы приняли это исправление кода, Unity удалила бы любую связь, которую вы установили в Инспекторе для этого поля, что могло бы все сломать. Написав подавитель, мы можем программно подавить это поведение, оставив его включенным для стандартных полей C#.
Уже доступно
Сегодня Unity Analyzers поставляются как часть Инструментов для Unity и включены в Visual Studio и Visual Studio для Mac. Анализаторы работают в Visual Studio. Это означает, что если вы подавите предупреждение, вы все равно сможете увидеть его в списке ошибок Unity. Мы работаем над улучшением этого для будущего выпуска.
Делитесь своими лайфхаками
У команды Tools for Unity есть бэклог анализаторов, исправлений кода и подавителей, над которыми мы работаем, но мы всегда ищем новые анализаторы, которые улучшат опыт программирования на C# для разработчиков Unity. Проекту легко помочь. Просто зайдите в наш README и предложите новый анализатор или даже отправьте запрос в репозитории.
До встречи на GitHub!