Это один из множества инструментов проекта 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
Как изменить настройки
В папке проекта есть файл configsOneStyle.json , все немногочисленные настройки там.
Как поучаствовать в развитии, изменить под себя
Весь проект OneStyle написан на oscript и легко может быть доработан среднестатистическим 1Сником.
Если вы хотите поделиться наработками, нашли ошибки, не понимаете что-либо, то можно спросить тут в комментариях, в репозиториях или в чате гиттера
Новое 2024.06.20
Исправлены выявленные ошибки.
Добавлены настройки для выравнивания. См. п.11
Добавлены настройки для выравнивания многострочных строк. См. п. 9
Подробный список изменений с возможность посмотреть изменения в коде
Огонь! Спасибо огромное.
Будут ещё пожелания по переносу по скобкам, но это детально лучше в ишузе обсудить
Только на партнерке про это не говорите — там есть ух какие противники такого выравнивания. Заклюют 🙂
(2)чем на партнере не нравится такое выравнивание?
(2) думаю многие аргументы против такого выравнивания вполне обоснованы
очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита
тут, конечно, поступать надо так как заведено на конкретном проекте, без фанатизма.
(4)
Для этого можно воспользоваться поиском по коду и подсветкой выделенной переменной…..
(3)
Один из аргументов приведен в (4). Среди других: создается излишняя нагрузка на хранилище конфигураций.
https://partners.v8.1c.ru/forum/topic/1578315
https://partners.v8.1c.ru/forum/t/1429490/m/1550876
Впрочем, вот, у кого есть доступ, примеры возражений:
Так, без паники. Кому не нужно выравнивание смогут их отключить в настройках, скоро это сделаю.
Хотя доводы смешные. Макконнелл, когда ругал выравнивание, единственным аргументом против называл необходимость менять вручную соседние строчки кода из-за изменения в одной. При этом он соглашался, что код выглядит чище и приятнее. А раз тут автоматом будет выравниваться, то и программист не устает.
(4)
Конечно, ведь реализовать поиск регулярными выражениями непосильная задача 🙂
Честно говоря, некоторые подходы к форматированию весьма спорные.
Например оформление структур продемонстрированное на функции «НАЙТИСИМВЛОСКОНЦА». В данном конкретном примере больше помогло бы выключение капслока у программиста с параллельным битьем по голове (все равно он в неё только ест).
Форматирование перенесенных выражений, в частности форматирование текста запроса (выравнивание по оператору присваивания, а не по левому краю рабочей области). В приведенном примере программист специально и перенес его, чтобы текст запроса находился в рабочей области кода и не было огромных пустот.
Если на указанные нюансы можно влиять настройками, то можно пользоваться, иначе — смена шила на мыло.
(9) Ну я ж не принуждаю. Не нравится — не пользуйтесь. Он бесплатен, код открыт и весь проект лежит на гитхабе под митовской лицензией. Можно чо хошь с ним делать — запилить под себя, добавить полезных фишек и поделиться с сообществом, пообсуждать развитие итд.
А то претензии выглядят как «Мы потратили на этот проект кучу денег, а он не делает того, что мы хотим. Срочно реализуйте!!!»
(4) А если в коде присваивание сделано как ПарамПамПам=1; ? Или ПрисвоитьЗначениюЕдиничку( ПарамПамПам ) ? Или через ЗаполнитьЗначенияСвойств ?
(10) Претензий нет к пуговицам. написал о том, что резануло глаз и выразил пожелание, что это не жестко зашитая в проект логика, а настраиваемый шаблон. Проект не дающий базовых вещей сразу не будет популярен для пользователей, а найти разработчика, который будет его ковырять из любви к искусству сложно. А вот на популярный проект и желающих разработчиков будет больше
Никак не могу взять в толк, почему?
останусь на снегопаде
(14) Под снегопатом тоже должно работать. Я не проверял, правда
(2) (4) (6) (9) Добавил настройки для выравнивания запросов и отключения выравниваний по знакам.
(13)
присвоение удобно искать по строке «ИмяРеквизита =», поиск просто по «ИмяРеквизита» найдёт все места использования реквизита, а не случаи его инициализации
(8)
поиск регулярными выражениями доступен не везде, не всем и не всегда
(10)
кажется, это не аргумент, чтобы ещё больше усложнять себе жизнь доп. выравниваниями ) в большинстве случаев этот прием работает и позволяет быстро локализовать нужное место в коде.
Это всё не в качестве холивара.
Красота и опрятность кода — это очень субъективные понятия, у каждого есть свои «железные» аргументы почему он делает так, а не иначе, и я специально оговорился, что нужно следовать оговорённым стандартам, выравнивать так как это заведено на конкретном проекте, хуже когда это не соблюдается, и каждый выравнивает так, как ему больше нравится, устраивая при этом «войну правок» (выравниваний) в модулях, которые разрабатывают несколько человек.
(17)
Я это и имел ввиду. Вместо того, чтобы реализовать в платформе возможность поиска регулярками (что не так и сложно), чтобы это было доступно везде всем и всегда — лучше говорить о том, что выравнивать по знаку равно это плохо.
(15) Надо мне всё-таки допилить интеграцию 1Script и нового снегопата. Тогда твой код с небольшими переделками сможет работать в снегопате нативно. Он же у тебя на OneScript сделан?
(19) Да, целиком на oscript написано. Там с помощью автохоткея получается выделенный текст, записывается в файл, запускается oscript и опять автохоткеем читается и возвращается в выделенное. А запуск скрипта выглядит вот так
Заменить автохоткей на снегопат не должно быть проблемой
Просто со снегопатом можно напрямую текст текущего модуля получить и потом вставить.
Да и форму для настроек удобно сделать.
Форму настроек можно и у меня сделать, OneScript + GUI, сейчас вся визуальная часть на это переводится.
из коробки должно работать?
другие скрипты выполняются, а «ctrl+alt+f» только форматирует стандартным «alt+shift+f»
(23) Если форматирует только стандартным и дальше ничего не происходит, то это так скрипт крашится. В 90% случаев это изза неправильного файла настроек configsOneStyle.json . Он должен быть корректного формата json. Про оставшиеся 10% ничего не могу сказать — нужно разбираться детальнее.
Если что скрипт отрабатывает не мгновенно, подгрузка движка оскрипта занимает около секунды
(24)вижу, что поехали наименования файлов(( как восстановить?
(25) Попробуй скачать с гитхабаhttps://github.com/Stepa86/v8CfgAddsAhk/archive/feature/OneStyle.zip
(25) Хотя дело наверно в архиваторе. Попробуй чем нить другим распаковать
(27) верно, всё работает. спасибо!
по п.3
Превратить
(Парам1, -Позиция, Парам3) в
(…, — Позиция, …)
мое чувство прекрасного протестует
-А — это все-таки унитарная операция. и отрывать минус от операнда — фу-фу-фу…
(28) у меня тоже самое было, спасибо за комментарии ! 7z решил проблему.
(19) Даешь 1Scrip в Cнегопат!!!
(31) Работаю над этим.
Лайфхак для тех, кто не хочет всегда при форматировании выравнивать по равно, но иногда все таки выравнивает избранные куски (думаю таких не много, 80-95% всего лишь). Отключаете выравнивание в настройках уанстайла и ставите себе маленькую программку TNicehttps://habrahabr.ru/post/229833/ https://github.com/MrShoor/TNice , которая умеет выравнивать более точечно.
Полезная штука, форматирование текста очень пригодилось. Спасибо!
Но вышло несколько моментов — Во первых запускается только с региональными настройками Russia.Без этого странно глючит.
В OneStyle.json задал
«ВыравниватьПоРавно»: true,
«ВыравниватьПоСкобке»: false,
«ВыравниватьПоЗапятой»: false,
«ВыравниватьПоКомментариям»: false
— то есть хочу выравниваться только по Равно. По скобкам вообще не хочу. Но эти настройки не вступают в силу.
Далее остальные функции работают не совсем стабильно. Например Вызов списка методов: {ctrl +1} нажимаю список выходит, далее как мне прокликать и попасть в выбранный метод? Не получается чтото..
(34) Про региональные настройки ничего не скажу. Глючить в стеке может AHK, скрипт под AHK, оскрипт и скрипт под оскрипт. Ну и умеет работать только с русским текстом, под английский я его не адаптировал и не планирую.
По настройкам: то есть все равно выравнивается и по скобке и по запятым и по равно? Гляну, как время будет
По остальным функциям лучше спрашивать автораhttp://infostart.ru/public/339035/ . Сейчас, насколько я знаю, эти списки заточены под работу клавиатурой и не ловят мыша, но Сергей планирует переписать все диалоги на оскрипт и вообще отказаться от AHK. Если интересен проект, то можно его пообсуждать тут https://gitter.im/v8CfgAddsAhk/Lobby
(6) Спасибо за ссылочки с партнерской конфы.
Да, про выравнивание, наверное, вечный вопрос.
1С в типовых конфах не выравнивает по равно или по запятой.
Но, в принципе, мне кажется, что выравненный код все равно читается немного проще и быстрее, нежели не выравненный.
Показать
Хотя, если надо не выравнивать, то это не принципиально.
Но, все таки, сама 1С разрешает (допускает) использование выравнивания:
https://its.1c.ru/db/v8std#content:2149184090:hdoc
(29) Пофиксил. Теперь унарный минус всегда прилипает к операнду. На данный момент изменения только в моем форке
(0) добавьте пакетную обработку всех модулей конфигурации, выгруженных в текстовые файлы. Ведь все равно обработка, как я понял
(20) через файлы идет. Тогда можно было бы сразу всю конфигурацию привести к приличному виду.
Тогда и автохоткей не понадобиться. Это тоже плюс.
(39) Вообще-то AHK используется только для запуска скрипта с параметрами.
systemOneScriptinoscript.exe scriptsOneStyleMain.os %fileName%
Показать
Можете спокойно натравить на нужные Вам файлы.
Пакетная обработка модулей конфигурации, примерно так:
P.S. Обновил статью на ИС и выложил комплексное обновление.
(0) попробовали, нашли ряд случаев, когда форматирование выполняется некорректно — операторы разрываются на две строки, что приводит к синтаксическим ошибкам. Примеры прилагаю. Прошу исправить.
(41) Это опенсорс. Если что то не нравится — можете сами у себя поправить. Если хотите этим поделиться с другими — готов рассмотреть ваши пулл-реквесты вhttps://github.com/Stepa86/v8CfgAddsAhk
У меня сейчас нет ни желания ни времени дорабатывать этот проект для других. Меня текущая работоспособность устраивает.
(14) видео сделайте как вы на снегопаде решаете конкретную задачу
до сих пор ничего не использовал, интересно увидеть фильм от начала до конца, а не отдельные обрывки Если Тогда КонецЕсли
(0) у вас на сайте
фон кода черный — скажите , это нормально для вас так программировать? на черном фоне, желтыми буквами….
(42)
видео снимите пож-та как вы программируете — «насколько ваша разработка ускоряет программирование»