LazowskiAnton · Extensions

TidySmith

Код C# в том порядке, который нужен вашей команде: члены отсортированы и сгруппированы, с предпросмотром и одной отменой; регионы по вашим правилам; комментарии перенесены по длине строки — а серые точки в редакторе показывают, где можно навести порядок.

Бесплатно · Visual Studio 2022 и 2026 · 14 языков интерфейса · без телеметрии

Зачем TidySmith

Класс до и после Order Members: сначала константы и поля, затем конструктор, свойства и методы

Безопасно по устройству

Работает на синтаксическом дереве Roslyn: члены перемещаются вместе со своими комментариями, документацией и атрибутами; границы блоков #if и #region никогда не пересекаются; классы, которые нельзя безопасно упорядочить, не трогаются. Сначала предпросмотр показывает изменения, а «Применить» отменяется одним действием.

Порядок вашей команды

Порядок групп, доступ, статические члены, имена — задайте их на странице параметров или запишите в .editorconfig, и у всех получится одинаковый результат. Предустановки для StyleCop и CodeMaid уже встроены.

Понятно без инструкции

Серые точки под классом с нарушенным порядком или под слишком длинным комментарием; Ctrl+. предлагает исправление рядом с действиями Visual Studio. Когда освоите команды, подсказки можно выключить.

Бесплатно и без подвохов

Без подписок, без «pro»-версии, без сбора данных и без сообщений в окне «Вывод» или при запуске. Единственное, о чём мы когда-нибудь попросим, — после того как вы им немного попользуетесь, — поставить оценку в Marketplace. Работает в Visual Studio 2022 и 2026, x64 и ARM64.

Возможности

Все команды находятся в меню Правка › TidySmith и в контекстном меню редактора кода (правый щелчок › TidySmith); Order Members — ещё и в контекстном меню файлов, папок и проектов в обозревателе решений.

Упорядочивание членов

Order Members… сортирует члены класса по виду (константы, поля, конструкторы, свойства, методы…), затем по доступу (сначала открытые), статические перед членами экземпляра и, если хотите, по имени — в порядке, заданном на странице параметров или в .editorconfig.

Предустановки для начала: TidySmith (перегрузки и реализации интерфейсов держатся вместе), StyleCop (SA1201, SA1202, SA1204 — строго по доступу) и CodeMaid (порядок CodeMaid по умолчанию, для команд, которые с него переходят).

Подсказки в редакторе

Там, где TidySmith может помочь, под именем появляются три серые точки — так Visual Studio отмечает и собственные предложения. Указатель на них объясняет, в чём дело; Ctrl+. предлагает исправление с предпросмотром изменений.

Серые точки под именем класса и под длинным комментарием; лампочка с действием упорядочивания членов и его предпросмотром
Курсор наCtrl+. предлагает
Имени классаУпорядочить члены класса или файла, добавить регионы по вашим правилам, удалить регионы класса, открыть в окне структуры
Комментарии длиннее длины строкиПеренести комментарий
Строке #regionУдалить этот регион (код останется)
Нескольких выделенных строкахОтсортировать строки (только простой список), объединить строки

Точки появляются у класса с нарушенным порядком, у комментария длиннее длины строки и у регионов, расходящихся с вашими правилами, — и больше нигде. У точек и у действий в лампочке отдельные переключатели; «Только в файлах, которые я изменил» оставляет старый код в покое.

Регионы по вашим правилам

Add Regions to This File… расставляет строки #region там, где говорят ваши правила, после предпросмотра. Регионы — решение команды, поэтому по умолчанию стоит без регионов: пока вы не выберете, команда открывает настройки.

Правила регионов и класс с регионами Fields, Methods и IDisposable

Правило StyleCop SA1124 запрещает регионы; поэтому по умолчанию регионов нет — и поэтому порядок при сохранении с этой настройкой их удаляет.

Комментарии по ширине

Format Comment переносит комментарий // или /// под курсором (или все комментарии файла) по длине строки — max_line_length из .editorconfig или 120. Длинные строки разбиваются, короткие объединяются, длинный <summary> получает отдельные строки. Примеры кода (<code>), списки, строки-разделители и закомментированный код остаются как есть.

Комментарий документации до и после Format Comment

Порядок при сохранении

При сохранении файла C# TidySmith может упорядочить его члены, расставить регионы по правилам, перенести комментарии и удалить пробелы в конце строк и лишние пустые строки — у каждого шага свой переключатель. Только сохраняемый файл и никогда сгенерированные; строка состояния сообщает, что изменилось, а Ctrl+Z всё возвращает. Tidy This File выполняет те же шаги по запросу.

По умолчанию выключено. Включайте, когда Order Members даёт тот результат, который нужен команде, — иначе первое же сохранение старого файла переставит в нём всё.

Окно структуры

Вид › Другие окна › TidySmith Structure: типы и члены активного файла C#. Окно следует за курсором, щелчок переходит к члену, поиск фильтрует, а член, перетащенный на другой, перемещается туда — тем же безопасным способом, что и в Order Members. У методов показаны длина и цикломатическая сложность; при превышении порогов со страницы параметров они становятся оранжевыми.

Окно структуры с членами класса и длинным методом, выделенным оранжевым

Полезные мелочи

