0. Stepa86 1232 19.06.17 10:03 Сейчас в теме

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

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. nixel 787 19.06.17 14:28 Сейчас в теме
Огонь! Спасибо огромное.
Будут ещё пожелания по переносу по скобкам, но это детально лучше в ишузе обсудить
Evil Beaver; +1 Ответить
2. boln 998 19.06.17 14:37 Сейчас в теме
Выравнивает код по "=", "(", ",", "//"
Только на партнерке про это не говорите - там есть ух какие противники такого выравнивания. Заклюют :)
3. headMade 140 19.06.17 16:53 Сейчас в теме
(2)чем на партнере не нравится такое выравнивание?
6. boln 998 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
4. YOr!k 86 19.06.17 16:58 Сейчас в теме
(2) думаю многие аргументы против такого выравнивания вполне обоснованы

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

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

Для этого можно воспользоваться поиском по коду и подсветкой выделенной переменной.....
8. orefkov 1973 20.06.17 03:35 Сейчас в теме
(4)
очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита

Конечно, ведь реализовать поиск регулярными выражениями непосильная задача :)
11. Stepa86 1232 20.06.17 08:32 Сейчас в теме
(4) А если в коде присваивание сделано как ПарамПамПам=1; ? Или ПрисвоитьЗначениюЕдиничку( ПарамПамПам ) ? Или через ЗаполнитьЗначенияСвойств ?
16. Stepa86 1232 20.06.17 11:06 Сейчас в теме
(2) (4) (6) (9) Добавил настройки для выравнивания запросов и отключения выравниваний по знакам.
CyberCerber; Артано; YOr!k; +3 Ответить
36. inf012 30.06.17 09:14 Сейчас в теме
(6) Спасибо за ссылочки с партнерской конфы.
Да, про выравнивание, наверное, вечный вопрос.
1С в типовых конфах не выравнивает по равно или по запятой.
Но, в принципе, мне кажется, что выравненный код все равно читается немного проще и быстрее, нежели не выравненный.
// Нужно добавить новую строку (2) "Грязь" в коде, выравнивание становится бессмысленным
ДиалогВыбора.ПолноеИмяФайла = ИмяФайла; 
ДиалогВыбора.Каталог        = ИмяПути; 
ДиалогВыбора.Заголовок      = НСтр("ru = 'Выберите файл со списком запросов'"); 
ДиалогВыбора.Фильтр         = НСтр("ru = 'Файлы запросов (*.sel)|*.sel|Все файлы (*.*)|*.*'"); 
ДиалогВыбора.Расширение     = "sel";
ДиалогВыбора.НовоеДлинноеНазвание = НекоеЗначение;
// "Правильный" код - выравнивания не используются, изменения всегда минимальные, код однотипный
ДиалогВыбора.ПолноеИмяФайла = ИмяФайла; 
ДиалогВыбора.Каталог = ИмяПути; 
ДиалогВыбора.Заголовок = НСтр("ru = 'Выберите файл со списком запросов'"); 
ДиалогВыбора.Фильтр = НСтр("ru = 'Файлы запросов (*.sel)|*.sel|Все файлы (*.*)|*.*'"); 
ДиалогВыбора.Расширение = "sel";
ДиалогВыбора.НовоеДлинноеНазвание = НекоеЗначение;
Показать

Хотя, если надо не выравнивать, то это не принципиально.
7. Stepa86 1232 19.06.17 17:53 Сейчас в теме
Так, без паники. Кому не нужно выравнивание смогут их отключить в настройках, скоро это сделаю.

Хотя доводы смешные. Макконнелл, когда ругал выравнивание, единственным аргументом против называл необходимость менять вручную соседние строчки кода из-за изменения в одной. При этом он соглашался, что код выглядит чище и приятнее. А раз тут автоматом будет выравниваться, то и программист не устает.
inf012; nihfalck; TreeDogNight; kraynev-navi; +4 Ответить
9. Артано 658 20.06.17 08:10 Сейчас в теме
Честно говоря, некоторые подходы к форматированию весьма спорные.
Например оформление структур продемонстрированное на функции "НАЙТИСИМВЛОСКОНЦА". В данном конкретном примере больше помогло бы выключение капслока у программиста с параллельным битьем по голове (все равно он в неё только ест).
Форматирование перенесенных выражений, в частности форматирование текста запроса (выравнивание по оператору присваивания, а не по левому краю рабочей области). В приведенном примере программист специально и перенес его, чтобы текст запроса находился в рабочей области кода и не было огромных пустот.

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

