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

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

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

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

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

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

Новое 2026.06.20

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

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

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

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

45 Comments

  1. nixel

    Огонь! Спасибо огромное.

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

    Reply ↓
  2. boln
    Выравнивает код по «=», «(«, «,», «//»

    Только на партнерке про это не говорите — там есть ух какие противники такого выравнивания. Заклюют 🙂

    Reply ↓
  3. headMade

    (2)чем на партнере не нравится такое выравнивание?

    Reply ↓
  4. YOr!k

    (2) думаю многие аргументы против такого выравнивания вполне обоснованы

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

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

    Reply ↓
  5. TODD22

    (4)

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

    Для этого можно воспользоваться поиском по коду и подсветкой выделенной переменной…..

    Reply ↓
  6. boln

    (3)

    чем на партнере не нравится такое выравнивание?

    Один из аргументов приведен в (4). Среди других: создается излишняя нагрузка на хранилище конфигураций.

    Впрочем, вот, у кого есть доступ, примеры возражений:

    https://partners.v8.1c.ru/forum/topic/1578315

    https://partners.v8.1c.ru/forum/t/1429490/m/1550876

    Reply ↓
  7. Stepa86

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

    Хотя доводы смешные. Макконнелл, когда ругал выравнивание, единственным аргументом против называл необходимость менять вручную соседние строчки кода из-за изменения в одной. При этом он соглашался, что код выглядит чище и приятнее. А раз тут автоматом будет выравниваться, то и программист не устает.

    Reply ↓
  8. orefkov

    (4)

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

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

    Reply ↓
  9. Артано

    Честно говоря, некоторые подходы к форматированию весьма спорные.

    Например оформление структур продемонстрированное на функции «НАЙТИСИМВЛОСКОНЦА». В данном конкретном примере больше помогло бы выключение капслока у программиста с параллельным битьем по голове (все равно он в неё только ест).

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

    Если на указанные нюансы можно влиять настройками, то можно пользоваться, иначе — смена шила на мыло.

    Reply ↓
  10. Stepa86

    (9) Ну я ж не принуждаю. Не нравится — не пользуйтесь. Он бесплатен, код открыт и весь проект лежит на гитхабе под митовской лицензией. Можно чо хошь с ним делать — запилить под себя, добавить полезных фишек и поделиться с сообществом, пообсуждать развитие итд.

    А то претензии выглядят как «Мы потратили на этот проект кучу денег, а он не делает того, что мы хотим. Срочно реализуйте!!!»

    Reply ↓
  11. Stepa86

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

    Reply ↓
  12. Артано

    (10) Претензий нет к пуговицам. написал о том, что резануло глаз и выразил пожелание, что это не жестко зашитая в проект логика, а настраиваемый шаблон. Проект не дающий базовых вещей сразу не будет популярен для пользователей, а найти разработчика, который будет его ковырять из любви к искусству сложно. А вот на популярный проект и желающих разработчиков будет больше

    Reply ↓
  13. infosoft-v
    очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита

    Никак не могу взять в толк, почему?

    Reply ↓
  14. JohnConnor

    останусь на снегопаде

    Reply ↓
  15. Stepa86

    (14) Под снегопатом тоже должно работать. Я не проверял, правда

    Reply ↓
  16. Stepa86

    (2) (4) (6) (9) Добавил настройки для выравнивания запросов и отключения выравниваний по знакам.

    Reply ↓
  17. YOr!k

    (13)

    Никак не могу взять в толк, почему?

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

    (8)

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

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

    (10)

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

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

    Это всё не в качестве холивара.

    Красота и опрятность кода — это очень субъективные понятия, у каждого есть свои «железные» аргументы почему он делает так, а не иначе, и я специально оговорился, что нужно следовать оговорённым стандартам, выравнивать так как это заведено на конкретном проекте, хуже когда это не соблюдается, и каждый выравнивает так, как ему больше нравится, устраивая при этом «войну правок» (выравниваний) в модулях, которые разрабатывают несколько человек.

    Reply ↓
  18. orefkov

    (17)

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

    Я это и имел ввиду. Вместо того, чтобы реализовать в платформе возможность поиска регулярками (что не так и сложно), чтобы это было доступно везде всем и всегда — лучше говорить о том, что выравнивать по знаку равно это плохо.

    Reply ↓
  19. orefkov

    (15) Надо мне всё-таки допилить интеграцию 1Script и нового снегопата. Тогда твой код с небольшими переделками сможет работать в снегопате нативно. Он же у тебя на OneScript сделан?

    Reply ↓
  20. Stepa86

    (19) Да, целиком на oscript написано. Там с помощью автохоткея получается выделенный текст, записывается в файл, запускается oscript и опять автохоткеем читается и возвращается в выделенное. А запуск скрипта выглядит вот так

    systemOneScriptinoscript.exe scriptsOneStyleMain.os tmpmodule.txt

    Заменить автохоткей на снегопат не должно быть проблемой

    Reply ↓
  21. orefkov

    Просто со снегопатом можно напрямую текст текущего модуля получить и потом вставить.

    Да и форму для настроек удобно сделать.

    Reply ↓
  22. ret-Phoenix

    Форму настроек можно и у меня сделать, OneScript + GUI, сейчас вся визуальная часть на это переводится.

    Reply ↓
  23. roofless

    из коробки должно работать?

    другие скрипты выполняются, а «ctrl+alt+f» только форматирует стандартным «alt+shift+f»

    Reply ↓
  24. Stepa86

    (23) Если форматирует только стандартным и дальше ничего не происходит, то это так скрипт крашится. В 90% случаев это изза неправильного файла настроек configsOneStyle.json . Он должен быть корректного формата json. Про оставшиеся 10% ничего не могу сказать — нужно разбираться детальнее.

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

    Reply ↓
  25. roofless

    (24)вижу, что поехали наименования файлов(( как восстановить?

    Reply ↓
  26. Stepa86

    (25) Попробуй скачать с гитхаба https://github.com/Stepa86/v8CfgAddsAhk/archive/feature/OneStyle.zip

    Reply ↓
  27. Stepa86

    (25) Хотя дело наверно в архиваторе. Попробуй чем нить другим распаковать

    Reply ↓
  28. roofless

    (27) верно, всё работает. спасибо!

    Reply ↓
  29. CheBurator

    по п.3

    Превратить

    (Парам1, -Позиция, Парам3) в

    (…, — Позиция, …)

    мое чувство прекрасного протестует

    -А — это все-таки унитарная операция. и отрывать минус от операнда — фу-фу-фу…

    Reply ↓
  30. kare

    (28) у меня тоже самое было, спасибо за комментарии ! 7z решил проблему.

    Reply ↓
  31. bsi

    (19) Даешь 1Scrip в Cнегопат!!!

    Reply ↓
  32. orefkov

    (31) Работаю над этим.

    Reply ↓
  33. Stepa86

    Лайфхак для тех, кто не хочет всегда при форматировании выравнивать по равно, но иногда все таки выравнивает избранные куски (думаю таких не много, 80-95% всего лишь). Отключаете выравнивание в настройках уанстайла и ставите себе маленькую программку TNice https://habrahabr.ru/post/229833/ https://github.com/MrShoor/TNice , которая умеет выравнивать более точечно.

    Reply ↓
  34. Akbis

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

    Но вышло несколько моментов — Во первых запускается только с региональными настройками Russia.Без этого странно глючит.

    В OneStyle.json задал

    «ВыравниватьПоРавно»: true,

    «ВыравниватьПоСкобке»: false,

    «ВыравниватьПоЗапятой»: false,

    «ВыравниватьПоКомментариям»: false

    — то есть хочу выравниваться только по Равно. По скобкам вообще не хочу. Но эти настройки не вступают в силу.

    Далее остальные функции работают не совсем стабильно. Например Вызов списка методов: {ctrl +1} нажимаю список выходит, далее как мне прокликать и попасть в выбранный метод? Не получается чтото..

    Reply ↓
  35. Stepa86

    (34) Про региональные настройки ничего не скажу. Глючить в стеке может AHK, скрипт под AHK, оскрипт и скрипт под оскрипт. Ну и умеет работать только с русским текстом, под английский я его не адаптировал и не планирую.

    По настройкам: то есть все равно выравнивается и по скобке и по запятым и по равно? Гляну, как время будет

    По остальным функциям лучше спрашивать автора http://infostart.ru/public/339035/ . Сейчас, насколько я знаю, эти списки заточены под работу клавиатурой и не ловят мыша, но Сергей планирует переписать все диалоги на оскрипт и вообще отказаться от AHK. Если интересен проект, то можно его пообсуждать тут https://gitter.im/v8CfgAddsAhk/Lobby

    Reply ↓
  36. inf012

    (6) Спасибо за ссылочки с партнерской конфы.

    Да, про выравнивание, наверное, вечный вопрос.

    1С в типовых конфах не выравнивает по равно или по запятой.

    Но, в принципе, мне кажется, что выравненный код все равно читается немного проще и быстрее, нежели не выравненный.

    // Нужно добавить новую строку (2) «Грязь» в коде, выравнивание становится бессмысленным
    ДиалогВыбора.ПолноеИмяФайла = ИмяФайла;
    ДиалогВыбора.Каталог        = ИмяПути;
    ДиалогВыбора.Заголовок      = НСтр(«ru = ‘Выберите файл со списком запросов'»);
    ДиалогВыбора.Фильтр         = НСтр(«ru = ‘Файлы запросов (*.sel)|*.sel|Все файлы (*.*)|*.*'»);
    ДиалогВыбора.Расширение     = «sel»;
    ДиалогВыбора.НовоеДлинноеНазвание = НекоеЗначение;
    // «Правильный» код — выравнивания не используются, изменения всегда минимальные, код однотипный
    ДиалогВыбора.ПолноеИмяФайла = ИмяФайла;
    ДиалогВыбора.Каталог = ИмяПути;
    ДиалогВыбора.Заголовок = НСтр(«ru = ‘Выберите файл со списком запросов'»);
    ДиалогВыбора.Фильтр = НСтр(«ru = ‘Файлы запросов (*.sel)|*.sel|Все файлы (*.*)|*.*'»);
    ДиалогВыбора.Расширение = «sel»;
    ДиалогВыбора.НовоеДлинноеНазвание = НекоеЗначение;
    

    Показать

    Хотя, если надо не выравнивать, то это не принципиально.

    Reply ↓
  37. inf012

    Но, все таки, сама 1С разрешает (допускает) использование выравнивания:

    https://its.1c.ru/db/v8std#content:2149184090:hdoc

    Reply ↓
  38. Stepa86

    (29) Пофиксил. Теперь унарный минус всегда прилипает к операнду. На данный момент изменения только в моем форке

    Reply ↓
  39. gubanoff

    (0) добавьте пакетную обработку всех модулей конфигурации, выгруженных в текстовые файлы. Ведь все равно обработка, как я понял

    (20) через файлы идет. Тогда можно было бы сразу всю конфигурацию привести к приличному виду.

    Тогда и автохоткей не понадобиться. Это тоже плюс.

    Reply ↓
  40. ret-Phoenix

    (39) Вообще-то AHK используется только для запуска скрипта с параметрами.

    systemOneScriptinoscript.exe scriptsOneStyleMain.os %fileName%

    Источник = «tmpmodule.txt»;
    Если Параметры.Количество() > 0 Тогда
    Источник = Параметры[0];
    КонецЕсли;
    Приемник = Источник;
    Если Параметры.Количество() > 1 Тогда
    Приемник = Параметры[1];
    КонецЕсли;
    

    Показать

    Можете спокойно натравить на нужные Вам файлы.

    Пакетная обработка модулей конфигурации, примерно так:

    Файлы = Найти(…);
    Для каждого Файл из Файлы цикл
    // обработать текст
    КонецЦикла;
    

    P.S. Обновил статью на ИС и выложил комплексное обновление.

    Reply ↓
  41. gubanoff

    (0) попробовали, нашли ряд случаев, когда форматирование выполняется некорректно — операторы разрываются на две строки, что приводит к синтаксическим ошибкам. Примеры прилагаю. Прошу исправить.

    Reply ↓
  42. Stepa86

    (41) Это опенсорс. Если что то не нравится — можете сами у себя поправить. Если хотите этим поделиться с другими — готов рассмотреть ваши пулл-реквесты в https://github.com/Stepa86/v8CfgAddsAhk

    У меня сейчас нет ни желания ни времени дорабатывать этот проект для других. Меня текущая работоспособность устраивает.

    Reply ↓
  43. Rustig

    (14) видео сделайте как вы на снегопаде решаете конкретную задачу

    до сих пор ничего не использовал, интересно увидеть фильм от начала до конца, а не отдельные обрывки Если Тогда КонецЕсли

    Reply ↓
  44. Rustig

    (0) у вас на сайте

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

    фон кода черный — скажите , это нормально для вас так программировать? на черном фоне, желтыми буквами….

    Reply ↓
  45. Rustig

    (42)

    Меня текущая работоспособность устраивает.

    видео снимите пож-та как вы программируете — «насколько ваша разработка ускоряет программирование»

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *