company_banner

Доступна для скачивания ранняя версия ReSharper 9

    Как многие могли заметить, в мире .NET сейчас происходят значительные изменения. Появление Roslyn, C# 6, ASP.NET vNext, Visual Studio «14» и других технологий вдохновляют ReSharper на новые шаги в своем развитии и поддержке различных языков и платформ.

    В связи с этим мы приглашаем всех присоединиться к программе раннего доступа для ReSharper 9. В этом посте мы обсудим основные фичи новой версии.

    TL;DR в ReSharper 9 добавлена поддержка VS «14», C# 6 и регулярных выражений, улучшена поддержка JS/TS и глобальных изменений (bulk fixes), добавлен новый редактор для форматирования кода и новые возможности навигации, а также все наши .NET продукты переезжают на новую общую платформу.


    Поддержка C# 6


    Мы уже публиковали обзорный блог-пост о поддержке C# 6, так что вот список тех вещей, которые на текущий момент поддерживает ReSharper 9 (мы помним, что C# 6 еще не зарелизился, и конечный фичесет пока что тяжело угадать):

    • Поддержка оператора условного доступа (?.) дает нам возможность писать цепные null-проверки (также известные как монада Maybe). ReSharper не только знаком с этой новой конструкцией, но также поможет вам безболезненно обновить ваш код, заменив или удалив ненужные проверки на null.
    • Поддержка членов класса, написанных через выражения (expression-bodied members) упрощает процесс создания элементов, основанных на простых однострочных выражениях. Решарпер предоставляет возможность использовать этот новый конструкт, а также поможет трансформировать большие куски уже написанного кода с учетом этой новой парадигмы.
    • Автосвойства получили новые возможности по инициализации, а также возможность автоматически удалять приватные сеттеры, и тем самым получать действительно немутабельные автосвойства.
    • Поддержка статических using-ов (наконец-то можно писать Sin вместо Math.Sin), фильтров для исключений и других новых конструкций C# 6.

    Глобальные действия и Fix in Scope


    В ReSharper 9 расширен механизм глобальных изменений (Fix in Scope), для того, чтобы обширные изменения больших объемов кода проходили легче и проще. В число улучшений вошли:

    • Bulk Import (механизм массового импорта) гарантирует, что импортировав большой кусок кода, ReSharper пройдется по вставленному коду и добавит нужные директивы импорта для всех типов и элементов – включая методы расширения.
    • Redundant code removal (удаление лишнего кода) теперь существует как отдельная опция, так что если вы стоите курсором на лишнем квалификаторе this., с этого места можно как удалить квалификаторы this. глобально (в рамках файла/папки/проекта/решения), так и удалить все лишние элементы (не только this. но и лишние using директивы, и т.п.) в аналогичных диапазонах применения.
    • Глобальные изменения для имен позволяют вам быстро импортировать чужой код и массово изменить стили именования методов, полей и т.д. по своему вкусу.
    • Move to File/Namespace (механизм перемещения кода в другой файл или namespace) теперь гарантирует правильную обработку файлов, содержащих несколько объявлений классов.
    • Удаление регионов — еще одно глобальное действие, которое дает возможность удалить все использования регионов в рамках файла, проекта или solution.

    Улучшения в навигации


    Изменения в навигации включают в себя:

    • Универсальный Go to Action — теперь шорткат Alt+Enter предоставляет список общих действий, а также возможность поиска по всем action'ам.
    • Navigate to Exposing API — новая опция навигации, которая позволяет искать все методы, способные вернуть определенный тип.
    • Assembly Explorer теперь еще более тесно интегрирован с Решарпером. Он получил собственные возможности навигации в меню Navigate To а также в студийном Solution Explorer.
    • Механизм Go to Type теперь помогает при навигации на дженериках, так что если вы стоите на переменной типа List<Foo>, он предложит вам навигироваться либо на List<T> либо на Foo.
    • Find Usages (поиск использования символа) теперь имеет настройку для использования студийной вкладки предпросмотра (Preview Tab), а также больше не блокирует UI при длительном поиске.
    • Окошко Find Results больше не плодит вкладки при поиске одного и того же элемента, и, наконец, можно фильтровать элементы в результирующем списке.

    Настройки Code Style


    В 9ке появились следующие настройки:

    • Настройки использования var — их теперь 3 штуки (для встроенных типов, простых типов и всех остальных). Это позволяет более точно контролировать, как и где появляются связанные с var подсказки и варианты коррекции.
    • Instance member qualification — настройка отвечает за то, к каким членам класса применим квалификатор this.
    • Static member qualification контролирует, как мы обращаемся к статическим членам класса: либо через имя класса где элемент объявлен, либо через текущий класс.
    • Все три предыдущие настройки доступны как элементы настройки профиля в механизме Code Cleanup.
    • Наконец, для контроля за раскладкой элементов в файле, мы полностью переписали старый XML редактор и вместо него встроили новый визуальный интерфейс.

    Поддержка регулярных выражений


    ReSharper научился работать с регулярными выражениями, так что теперь вам больше не понадобятся сторонние программы. Вот что он умеет:

    • Подсветка синтаксиса доступна для регулярных выражений, включая частичную подсветку строк для индикации ошибок.
    • Автодополнение кода упрощает процесс выбора разных подстановок. Также появилось автодополнение для именованных групп!
    • Escaping Quick-Fix позволяет быстро заменять символы \, используемые для подстановок, на валидные в C# с использованием verbatim строк (строки, начинающиеся с @).
    • Отдельная валидационная утилита позволяет быстро проверить тестовые варианты ввода на соответствие регулярному выражению и разобрать их на совпадения и группы.
    • Конверсия в прекомпилированные выражения позволяет вам улучшить производительность путем переноса обычных регулярных выражений в статические инстансы Regex.

    Улучшения в поддержке TypeScript и JavaScript


    Вот несколько улучшений в поддержке TypeScript:

    • Новые инспекции и возможности коррекции покрывают более 270 различных ошибок.
    • Новые рефакторинги включают в себя Introduce Field, Copy Type, Move Refactorings (перемещение кода в модуль/файл, перемещение в соответствующие файлы, перемещение в папку), Rename File, а также механизм импорта типов для вставленного кода.
    • Кодогенерация для TypeScript поддерживает автоматическую реализацию интерфейса/генерацию недостающих элементов, а также генерацию конструкторов и перекрывающих (overriding) элементов.
    • Механизм live templates поддерживает два новых диапазона использования (scope) — Module Member и Type Member. ReSharper также поставляет несколько своих TypeScript шаблонов для генерации классов, enum-ов, интерфейсов и модулей.
    • Parameter Info для TypeScript теперь поддерживает не только аргументы функций, но также аргументы типов.
    • Появилась поддержка специализированных сигнатур (specialized signatures).

    Помимо этого, ReSharper предоставляет механизм автоматической конвертации кода из JavaScript в TypeScript, а также раннюю поддержку ASP.NET vNext.

    Унифицированный инсталлятор


    Мы планируем предоставить пользователям один унифицированных инсталлятор для всех наших .NET продуктов (ReSharper, dotTrace, dotMemory, dotCover и dotPeek). В процессе инсталляции можно выбрать, что именно вы хотите установить. Также, все наши продукты теперь используют одну общую платформу, что экономит ресурсы компьютера, когда несколько наших приложений работают одновременно.

    Прошу заметить, что первая сборка ЕАР, которую мы выложили, пока что дает возможность установить только сам ReSharper. Также, она удаляет предыдущие версии ReSharper’а и других наших .NET инструментов; VS 2005 и 2008 тоже пока не поддерживаются (но мы обязательно поддержим их чуть позднее).

    И еще несколько улучшений


    Вот еще несколько новых или улучшенных фич:

    • Поддержка VS 14
    • Возможность частичного отключения подсистем ReSharper’a — теперь отключать поддержку разных функций R# стало проще. Из тех возможностей, что можно отключить — поддержка unit-тестирования, MsBuild/NAnt, CSS, JavaScript, TypeScript а также Internationalization.
    • Отладка декомпилированного кода теперь доступна и в ReSharper. Конечно, для этих целей можно пользоваться нашим бесплатным декомпилятором dotPeek.
    • Архитектурный инструментарий ReSharper’a теперь поддерживает возможность генерации диаграмм зависимости между типами. Эта форма визуализации помогает понять, какой код зависит от определенного типа, и от чего зависит сам тип. Эта диаграмма интегрирована и с другими инструментами R#.

    В этом посте я описал основные нововведения, доступные в первой ЕАР сборке — мы, конечно же, будем добавлять новые фичи по мере их готовности. А пока приглашаем всех желающих скачать EAP и самим оценить новые возможности.

    Нам интересно ваше мнение, поэтому не стесняйтесь писать нам о своих наблюдениях (тут, или в наш баг трекер). Спасибо! ■
    JetBrains
    136.76
    Делаем эффективные инструменты для разработчиков
    Share post

    Comments 61

      +1
      Добрый день,

      Интересные возможности, скажите а более плотной поддержки web-клиентской части не предвидится(там less, coffee, jshint etc)?
        0
        Добрый день! В текущей версии подобных фич мы, к сожалению, не планируем.
          0
          на самом деле мы поддержали достаточно большую часть инспекций из jshint, а также все статические ошибки strict mode (кроме тех, которые можно отследить только в рантайме). Думаю, по этому поводу еще будет отдельная статья.
          Качайте 9ю версию и пробуйте :)
          0
          Здорово, уже не терпится попробовать!
            0
            Пробуйте на здоровье! Если есть какие-то проблемы, то не стесняйтесь обращаться к нам в саппорт: resharper-support.jetbrains.com/
            0
            Подскажите, а тот баг про «Floating tab wells бла-бла-бла...» Исправили в новой версии Решарпера/Студии? Я уже джва года жду.
              0
              Если вы об этом — youtrack.jetbrains.com/issue/RSRP-335147 — то, к сожалению, мы ничего не можем с этим сделать (пока что). Проблема кроется на стороне Студии, вызывая огромные проблемы с фокусом и кареткой. Извините за неудобства :-(
                0
                Да, об этом. Надеюсь они исправят это в студии. А как можно проголосовать за этот баг на connect? Есть MSDN подписка, если она дает больше прав.
            0
            Спасибо. Установщик красивый.

            Предупреждение implicit 'any' type для тайпскрипта какое-то бешеное. :) Смотрите сколько ложных срабатываний после включения:
            implicit 'any'
            interface A {
                func: (arg: string) => void;
            }
            interface ICall {
                (arg: string): void;
            }
            var obj = {};
            var key = "key";
            
            // здесь вообще какое-то непонятное сообщение выдаёт
            obj[key] = null; // implicit 'any' ?
            obj['key2'] = null; // implicit 'any' ?
            var dummy = obj[key]; // implicit 'any' ?
            var dummy = obj['key2']; // implicit 'any' ?
            
            var f: ICall = a => alert(a); // OK
            var f: ICall = (a) => alert(a); // implicit 'any' ?
            
            var c: A = null; // implicit 'any' ?
            
            var array: A[] = []; // implicit 'any' ?
            
            var a: A = {
                func: function(a) { alert(a) } // implicit 'any' ?
            };
            
              +1
              Большое спасибо, мы уже открыли Show Stopper на это: youtrack.jetbrains.com/issue/RSRP-425999
                0
                А чем obj[key] не понравился? Вот в такой связке тоже выдаёт невнятное, аж два раза:
                код
                interface A {
                    func: (arg: string) => void;
                }
                
                var a: A = { func: null };
                a['func'] = null;
                  0
                  obj[key] не нравится тем, что если нет индексера, то тип результата 'any'.

                  К слову, в свойствах проекта (если vs2013 и выше) можно указать соответствующую компиляторную опцию, и посмотреть, где мы не совпадаем.
                    0
                    Visual Studio не выдаёт в таком случае ошибок.
                    Скриншот
                    Код почти из моего предыдущего комментария.
                      +1
                      Ага, спасибо, проблема понятна! Будет исправлено.
              +4
              Ну где я еще могу сказать вам СПАСИБО, только здесь!
                +1
                Пожалуйста :)
                0
                Неужели в 6м шарпе таки добавят ?. Счастье то какое!
                  +1
                  Ну если честно сейчас фичи C#6 непоределены — мы делаем поддержку, а они фичу отменяют :( но что поделать…
                    0
                    В шестом шарпе хлам по большей части. Делают на скорую руку мелкие фичи, которые все давно выпрашивают. Даже основные конструкторы и объявления как выражения выпилили.

                    Я седьмую версию с гораздо бОльшим интересом жду. Планируются паттерн матчинг, записи и прочие штуки, которые реально изменят жизнь.
                      0
                      А можно пруф про паттерн матчинг?
                        +1
                        Дык вовсю обсуждения на Roslyn CodePlex идут. Разрабы не только заопенсорсили компилятор, но теперь ещё и активно общаются с сообществом. Про паттерн матчинг (также смотрите другие темы, их тьму наплодили).
                        0
                        Вы забываете, что в этом релизе фокус на рослин. Компилятор-как-сервис это очень и очень круто.
                          +1
                          Пока непонятно. Рефакторинг, на котором ставится такой большой акцент, уже есть в Решарпере, и Студия его никогда не догонит (и не собирается). Решарпер на Рослин переходить не собирается, потому что у ДжетБрейнс свой движок оптимизирован под их потребности. Зоопарк «однофичевых» плагинов на базе Рослин погоды не сделает. Метапрограммированием тоже занимались и до Рослин, и никому отсутствие компилятора-как-сервиса не мешало. ПостШарп видит Рослин как возможность добавить каплю автодополнения кода, не больше.

                          То есть как это повлияет на мою ближайшую жизнь — неясно. Скорее всего, никак. Для меня самый большой плюс в новом компиляторе — это что становится возможным C# 7 с реально прорывными фичами, и разработчики языка становятся более эффективны.
                      +4
                      Удаление регионов — еще одно глобальное действие, которое дает возможность удалить все использования регионов в рамках файла, проекта или solution.

                      да детка!
                        +2
                        А чем регионы всем так насолили? Вижу много где радость по этому поводу, но смысл от меня ускользает
                          +3
                          Основная проблема от тех «высокоактивных» программистов которые любят даже самый маленький класс автоматом поразбивать на «свойства», «поля», «методы» — и все в своем регионе. А вообще считается что если у вас столько кода что его нужно бить на регионы, более правильно разбивать его на отдельный классы и методы.

                          Это все дело вкуса, конечно же.
                        0
                        Ещё что-то вроде регрессии:
                        До версии 9 решарпер предлагал заменить явный тип переменной на var. Теперь этого рефакторинга нет, только новый «Insert full qualification». Новый полезен, но хотелось бы либо вернуть замену explicit type -> var, либо получить замену на выведенный тип (аналогично комбинации explicit type -> var -> explicit type из предыдущих версий R#). Чтобы из вот такой строки:
                        IEnumerable<string> strings = new string[] { "a", "b" };
                        Получить такую:
                        string[] strings = new string[] { "a", "b" };
                        Скриншот
                        Курсор перед I.
                        0
                        Вопрос по C++ и С++/CLI. Они будут отдельным продуктом? Не вижу в списке поддерживаемых фич
                          0
                          Да, ReSharper C++ будет отдельным продуктом, возможность установить его EAP-версию из общего инсталлятора добавим в ближайшее время.
                            0
                            Эээххх… И сверху- доплата? Это получается что если мне надо делать костыли на C++/CLI к C#, то мне надо покупать лицензию на C++? Это странно, товарищи =) Те, кто пишет на C++ не пишут на C# — это факт. Однако, те кто пишет на C++/CLI, пишут на C# и не факт — на C++. Потому объединять их, ИМХО, грешно'с
                              0
                              Нет, почему же. Если нужно писать на С++ немного, можно просто использовать студийные фичи, и всё.
                                0
                                Насчет объединения продуктов в эдишены появится больше ясности ближе к релизу, так что рискну предложить вернуться к этому обсуждению немного позже )
                                  0
                                  Кстати, CLI пока что не поддерживается в ReSharper C++ (http://www.jetbrains.com/resharper/features/cpp.html)
                                    0
                                    Было б что объединять, учитывая отсутствие поддержки… Если уж на то пошло, то от решарпера для C# я бы ожидал базовой поддержки C++/CLI, банально чтобы код красным не светился. Если нужны рефакторинг, анализ и прочие толстые фичи — покупка поддержки языка выглядит логично.
                                      0
                                      Согласен. Вот так было бы не плохо.
                                        0
                                        Это очень сложно с организационной точки зрения. Нельзя просто взять и поддержать C++/CLI не поддерживая C++ как такогой. Это нонсенс. А код светиться красным и не будет. Просто присутствия Решарпера там не будет как такогого (на С++ стороне, конечно же).
                                          0
                                          у вас же фильтрация по guid проектов
                                            0
                                            А, вы предлагаете просто отключить поддержку в проектах где нет флага /clr, так? Ну может это и можно сделать. Только все равно как-то это странно и непонятно.
                                0
                                Чтобы реализовать поддержку typescript — вам же получается пришлось реализовать почти весь typescript еще раз?
                                  0
                                  именно так, только наша реализация работает в десятки раз быстрее :)
                                    0
                                    за исключением кодогенератора
                                  0
                                  Ребята, спасибо вам за R#, очень быстро привыкаешь, удобно.
                                  В компании проводили опрос на тему — «А не избавиться ли нам от R#?» в итоге бОльшая часть проголосовало против, то есть ваш продукт помогает, реально помогает.

                                  Хотелось бы увидеть быстрые (видео, мануалы) гайды по использованию, возможно самые топовые фичи.
                                  Может они конечно же и есть (каюсь, не искал), но если есть, то сделать так, чтобы их легко было увидеть (к примеру в Help меню добавить — «How to»).

                                  Спасибо %)
                                  0
                                  Вот бы увидеть поддержку axml (Xamarin.Android) и XAML (Xamarin.Forms).
                                    +1
                                    Глобальные действия — это круто! Джва года ждал!

                                    ReSharper научился работать с регулярными выражениями, так что теперь вам больше не понадобятся сторонние программы.

                                    Я очень надеюсь, что эта фича будет доступна как атрибут для аргумента из JetBrains.Annotations, а не будет прибита гвоздями к методам Regex. Например, у меня extension-методы для работы с регулярками.

                                    Кстати об атрибутах. До сих пор мечтаю о поддержке атрибутов для MarkupExtension. Понятно, что WPF — уже не в тренде, да и голосов кот наплакал, но всё же хочется…
                                      0
                                      В текущей версии прибит гвоздями. Однако есть возможность превращать абсолютно любую строку в регулярку. Использование аннотаций планируется, если успеем, то в 9.0. В 9.1 точно.
                                      0
                                      Отлично. Так как EAP, то не буду спрашивать про производительность. Но очень интересует если есть или планируются какие-либо улучшения с работой в MVC проектах?
                                      Просто меня очень мучает некорректное распознавание Views с кастомными AspMvcLocationFormats, да и тикет висит уже с прошлой EAP.
                                        0
                                        Можно, пожалуйста, номер тикета? С кастомными AspMvcLocationFormats решарпер умеет работать, но есть ньюансы, как они задаются в программе (т.е.сможет ли он задетектить).
                                          0
                                          Номер репорта 6730. Тикет youtrack.jetbrains.com/issue/RSRP-406166

                                          R# умеет с ними работать, но у меня так и не вышло сделать так, чтобы он находил мои Area Partial Views и Views, например:

                                          [assembly: AspMvcAreaViewLocationFormat(@"~\MVC\Areas\{2}\Views\{1}\{0}.cshtml")] [assembly: AspMvcAreaPartialViewLocationFormat(@"~\MVC\Areas\{2}\Views\Shared\{0}.cshtml")].

                                          Не в тему, но для 9 EAP лицензия на 8ую версию уже не годится?
                                            0
                                            Для EAP лицензия не нужна. Для релиза 9-ки лицензия от 8 подойдёт если она была куплена с подпиской и она на момент выхода 9-ки не истечёт.
                                              0
                                              У меня не вышло ввести старую лицензию, на пока взял 30-дневный трайал:
                                              0
                                              Что касается проблемы — то там больше загвоздка в Area, а не кастомных форматах…
                                                0
                                                Ну так я и говорю, area views в нашем проекте так и не удалось настроить. И очень не хватает распознавания views из других проектов в одном solution. В остальном очень радует как R# работает с MVC, в особенности attribute system. Планируются ли какие-нибудь улучшения в этом направлении?
                                          0
                                          Планируется ли улучшение поддержки WPF + XAML, если можно так выразиться?
                                            +1
                                            Конечно планируется =) А что именно интересует?

                                          Only users with full accounts can post comments. Log in, please.