Команды, которых не хватало после CodeMaid, — в меню Правка › TidySmith и в контекстном меню редактора.

Switch File

Открывает файл, который относится к текущему, — разметку и её код, файл ресурсов и его конструктор, код и его тесты — без поиска в обозревателе решений.

ОткудаКуда (и обратно)
MainWindow.xamlMainWindow.xaml.cs
Order.razorOrder.razor.cs
Index.cshtmlIndex.cshtml.cs
Strings.resxStrings.Designer.cs
MainForm.csMainForm.Designer.cs
OrderService.csOrderServiceTests.cs — в том числе в тестовом проекте решения; а также …Test.cs и ….Tests.cs

Пункт меню называет цель («Switch to OrderServiceTests.cs») и недоступен, когда переходить некуда. Удобнее всего с собственной клавишей — см. ниже.

Sort Selected Lines

Сортирует директивы using, члены enum или элементы списка; запятые остаются там, где они нужны списку. Сортируется только простой список — один элемент на строку, одинаковый отступ, без пустых строк и операторов, — поэтому случайно выделенный метод или весь файл никогда не перемешается; строка состояния объясняет почему.

Join Lines

Объединяет выделенные строки в одну или строку под курсором со следующей.

Find This File in Solution Explorer

Выделяет файл из редактора в обозревателе решений.

Collapse и Expand All Regions

Сворачивает или разворачивает только блоки #region; методы остаются как есть. В отличие от Ctrl+M, Ctrl+O (сворачивает и методы) и Ctrl+M, Ctrl+L (всё).

По умолчанию никакие сочетания клавиш не заняты — клавиши Visual Studio остаются как есть. Назначьте любую команду в разделе Средства › Параметры › Среда › Клавиатура: введите TidySmith. в поле «Показать команды, содержащие».

Настройки

Средства → Параметры → SmithWorks → TidySmith. У каждого параметра есть описание.

ПараметрПо умолчанию
Действия TidySmith в лампочке (Ctrl+.)вкл.
Серые точки там, где можно навести порядоквкл.
Порядок членовпредустановка TidySmith
Предпросмотр перед упорядочиваниемвкл.
Регионыбез регионов
Длина строки комментариев120
Порядок при сохранениивыкл.
Длинный метод (строк) · сложный метод60 · 10
Попросить оценку в Marketplaceвкл.

Настройки хранятся в %LocalAppData%\TidySmith; там, где в .editorconfig есть значение, оно важнее.

Страница параметров TidySmith
Страница параметров.

Для репозитория: .editorconfig

Положите правила рядом с кодом, и вся команда получит одинаковый результат; значение в .editorconfig важнее страницы параметров (если не выключен параметр «Брать порядок из .editorconfig»).

[*.cs]
tidysmith_member_order = stylecop
tidysmith_regions = kind
tidysmith_region_min = 2
max_line_length = 120
КлючЗначения
tidysmith_member_ordertidysmith, stylecop, codemaid или группы по порядку: constants, fields, constructors, properties, methods…
tidysmith_regionsnone, kind, access, kind_access
tidysmith_region_minНаименьшее число членов, для которого создаётся регион: 2
max_line_lengthДлина строки, по которой переносятся комментарии

Вопросы и ответы

Чем это отличается от CodeMaid?

TidySmith работает на синтаксическом дереве Roslyn, а не на старой модели кода, поэтому #if, комментарии и атрибуты остаются на своих местах; он показывает предпросмотр и отменяется одним действием; порядок можно хранить в .editorconfig; он работает в Visual Studio 2022 и 2026 на x64 и ARM64. Он поддерживает только C# и не дублирует то, что Visual Studio теперь умеет сама (очистка кода, ход сборки).

Почему класс не упорядочился?

TidySmith не трогает класс, если упорядочивание может его сломать или исказить: синтаксическая ошибка, член на строке фигурной скобки, два члена на одной строке. Члены внутри #if или #region перемещаются только в пределах своего блока. Сгенерированные файлы никогда не трогаются.

Можно ли отменить изменение?

Да: каждая команда и каждое сохранение — одна правка, поэтому одно нажатие Ctrl+Z всё возвращает. В обозревателе решений неоткрытые файлы записываются прямо на диск — там пользуйтесь системой контроля версий.

Почему Sort Selected Lines ничего не сделал?

Он сортирует только простой список, поэтому выделение, которое является кодом, — операторы, блоки, строки с разными отступами или с пустыми строками между ними — никогда не перемешивается. Об этом сообщает строка состояния.

Add Regions ничего не делает.

По умолчанию правило — без регионов. Выберите, как делить на регионы, в группе «Регионы» настроек (команда её открывает) или задайте tidysmith_regions в .editorconfig.

А VB, C++ или XAML?

TidySmith предназначен для C#. Другие языки могут появиться, если о них попросят, — напишите в репозитории Feedback.

TidySmith отправляет какие-нибудь данные?

Нет. Всё работает внутри Visual Studio с вашими файлами; ничего никуда не отправляется — ни телеметрии, ни запросов.

Где сообщить о проблеме или предложить возможность?

Создайте issue в репозитории Feedback на GitHub — там есть формы для ошибок и идей (пожалуйста, замените закрытые имена). Можно также воспользоваться вкладкой Q&A на Marketplace.

История изменений

1.0.2

1.0.1

1.0.0