OneStyle. Улучшенное форматирование кода в конфигураторе

Программирование - Инструментарий

Умеет добавлять пробелы после запятых, окружать пробелами арифметические знаки, добавлять пустые строки, выравнивать перенесенные выражения, приводить ключевые слова к каноническому виду и многое другое.

Это один из множества инструментов проекта v8CfgAddsAhk. Описание на Инфостарт, на сайте, в гитхабе, мой форк.

Так же использована обработка для форматирования кода от 1С. Которую можно взять с ИТС.

О правомерности использования

Всегда последние изменения в дев-ветке основного проекта или в фиче-ветке моего форка

Что умеет

Выделяете нужный фрагмент кода, нажимаете Ctrl+Alt+F и происходит следующее

1. Вызывается стандартное форматирование Shift+Alt+F

2. Приводит комментарий к виду из стандартов разработки

Добавляет пробелы после // и перед текстом, если их нет, делает заглавной первую букву, переносит комментарии, длиннее 120 символов (длина задается в настройках)

3. Приводит ключевые слова к каноническому виду

4. Приводит ключевые слова в запросе к каноническому виду

5. Добавляет пустые строки вокруг ключевых конструкций, таких как Если, Для, Функция

Можно отключить в настройках

6. Удаляет внутри кода лишние пробелы и табы

7. Добавляет нужные пробелы вокруг арифметических знаков, запятых и скобок

Добавление пробелов у скобок можно отключить в настройках. Результат будет как в ВЖУХ2

8. Удаляет пробельные символы справа

В отличие от многих альтернатив не превращает пустые строки с отступами в пустые строки.

9. Выполняет форматирование перенесенных выражений

Это именно тот пункт, ради которого все и затевалось. Все ведь любят тот момент, когда форматируешь код и все сдвигается влево до упора?

Способ выравнивания запросов задается в настройках

// 0 - не выравнивать.
Запрос.Текст = "ВЫБРАТЬ
|	Пользователи.Ссылка КАК Пользователь
|ПОМЕСТИТЬ втПользователи


// 1 - добавлять таб
Запрос.Текст = "ВЫБРАТЬ
	|	Пользователи.Ссылка КАК Пользователь
	|ПОМЕСТИТЬ втПользователи


// 2 - выравнивать по равно
Запрос.Текст = "ВЫБРАТЬ
			   |	Пользователи.Ссылка КАК Пользователь
			   |ПОМЕСТИТЬ втПользователи
			   	
Запрос = Новый Запрос( "ВЫБРАТЬ
		 |	Пользователи.Ссылка КАК Пользователь
		 |ПОМЕСТИТЬ втПользователи" );

10. Разбивает длинные выражения на несколько строк

Так же выравнивает с учетом Знач. И сразу видно, что кое где их забыли проставить.

Если после форматирования код начал выглядеть странно. Это повод задуматься над его рефакторингом. 

11. Выравнивает код по "=", "(", ",", "//"

Причем если для выравнивания нужно добавить слишком много пробелов, то эта строка выравнивается отдельно, вместе с такими же коротышами. На это влияет параметр СдвигПревышение в настройках.

Выравнивания можно отключить в настройках.

Как начать пользоваться

Нужно скачать и установить autohotkey https://autohotkey.com/

Скачать проект v8CfgAddsAhk отсюда, из основного репо или из моего форка. Нужно учитывать, что на момент выхода этой публикации все изменения были еще в dev ветке, а самые последние изменения могут ожидать одобрения PR.

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

Запустить файл v8CfgAdds.ahk в корне проекта.

В конфигураторе выделить нужный текст и нажать Ctrl+Alt+F

Как изменить настройки

В папке проекта есть файл \configs\OneStyle.json , все немногочисленные настройки там.

Как поучаствовать в развитии, изменить под себя

Весь проект OneStyle написан на oscript и легко может быть доработан среднестатистическим 1Сником.

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

Новое 2017.06.20

Исправлены выявленные ошибки.

Добавлены настройки для выравнивания. См. п.11

Добавлены настройки для выравнивания многострочных строк. См. п. 9

Подробный список изменений с возможность посмотреть изменения в коде

Скачать файлы

Наименование Файл Версия Размер
OneStyle. Улучшенное форматирование кода в конфигураторе:
.zip 4,21Mb
19.06.17
11
.zip 4,21Mb 11 Скачать

См. также

Комментарии
1. Никита Грызлов (nixel) 74 19.06.17 14:28 Сейчас в теме
Огонь! Спасибо огромное.
Будут ещё пожелания по переносу по скобкам, но это детально лучше в ишузе обсудить
Evil Beaver; +1 Ответить
2. Николай Больсунов (boln) 922 19.06.17 14:37 Сейчас в теме
Выравнивает код по "=", "(", ",", "//"
Только на партнерке про это не говорите - там есть ух какие противники такого выравнивания. Заклюют :)
3. Анатолий Бритько (headMade) 133 19.06.17 16:53 Сейчас в теме
(2)чем на партнере не нравится такое выравнивание?
4. Ярослав Попов (YOr!k) 63 19.06.17 16:58 Сейчас в теме
(2) думаю многие аргументы против такого выравнивания вполне обоснованы

очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита

тут, конечно, поступать надо так как заведено на конкретном проекте, без фанатизма.
klinval; CyberCerber; Soloist; madonov; tormozit; grumagargler; alexkmbk; +7 Ответить 5
5. борян петров (TODD22) 15 19.06.17 17:34 Сейчас в теме
(4)
если нужно найти все места, где присваиваются значения конкретного реквизита

Для этого можно воспользоваться поиском по коду и подсветкой выделенной переменной.....
6. Николай Больсунов (boln) 922 19.06.17 17:47 Сейчас в теме
(3)
чем на партнере не нравится такое выравнивание?
Один из аргументов приведен в (4). Среди других: создается излишняя нагрузка на хранилище конфигураций.
Впрочем, вот, у кого есть доступ, примеры возражений:
https://partners.v8.1c.ru/forum/topic/1578315
https://partners.v8.1c.ru/forum/t/1429490/m/1550876
7. Антон Степанов (Stepa86) 811 19.06.17 17:53 Сейчас в теме
Так, без паники. Кому не нужно выравнивание смогут их отключить в настройках, скоро это сделаю.

Хотя доводы смешные. Макконнелл, когда ругал выравнивание, единственным аргументом против называл необходимость менять вручную соседние строчки кода из-за изменения в одной. При этом он соглашался, что код выглядит чище и приятнее. А раз тут автоматом будет выравниваться, то и программист не устает.
nihfalck; TreeDogNight; kraynev-navi; +3 Ответить
8. Александр Орефков (orefkov) 1462 20.06.17 03:35 Сейчас в теме
(4)
очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита

Конечно, ведь реализовать поиск регулярными выражениями непосильная задача :)
9. Артано Майаров (Артано) 320 20.06.17 08:10 Сейчас в теме
Честно говоря, некоторые подходы к форматированию весьма спорные.
Например оформление структур продемонстрированное на функции "НАЙТИСИМВЛОСКОНЦА". В данном конкретном примере больше помогло бы выключение капслока у программиста с параллельным битьем по голове (все равно он в неё только ест).
Форматирование перенесенных выражений, в частности форматирование текста запроса (выравнивание по оператору присваивания, а не по левому краю рабочей области). В приведенном примере программист специально и перенес его, чтобы текст запроса находился в рабочей области кода и не было огромных пустот.

Если на указанные нюансы можно влиять настройками, то можно пользоваться, иначе - смена шила на мыло.
CyberCerber; Yakud3a; +2 Ответить 2
10. Антон Степанов (Stepa86) 811 20.06.17 08:28 Сейчас в теме
(9) Ну я ж не принуждаю. Не нравится - не пользуйтесь. Он бесплатен, код открыт и весь проект лежит на гитхабе под митовской лицензией. Можно чо хошь с ним делать - запилить под себя, добавить полезных фишек и поделиться с сообществом, пообсуждать развитие итд.

А то претензии выглядят как "Мы потратили на этот проект кучу денег, а он не делает того, что мы хотим. Срочно реализуйте!!!"
JohnyDeath; +1 Ответить 2
11. Антон Степанов (Stepa86) 811 20.06.17 08:32 Сейчас в теме
(4) А если в коде присваивание сделано как ПарамПамПам=1; ? Или ПрисвоитьЗначениюЕдиничку( ПарамПамПам ) ? Или через ЗаполнитьЗначенияСвойств ?
12. Артано Майаров (Артано) 320 20.06.17 08:37 Сейчас в теме
(10) Претензий нет к пуговицам. написал о том, что резануло глаз и выразил пожелание, что это не жестко зашитая в проект логика, а настраиваемый шаблон. Проект не дающий базовых вещей сразу не будет популярен для пользователей, а найти разработчика, который будет его ковырять из любви к искусству сложно. А вот на популярный проект и желающих разработчиков будет больше
13. Евгений Плешивцев (infosoft-v) 35 20.06.17 09:15 Сейчас в теме
очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита


Никак не могу взять в толк, почему?
14. Николай Гончаров (JohnConnor) 5 20.06.17 09:44 Сейчас в теме
останусь на снегопаде
15. Антон Степанов (Stepa86) 811 20.06.17 09:45 Сейчас в теме
(14) Под снегопатом тоже должно работать. Я не проверял, правда
16. Антон Степанов (Stepa86) 811 20.06.17 11:06 Сейчас в теме
(2) (4) (6) (9) Добавил настройки для выравнивания запросов и отключения выравниваний по знакам.
CyberCerber; Артано; YOr!k; +3 Ответить
17. Ярослав Попов (YOr!k) 63 20.06.17 13:11 Сейчас в теме
(13)
Никак не могу взять в толк, почему?

присвоение удобно искать по строке "ИмяРеквизита =", поиск просто по "ИмяРеквизита" найдёт все места использования реквизита, а не случаи его инициализации

(8)
Конечно, ведь реализовать поиск регулярными выражениями непосильная задача :)