А то претензии выглядят как "Мы потратили на этот проект кучу денег, а он не делает того, что мы хотим. Срочно реализуйте!!!"
unmensch; citicat; YanTsys; JohnyDeath; +4 Ответить
12. Артано 658 20.06.17 08:37 Сейчас в теме
(10) Претензий нет к пуговицам. написал о том, что резануло глаз и выразил пожелание, что это не жестко зашитая в проект логика, а настраиваемый шаблон. Проект не дающий базовых вещей сразу не будет популярен для пользователей, а найти разработчика, который будет его ковырять из любви к искусству сложно. А вот на популярный проект и желающих разработчиков будет больше
13. infosoft-v 313 20.06.17 09:15 Сейчас в теме
очень усложняется работа с поиском при работе с незнакомым кодом, например, если нужно найти все места, где присваиваются значения конкретного реквизита


Никак не могу взять в толк, почему?
17. YOr!k 86 20.06.17 13:11 Сейчас в теме
(13)
Никак не могу взять в толк, почему?

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

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

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

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

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

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

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

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


Заменить автохоткей на снегопат не должно быть проблемой
31. bsi 23.06.17 10:29 Сейчас в теме
32. orefkov 1973 23.06.17 10:47 Сейчас в теме
43. Rustig 1189 28.11.18 21:51 Сейчас в теме
(14) видео сделайте как вы на снегопаде решаете конкретную задачу
до сих пор ничего не использовал, интересно увидеть фильм от начала до конца, а не отдельные обрывки Если Тогда КонецЕсли
21. orefkov 1973 20.06.17 14:37 Сейчас в теме
Просто со снегопатом можно напрямую текст текущего модуля получить и потом вставить.
Да и форму для настроек удобно сделать.
22. ret-Phoenix 454 20.06.17 14:44 Сейчас в теме
Форму настроек можно и у меня сделать, OneScript + GUI, сейчас вся визуальная часть на это переводится.
23. roofless 22 20.06.17 16:22 Сейчас в теме
из коробки должно работать?
другие скрипты выполняются, а "ctrl+alt+f" только форматирует стандартным "alt+shift+f"
24. Stepa86 1232 20.06.17 17:48 Сейчас в теме
(23) Если форматирует только стандартным и дальше ничего не происходит, то это так скрипт крашится. В 90% случаев это изза неправильного файла настроек \configs\OneStyle.json . Он должен быть корректного формата json. Про оставшиеся 10% ничего не могу сказать - нужно разбираться детальнее.

