Как изменить порядок членов с помощью Resharper?
Типичный сценарий: класс, над которым работало много людей. Я хотел бы отсортировать методы, свойства и т. Д. В алфавитном порядке.
Я хотел бы быть в состоянии сделать это в регионе или во всем мире в классе.
Я вижу функцию в Resharper, чтобы сделать это, но, похоже, ничего не делает.
8 ответов
Используйте функцию "Код очистки".
Порядок членов может быть установлен в опциях ReSharper в Языки, C#, Тип Члены Макет. Это хорошо документированная спецификация макета XML, которую ReSharper использует при переупорядочении членов.
Сортировка не активирована по умолчанию. Вы можете активировать его, открыв параметры резарпера, а затем перейдите сюда:
В интересах людей, таких как я, которые нашли ответ на этот вопрос в веб-поиске, но обнаружили, что детали вопроса не совсем то, что они ожидали, вы можете знать, что вы можете перемещать отдельных членов вверх и вниз внутри файл, удерживая нажатой клавишу Ctrl-Alt-Shift, а затем нажимая стрелки вверх или вниз.
(Очевидно, что это не автоматическое расположение в алфавитном порядке, которое запрашивается в основной части вопроса, но это был ответ, который я надеялся найти для вопроса в названии.)
Альтернативой для рассмотрения является Regionerate. Мы используем и любим ReSharper, но Regionerate соответствует нашим потребностям в создании регионов и сортировке / перестановке членов. И все это настраиваемо, конечно.
ОБНОВЛЕНИЕ: вместо этого мы начали использовать Очистку кода от ReSharper.
Две вещи: существует известное (но не сильно документированное) условие, когда условия предварительной компиляции (например, #if DEBUG) остановят переупорядочение членов типа. http://youtrack.jetbrains.com/issue/RSRP-336643 Другими словами, если у вас есть #IF DEBUG, он не будет переупорядочен.
Я также недавно заметил, что в ReSharper 8.0.1 (и, возможно, в более ранних версиях), что кнопка для возврата шаблона XML обратно в DEFAULT WITH REGIONS на самом деле не имеет никаких операторов для включения группировки #REGION. Поэтому я взял дружественный шаблону StyleCop, который включает в себя сортировку и добавил #REGION-ing для каждого члена типа. Если вы выберете CUSTOM TEMPLATE, вставьте этот XML, он должен работать.
<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns">
<!-- Do not reorder COM interfaces -->
<Pattern>
<Match>
<And Weight="100">
<Kind Is="interface" />
<HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute" />
</And>
</Match>
</Pattern>
<!-- Special formatting of NUnit test fixture -->
<Pattern RemoveAllRegions="true">
<Match>
<And Weight="100">
<Kind Is="class" />
<HasAttribute CLRName="NUnit.Framework.TestFixtureAttribute" Inherit="true" />
</And>
</Match>
<!-- Setup/Teardow -->
<Entry>
<Match>
<And>
<Kind Is="method" />
<Or>
<HasAttribute CLRName="NUnit.Framework.SetUpAttribute" Inherit="true" />
<HasAttribute CLRName="NUnit.Framework.TearDownAttribute" Inherit="true" />
<HasAttribute CLRName="NUnit.Framework.FixtureSetUpAttribute" Inherit="true" />
<HasAttribute CLRName="NUnit.Framework.FixtureTearDownAttribute" Inherit="true" />
</Or>
</And>
</Match>
</Entry>
<!-- All other members -->
<Entry />
<!-- Test methods -->
<Entry>
<Match>
<And Weight="100">
<Kind Is="method" />
<HasAttribute CLRName="NUnit.Framework.TestAttribute" Inherit="false" />
</And>
</Match>
<Sort>
<Name />
</Sort>
</Entry>
</Pattern>
<!-- Default pattern -->
<Pattern RemoveAllRegions="false">
<!-- Delegates -->
<Entry>
<Match>
<And Weight="100">
<Access Is="public" />
<Kind Is="delegate" />
</And>
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Name />
</Sort>
<Group Region="Delegates" />
</Entry>
<!-- Fields and constants -->
<Entry>
<Match>
<Or>
<Kind Is="field" />
<Kind Is="constant" />
</Or>
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Kind Order="constant" />
<Readonly />
<Static />
<Name />
</Sort>
<Group Region="Fields" />
</Entry>
<!-- Enums -->
<Entry>
<Match>
<Kind Is="enum" />
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Name />
</Sort>
<Group Region="Enums" />
</Entry>
<!-- Constructors. Place static one first -->
<Entry>
<Match>
<Kind Is="constructor" />
</Match>
<Sort>
<Static />
<Access Order="public internal protected-internal protected private" />
</Sort>
<Group Region="Constructors" />
</Entry>
<!-- Destructors. Place static one first -->
<Entry>
<Match>
<Kind Is="destructor" />
</Match>
<Sort>
<Static />
<Access Order="public internal protected-internal protected private" />
</Sort>
<Group Region="Destructors" />
</Entry>
<!-- Events -->
<Entry>
<Match>
<Kind Is="event" />
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Name />
</Sort>
<Group Region="Events" />
</Entry>
<!-- Properties -->
<Entry>
<Match>
<And>
<Kind Is="property" />
<Not>
<Kind Is="indexer" />
</Not>
</And>
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Static />
<Abstract />
<Virtual />
<Override />
<Name />
</Sort>
<Group Region="Properties" />
</Entry>
<!-- Indexers -->
<Entry>
<Match>
<Kind Is="indexer" />
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Static />
<Abstract />
<Virtual />
<Override />
<Name />
</Sort>
<Group Region="Indexers" />
</Entry>
<!-- Methods -->
<Entry>
<Match>
<And>
<Or>
<Kind Is="method" />
<Kind Is="operator" />
<HandlesEvent />
</Or>
<Not>
<Kind Is="destructor" />
</Not>
</And>
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Static />
<Abstract />
<Virtual />
<Override />
<Name />
</Sort>
<Group Region="Methods" />
</Entry>
<!-- all other members -->
<Entry />
<!-- nested types -->
<Entry>
<Match>
<Kind Is="type" />
</Match>
<Sort>
<Access Order="public internal protected-internal protected private" />
<Static />
<Abstract />
<Virtual />
<Override />
<Name />
</Sort>
<Group Region="Nested Types" />
</Entry>
</Pattern>
Ответ jgauffin близок, но я обнаружил, что (с R# 2017) для изменения порядка свойств мне нужно было щелкнуть опцию 'XAML' в заголовке диалога File Layout и изменить
<Entry DisplayName="Properties, Indexers">
<Entry.Match>
<Or>
<Kind Is="Property" />
<Kind Is="Indexer" />
</Or>
</Entry.Match>
</Entry>
в
<Entry DisplayName="Properties, Indexers">
<Entry.Match>
<Or>
<Kind Is="Property" />
<Kind Is="Indexer" />
</Or>
</Entry.Match>
<Entry.SortBy>
<Name />
</Entry.SortBy>
</Entry>
Свойство Sort By было пустым и доступно только для чтения, что имеет смысл, поскольку оно используется только для элементов с одинаковыми именами (а все свойства должны иметь уникальные имена)
Если вы переупорядочиваете параметры для определенных методов, вы можете использовать Refactor > Change Signature, если ваш курсор находится на имени метода. Я использую ярлыки IntelliJ, поэтому для меня команда Ctrl+Shift+R, а затем Ctrl+F6.
После этого появится диалоговое окно, в котором вы сможете изменить параметры метода. Он даже будет рефакторинг любых реализаций интерфейса.
Из меню Visual Studio;
ReSharper> Параметры> Среда> IntelliSense > Поведение при завершении> Сортировать элементы (по алфавиту)