поиск регулярными выражениями доступен не везде, не всем и не всегда

(10)
ПарамПамПам=1; ? Или ПрисвоитьЗначениюЕдиничку( ПарамПамПам ) ? Или через ЗаполнитьЗначенияСвойств

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

Это всё не в качестве холивара.
Красота и опрятность кода - это очень субъективные понятия, у каждого есть свои "железные" аргументы почему он делает так, а не иначе, и я специально оговорился, что нужно следовать оговорённым стандартам, выравнивать так как это заведено на конкретном проекте, хуже когда это не соблюдается, и каждый выравнивает так, как ему больше нравится, устраивая при этом "войну правок" (выравниваний) в модулях, которые разрабатывают несколько человек.
klinval; grumagargler; CyberCerber; infosoft-v; +4 Ответить 1
18. Александр Орефков (orefkov) 1462 20.06.17 14:02 Сейчас в теме
(17)
поиск регулярными выражениями доступен не везде, не всем и не всегда

Я это и имел ввиду. Вместо того, чтобы реализовать в платформе возможность поиска регулярками (что не так и сложно), чтобы это было доступно везде всем и всегда - лучше говорить о том, что выравнивать по знаку равно это плохо.
the1; ret-Phoenix; +2 Ответить
19. Александр Орефков (orefkov) 1462 20.06.17 14:04 Сейчас в теме
(15) Надо мне всё-таки допилить интеграцию 1Script и нового снегопата. Тогда твой код с небольшими переделками сможет работать в снегопате нативно. Он же у тебя на OneScript сделан?
JohnyDeath; +1 Ответить 2
20. Антон Степанов (Stepa86) 811 20.06.17 14:36 Сейчас в теме
(19) Да, целиком на oscript написано. Там с помощью автохоткея получается выделенный текст, записывается в файл, запускается oscript и опять автохоткеем читается и возвращается в выделенное. А запуск скрипта выглядит вот так

system\OneScript\bin\oscript.exe scripts\OneStyle\Main.os tmp\module.txt


Заменить автохоткей на снегопат не должно быть проблемой
21. Александр Орефков (orefkov) 1462 20.06.17 14:37 Сейчас в теме
Просто со снегопатом можно напрямую текст текущего модуля получить и потом вставить.
Да и форму для настроек удобно сделать.
22. Сергей (ret-Phoenix) 143 20.06.17 14:44 Сейчас в теме
Форму настроек можно и у меня сделать, OneScript + GUI, сейчас вся визуальная часть на это переводится.
23. Алексей Ларин (roofless) 20 20.06.17 16:22 Сейчас в теме
из коробки должно работать?
другие скрипты выполняются, а "ctrl+alt+f" только форматирует стандартным "alt+shift+f"
24. Антон Степанов (Stepa86) 811 20.06.17 17:48 Сейчас в теме
(23) Если форматирует только стандартным и дальше ничего не происходит, то это так скрипт крашится. В 90% случаев это изза неправильного файла настроек \configs\OneStyle.json . Он должен быть корректного формата json. Про оставшиеся 10% ничего не могу сказать - нужно разбираться детальнее.

Если что скрипт отрабатывает не мгновенно, подгрузка движка оскрипта занимает около секунды
25. Алексей Ларин (roofless) 20 21.06.17 08:08 Сейчас в теме
(24)вижу, что поехали наименования файлов(( как восстановить?
Прикрепленные файлы:
26. Антон Степанов (Stepa86) 811 21.06.17 08:19 Сейчас в теме
27. Антон Степанов (Stepa86) 811 21.06.17 08:21 Сейчас в теме
(25) Хотя дело наверно в архиваторе. Попробуй чем нить другим распаковать
28. Алексей Ларин (roofless) 20 21.06.17 09:03 Сейчас в теме
(27) верно, всё работает. спасибо!
29. Сергей (Che) Коцюра (CheBurator) 3382 21.06.17 23:55 Сейчас в теме
по п.3

Превратить
(Парам1, -Позиция, Парам3) в
(..., - Позиция, ...)
мое чувство прекрасного протестует

-А - это все-таки унитарная операция. и отрывать минус от операнда - фу-фу-фу...
klinval; madonov; +2 Ответить
30. Антон Антон (kare) 22.06.17 08:18 Сейчас в теме
(28) у меня тоже самое было, спасибо за комментарии ! 7z решил проблему.
roofless; +1 Ответить
31. bsi bsi (bsi) 23.06.17 10:29 Сейчас в теме
32. Александр Орефков (orefkov) 1462 23.06.17 10:47 Сейчас в теме
33. Антон Степанов (Stepa86) 811 26.06.17 09:57 Сейчас в теме
Лайфхак для тех, кто не хочет всегда при форматировании выравнивать по равно, но иногда все таки выравнивает избранные куски (думаю таких не много, 80-95% всего лишь). Отключаете выравнивание в настройках уанстайла и ставите себе маленькую программку TNice https://habrahabr.ru/post/229833/ https://github.com/MrShoor/TNice , которая умеет выравнивать более точечно.
Оставьте свое сообщение