Если что скрипт отрабатывает не мгновенно, подгрузка движка оскрипта занимает около секунды
25. roofless 22 21.06.17 08:08 Сейчас в теме
(24)вижу, что поехали наименования файлов(( как восстановить?
Прикрепленные файлы:
26. Stepa86 1232 21.06.17 08:19 Сейчас в теме
27. Stepa86 1232 21.06.17 08:21 Сейчас в теме
(25) Хотя дело наверно в архиваторе. Попробуй чем нить другим распаковать
28. roofless 22 21.06.17 09:03 Сейчас в теме
(27) верно, всё работает. спасибо!
30. kare 21 22.06.17 08:18 Сейчас в теме
(28) у меня тоже самое было, спасибо за комментарии ! 7z решил проблему.
roofless; +1 Ответить
29. CheBurator 3395 21.06.17 23:55 Сейчас в теме
по п.3

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

-А - это все-таки унитарная операция. и отрывать минус от операнда - фу-фу-фу...
zqzq; klinval; madonov; +3 Ответить
38. Stepa86 1232 03.07.17 19:32 Сейчас в теме
(29) Пофиксил. Теперь унарный минус всегда прилипает к операнду. На данный момент изменения только в моем форке
33. Stepa86 1232 26.06.17 09:57 Сейчас в теме
Лайфхак для тех, кто не хочет всегда при форматировании выравнивать по равно, но иногда все таки выравнивает избранные куски (думаю таких не много, 80-95% всего лишь). Отключаете выравнивание в настройках уанстайла и ставите себе маленькую программку TNice https://habrahabr.ru/post/229833/ https://github.com/MrShoor/TNice , которая умеет выравнивать более точечно.
34. Akbis 49 30.06.17 08:38 Сейчас в теме
Полезная штука, форматирование текста очень пригодилось. Спасибо!

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

В OneStyle.json задал
"ВыравниватьПоРавно": true,
"ВыравниватьПоСкобке": false,
"ВыравниватьПоЗапятой": false,
"ВыравниватьПоКомментариям": false
- то есть хочу выравниваться только по Равно. По скобкам вообще не хочу. Но эти настройки не вступают в силу.

Далее остальные функции работают не совсем стабильно. Например Вызов списка методов: {ctrl +1} нажимаю список выходит, далее как мне прокликать и попасть в выбранный метод? Не получается чтото..
35. Stepa86 1232 30.06.17 09:04 Сейчас в теме
(34) Про региональные настройки ничего не скажу. Глючить в стеке может AHK, скрипт под AHK, оскрипт и скрипт под оскрипт. Ну и умеет работать только с русским текстом, под английский я его не адаптировал и не планирую.

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

По остальным функциям лучше спрашивать автора http://infostart.ru/public/339035/ . Сейчас, насколько я знаю, эти списки заточены под работу клавиатурой и не ловят мыша, но Сергей планирует переписать все диалоги на оскрипт и вообще отказаться от AHK. Если интересен проект, то можно его пообсуждать тут https://gitter.im/v8CfgAddsAhk/Lobby
37. inf012 30.06.17 09:33 Сейчас в теме
Но, все таки, сама 1С разрешает (допускает) использование выравнивания:
https://its.1c.ru/db/v8std#content:2149184090:hdoc
39. gubanoff 46 11.09.17 13:44 Сейчас в теме
(0) добавьте пакетную обработку всех модулей конфигурации, выгруженных в текстовые файлы. Ведь все равно обработка, как я понял
(20) через файлы идет. Тогда можно было бы сразу всю конфигурацию привести к приличному виду.
Тогда и автохоткей не понадобиться. Это тоже плюс.
40. ret-Phoenix 454 12.09.17 10:21 Сейчас в теме
(39) Вообще-то AHK используется только для запуска скрипта с параметрами.
system\OneScript\bin\oscript.exe scripts\OneStyle\Main.os %fileName%

	Источник = "tmp\module.txt";
	Если Параметры.Количество() > 0 Тогда
		Источник = Параметры[0];
	КонецЕсли;
	Приемник = Источник;
	Если Параметры.Количество() > 1 Тогда
		Приемник = Параметры[1];
	КонецЕсли;
Показать


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

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

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


P.S. Обновил статью на ИС и выложил комплексное обновление.
41. gubanoff 46 13.11.17 16:11 Сейчас в теме
(0) попробовали, нашли ряд случаев, когда форматирование выполняется некорректно - операторы разрываются на две строки, что приводит к синтаксическим ошибкам. Примеры прилагаю. Прошу исправить.
Прикрепленные файлы:
OneStyle.json
Перенос_глВопрос.txt
Перенос_УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки.txt
ПереносУсловия_ДокументСсылка.УниверсальноеПеремещение.txt
ПереносУсловия_СтрокаОтбора.ВидОтбора = Значени.txt
42. Stepa86 1232 13.11.17 16:48 Сейчас в теме
(41) Это опенсорс. Если что то не нравится - можете сами у себя поправить. Если хотите этим поделиться с другими - готов рассмотреть ваши пулл-реквесты в https://github.com/Stepa86/v8CfgAddsAhk

У меня сейчас нет ни желания ни времени дорабатывать этот проект для других. Меня текущая работоспособность устраивает.
45. Rustig 1189 28.11.18 21:54 Сейчас в теме
(42)
Меня текущая работоспособность устраивает.

видео снимите пож-та как вы программируете - "насколько ваша разработка ускоряет программирование"
44. Rustig 1189 28.11.18 21:53 Сейчас в теме
(0) у вас на сайте
Нужно скачать и установить autohotkey https://autohotkey.com/

фон кода черный - скажите , это нормально для вас так программировать? на черном фоне, желтыми буквами....
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день


Руководитель проектов 1С
Санкт-Петербург
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Программист 1С
Москва
зарплата от 120 000 руб. до 150 000 руб.
Полный день