gifts2017

Автоформатирование кода

Опубликовал Дмитрий Круглов (Sibars) в раздел Администрирование - Сервисные утилиты

Как часто приходится работать в режиме аврала, когда на оформление кода не хватает времени?
И как лениво порой бывает, возвращаться к уже рабочему коду, что бы отформатировать его и привести в порядок.
Данная обработка позволяет автоматически форматировать текст кода, в соответствии с настройками пользователя.
Это позволит привести ваш код, как уже написанный так и будущий к единому оформлению.

Что это?

Это внешняя обработка, написанная на управляемых формах (то есть работает только под 8.2).

Как с этим работать?

Работа предполагается в режиме тонкого или толстого клиента. Копируется блок кода (можно кусочком, можно модуль целиком) и помещается в левую часть экрана, нажимается волшебная кнопка и вправой части - появляется отформатированный код.

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

А что она может:

  1. Все строчки а-ля Переменная=4; Переменна2=5; будут оформленны в две строки;
  2. Все двойные пробелы "  " будут заменены на один " ";
  3. Все двойные пустые строчки будут заменены на одинарные;
  4. Все что есть в списке "Регулярных выражений" будет приведено к одному регистру;
  5. Будут настроены отступы, в соотвествии с установленными правилами;
  6. Количество пробелов перед и после арифметических действий станет одинаковым, в соответствии с настройками пользователя (+,-,*,/,=);
  7. Можно будет выровнять знаки равенства при  последовательной установке значений (если между ними нет пустых строк);
  8. Можно настроить перед какими выражениями и после каких выражений обязательно нужна пустая строка;
  9. Можно настроить между какими выражениями не должно быть пустой строки;
  10. Система автоматически способна определить необходимость комментария к процедуре или функции и вставить шаблон комментария. Пропишет передаваемые параметры.

А как быть с комментариями и переменными?

Все что есть в комментариях и в переменных останется неизменным!

Что за пользовательские настройки и где их брать?

Система имеет настройку "По умолчанию" Хранит в макетах и можно будет начать работать с обработкой сразу.

Так же можно сохранять настройки как в стандартном хранилище настроек (возможности платформы), так и выгружать и загружать настройк в/из файла с расширением *.xml


Причины купить

Когда необходимо покупать?

1. Когда открываете свой код через полгода и долго разбираетесь что тут и как.

2. Когда одну конфигурацию разарабатывает несколько человек, и просто "бесят" привычки некоторых. Например ставить пробел после "=" или не выравнивать знаки равенства :)

3. Когда готовим решение к тиражированию и нужно однообразное оформление кода.

4. Когда есть тяга к прекрасному и красивому (оформлению), но так лениво эту тягу воплощать в жизнь.

Достоинства

Приводит к одному виду программный код разных авторов.

Позволяет не заморачиваться оформлением кода во время написания (полета мысли)

Сравнение версий

Версия 1.0

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

Наименование Файл Версия Размер
ФорматированиеТекста.epf 153
.epf 66,91Kb
10.01.13
153
.epf 66,91Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. qweasd qweasdzc (serega3333) 19.12.12 17:26
так автоформатирование как таковое не вкручено? хочется закрывать конфигуратор - открывать предприятие - нажимать кнопку в обработке - она парсит и обрабатывает...а тут копипаст туда сюда получается?
2. Евгений Сосна (pumbaE) 19.12.12 18:41
Вверху страницы баннер, там можно даже не закрывать конфигуратор.
Конечно не все там есть из перечисленного но можно и добавить.

p.s: в принципе, эту обработку думаю можно портировать для работы прямо из снегопата.
boggonzikov; +1 Ответить 1
3. Дмитрий Круглов (Sibars) 19.12.12 19:22
(1) serega3333,
Пока поддерживается только копипаст. В следующей версии предполагается выгрузка текстов модулей из режима предприятия и/или выбор уже выгруженных в файлы и их форматирование с сохранением в текстовые файлы.
Также предполагается запустить орфографическую проверку на наименование метаданных и переменных в модулях. Естественно с учетом правил именования объектов состоящих из нескольких слов.
4. Евгений Сосна (pumbaE) 19.12.12 19:27
Какой движок будете использовать для проверки орфографии?
совет: не забудьте добавить правила для исключений префиксов и суффиксов при проверке.
5. Дмитрий Круглов (Sibars) 19.12.12 19:33
(2) pumbaE,
Сам пользуюсь СНЕГОПАТОМ. Вещь с правильной пометкой "must have"!
Можно попробовать реализовать функционал и на скриптах, но стоит ли игра свеч, если учесть, что для всех фломастеры на вкус разные и надо учесть возможность настройки форматирования.
...
Если есть желание, могу предложить такой вариант:
Пишется скрипт для СНЕГОПАТА (сам пока не разбирался с написанием), который по хоткею, копирует выделенный фрагмент текста или весь модуль целиком и помещает его в текстовый файл.
Параллельно запущена моя обработка, которая определяет наличие этого файла, обрабатывает его и кладет новый файл с форматированным кодом рядом. Скрипту СНЕГОПАТА останется только получить текст из нового файла и заменить его на старый.
...
Автору такого скрипта с такой логикой или более удачной - в подарок эта обработка.
...
В будущем предполагается развитие данной обработки и наращивание функционала.
В целом это должно вылиться в небольшую конфигурацию, которая будет контролировать корректность написания кода по оформлению, орфографии, повторяемости процедур и функций, наличие циклов в циклах, запросов в циклах и тому подобное.
6. Дмитрий Круглов (Sibars) 19.12.12 19:35
(4) pumbaE,
Для орфографии будем использовать старый добрый Word.
C предложениями по вариантам замены, словарем исключений.
За совет спасибо. Префиксы и суффиксы постараемся учесть.
7. Дмитрий Круглов (Sibars) 19.12.12 19:38
Вообще идея такого автоформатирования родилась тогда, когда в отделе разработчики стали высказывать друг другу свои соображения по поводу как правильно надо оформлять код и что чужой код читать невыносимо.
Идея этой обработки заключается в том, что не надо переучиваться под единый стандарт, если привести к общему знаменателю можно набором достаточно нехитрых алгоритмов.
8. Евгений Сосна (pumbaE) 19.12.12 19:49
(5) Sibars, зачем же так сложно. Если есть обычная форма, то можно отделаться 5 строчками кода. Например для портирования обработки анализа цикломатической сложности кода, я добавил в модуль такие строки:
Процедура МакросАнализЦикломатическойСложностиТекущегоМодуля() Экспорт
	ТекстовоеОкно = Конфигуратор.snegopat.activeTextWindow();
	
	Если ТекстовоеОкно = Неопределено Тогда
		глВывестиСообщение("Не найдено текстовое окно!");
		Возврат;
	КонецЕсли;
	
	ИсходныйКод = ТекстовоеОкно.text;
	ТекстМодуля = ИсходныйКод;
	
	Форма = ПолучитьФорму("Форма");
	ВычислитьСложностьТекстаМодуля();
	Форма.ЭлементыФормы.Панель1.ТекущаяСтраница = Форма.ЭлементыФормы.Панель1.Страницы.СтраницаРезультаты;
	Форма.ОткрытьМодально();
	
КонецПроцедуры
...Показать Скрыть
и у меня теперь прям из конфигуратора работает данная обработка Пример

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

Посмотрите на скрипт spellchecker.js , там тоже есть проверка как word так и libreoffice.
9. Дмитрий Елисеев (w-divin) 19.12.12 19:53
прикольненько, но жаба давит...
а по поводу снегопата (юзверем которого также являюсь) там есть подобный механизм: format.js Функционал конечно послабее, но для халявного варианта хватает...
10. Дмитрий Круглов (Sibars) 19.12.12 19:55
(8) pumbaE,
Интересно. Спасибо.
Все форматирование происходит в модуле объекта. на формах реализованы только выбор настроек и вывод результата.
Еще бы придумать как настройки легко менять и будет вообще все в ажуре.
В принципе если заодно передать настройки в строке в формате XML можно для основного форматирования вообще обойтись без интерфейса.
А обработку использовать для создания настроек :)
Готовы взяться за сопряжение со СНЕГОПАТОМ?
11. Дмитрий Круглов (Sibars) 19.12.12 20:00
(9) w-divin,
Жаба она такая :)
А функционал будем наращивать! Планов - громадье)
И, надеюсь, задавим Вашу жабу объемом возможностей!
12. Евгений Сосна (pumbaE) 19.12.12 20:07
(10) Sibars, готов. Пишите на мыло. Мой профиль Сосна Евгений e-mail в скриптах думаю найдете :)
13. Дмитрий Круглов (Sibars) 19.12.12 20:10
(12) pumbaE,
Отлично! Завтра Вам напишу.
14. Модератор раздела Артур Аюханов (artbear) 20.12.12 11:10
Обработка полезна, но денежек жалко.
Сопряжение со Снегопатом платной разработки?
(12) Жень, неужели будешь работать с платной? или сделаешь интеграцию со Снегопатом, а автор снимет платность? :)
15. Дмитрий Круглов (Sibars) 20.12.12 11:30
(14) artbear,
Если обработка не полезна, то ей нет места ни в платном разделе, ни в бесплатном.
...
Посмотрим как это получится объединить со СНЕГОПАТОМ.
...
Возможно эта обработка через некоторое время станет продуктом лайт (то есть демкой, то бишь бесплатной).
А платной станет конфигурация, с большим функционалом.
Вопрос только сколько будет стоить эта конфигурация :)
Поэтому есть смысл купить обработку сейчас, что бы потом не платить больше.
Равно как и есть смысл подождать, когда обработка станет бесплатной.
Решение за вами!
16. Сергей Старых (tormozit) 20.12.12 11:55
17. Алексей Орлов (_also) 20.12.12 23:42
мне кажется актуально только со снегопатом, а pumbaE пора Снегопат store открывать ))). Скрипты по 99 центов будут разлетаться только в путь))
Dimon93dimon; w-divin; Sibars; +3 Ответить
18. Дмитрий Круглов (Sibars) 09.01.13 18:20
Решил выложить в общий доступ.
Работа по интегрированию в снегопат ведется.
Надеюсь у Евгения хватит терпения общаться с таким невеждой в JS как я и допилить функционал до рабочей версии.)
19. andrey dyak (dyak84) 09.01.13 18:51
Судя по скрин шотам вещь довольно интересная и нужная (автоматические ошибки бывает проскакивают что есть то есть). Появятся деньги обязательно скачаю. Автору спасибо
20. Модератор раздела Артур Аюханов (artbear) 10.01.13 12:12
(18) Молодец, спасибо.
Ждем скрипт для снегопата.
Готов помогать в его тестировании и добавлении хотелок
21. Дмитрий Круглов (Sibars) 10.01.13 12:16
(20) artbear, Возражений никаких нет, только приветствую).
А то из меня тестировщик не очень получается - то уеду, то подключить библиотеку не могу.
Если Евгений aka pumbaE не возражает, то милости просим)
22. Модератор раздела Артур Аюханов (artbear) 10.01.13 12:27
(22) Вряд ли Женя будет возражать, он меня знает :)
Женя, пиши в Гугл+ или гмейл напрямую.
23. Ярослав Радкевич (WKBAPKA) 10.01.13 13:36
а я немного покритикую... даже работая в режиме аврала я код оформляю как следует... единственное, чего я не делаю, так это не документирую, чего иногда не хватает...
а тем кто пишет как попало, вообще головы поотрывал бы... когда читаешь их код, думаешь, что они курили... я не в плане алгоритма, а в плане оформления, что бы удобно было читать... но за работу плюс
24. Дмитрий Круглов (Sibars) 10.01.13 13:43
(23) WKBAPKA, Это не критика, а повсеместная действительность )))
Именно из-за этого данная работа и была проделана.
1. Когда видишь такой код - спокойно его форматируешь, и читаешь уже более привычном формате.
2. Когда одну конфу пишут несколько человек, что бы не заставлять и не переучивать людей к единообразному оформлению. перед сдачей прогоняешь через обработку и получаешь единообразный код.
25. Ярослав Радкевич (WKBAPKA) 10.01.13 13:47
(24) Sibars,
если с этой точки зрения, когда пишут несколько человек, согласен, нужная вещь... вот интересно, а форматирует код под один шаблон, или можно под себя настраивать? а то не очень хорошо получается, пишут несколько человек, а код форматируется под одного человека ;)
26. Дмитрий Круглов (Sibars) 10.01.13 13:50
(25) WKBAPKA, Можно хранить неограниченное количество настроек.
Мы у себя в отделе за основу приняли стандарты оформления изложенные на диске ИТС + оптимизировали под себя.
Форматироваться код должен не под одного человека, а с точки зрения правил принятых между разработчиками -участниками.
27. Евгений Сосна (pumbaE) 10.01.13 14:24
Добавлю от себя, к моему сожалению от говнокода данная обработка не спасет, даже если нормально отформатирует. Эх...
28. Евгений Сосна (pumbaE) 10.01.13 14:27
В обработке ошибка, там остались вызовы процедур для снегопата, чтобы работала и в предприятии необходимо закомментировать процедуры "МакросФорматированиеВыделенногоТекста" , "ФорматированиеТекстаПоНастройке", "МакросФорматированиеВыделенногоТекстаФорма".
29. Дмитрий Круглов (Sibars) 10.01.13 14:34
(28) pumbaE, Евгений, ошибки нет, так как я выложил обработку не адаптированную под СНЕГОПАТ.
30. Евгений Сосна (pumbaE) 10.01.13 14:41
Прошу прощения, значит меня ввели в заблуждение.
31. Дмитрий Круглов (Sibars) 10.01.13 17:16
(30) pumbaE, Это я сам себя ввел в заблуждение. Теперь исправил. Обработку обновил.
32. Макс Зеленский (mzelensky) 16.01.13 08:02
довольно забавная штука
33. Maxim2012 (ZhokhovM) 21.01.13 11:19
Доброго времени суток! Добавьте ещё изменения:

1. 0 (пробел) 0 (кол-во пробелов до и после)
Пример:
Возврат (пробелы) СтруктураДействий; -> Возврат СтруктураДействий;

2.Расшифровка представления
Пример:
// ДанныеПараметры - ТИПДАННЫХ - ОПИСАНИЕ -> // ДанныеПараметры - ТИПДАННЫХ - Данные параметры
34. Алекс Ю (AlexO) 21.01.13 11:30
(0) есть такая функция в 1С - Alt+Shift+F
Все остальное - это придумывание себе работы.
Формуляты-оформляты....
Лучше б код писали грамотней.
И коментарии ставили....
roofless; VovkaPutin; +2 Ответить
35. Алекс Ю (AlexO) 21.01.13 11:32
(27) pumbaE,
к моему сожалению от говнокода данная обработка не спасет, даже если нормально отформатирует.

по-моему, такие обработки еще больше всего напихают в код, чего там и не нужно вовсе было, и безмерно его утяжелят.
36. Евгений Сосна (pumbaE) 21.01.13 12:06
(35) AlexO, при должной настройке наоборот помогают исправить некоторые недочеты, которые на первый взгляд и не видны.

alt+shift+f - это хорошо, но как показано на рисунке, после обработки значительно лучше выглядит текст.
Прикрепленные файлы:
37. Алекс Ю (AlexO) 21.01.13 14:32
(36) pumbaE,
ну вот сразу - вот это "фНеОтбиратьПодразделение" - это что такое? Фукнция без скобок? :)
38. Евгений Сосна (pumbaE) 21.01.13 14:56
(37) AlexO, прочтите еще раз (27) - данная обработка от говнокода не спасет, но вот от "ИНаче" , "ЕСли" и т.д. очень даже помогает. Я очень надеялся, что может быть достаточно такой код отформатировать нормально и станет чуть легче, но (27) .

Еще раз хочу акцентировать внимание, лучше уж отформаированный говнокод, чем неотформатированный.
Brawler; Sibars; +2 Ответить
39. Дмитрий Круглов (Sibars) 21.01.13 16:42
(33) Maxim2012,
От двойных пробелов убирает.
Возврат СтруктураДействий; -> Возврат СтруктураДействий;
..
Описание добавляет, если его нет, если описание есть - то оставляет его нетронутым

// ДанныеПараметры - ТИПДАННЫХ -> // ДанныеПараметры - ТИПДАННЫХ - ОПИСАНИЕ
, но если
// ДанныеПараметры - ТИПДАННЫХ - Параметр вывода ТЗ -> // ДанныеПараметры - ТИПДАННЫХ - Параметр вывода ТЗ
40. vladal (Vladal) 22.01.13 18:08
(0) Никак не избавлюсь от двойной пустой строки:
настроено пропускать строку после КонецЕсли/КонецЦикла
и пропускать строку перед КонецПроцедуры/КонецФункции

Оба правила накладываются и получаются некрасивые две пустые строки.
41. Дмитрий Круглов (Sibars) 24.01.13 06:16
(40) vladal, Не могу повторить такой же ситуации у себя. Если возможно, пришлите на d.d.kruglov@gmail.com файл настроек и текст для форматирования, в котором есть появляются две пустых строки.
42. Максим Солдатов (Maxis) 25.01.13 10:26
Интересная обработка! Но сам стараюсь изначально код оформлять нормально: так его и для себя в процессе работы читать проще)
43. Geo Leo (GerHard) 08.02.13 00:09
Вот что, снегопатофаны... Обработочка полезная, автору плюс.
У меня практически всегда когда что-то пишу рядом открыт и пользовательский режим. Не проблема CTRL-C CTRL-V пару раз жамкнуть. А учитывая возможность настройки под себя - да вообще вполне самостоятельная вещь.
44. Дмитрий Круглов (Sibars) 08.02.13 05:42
(43) GerHard спасибо).
По снегопату: Евгений (pumbaE) написал интеграцию к снегопату.
И соответственно, кто хочет - может использовать обработку как самостоятельную, кто со снегопатом - может загрузить ее функционал в него)
45. Евгений Фамилия (internetname) 08.02.13 13:04
Как-то привык уже сразу все форматировать.
46. Геннадьевич Бу (Геннадьевич) 22.03.13 19:17
На мой взгляд - полезно, но не удобно.

Что за СНЕГОПАД? Дайте ссылку посмотреть.
47. Евгений Сосна (pumbaE) 22.03.13 19:23
48. Геннадьевич Бу (Геннадьевич) 22.03.13 19:54
(47) pumbaE, Спасибо, но вроде писали что эта разработка бесплатна.
49. Евгений Сосна (pumbaE) 22.03.13 19:57
(48) Геннадьевич, эта разработка да - бесплатна, а инструмент платный.
50. Карина -- (ponaroshku) 16.04.13 10:04
51. {ÐƦǑƝȊ} mx (dour-dead) 11.06.13 08:49
52. V. L. (Vladal) 01.04.14 19:04
(0) Вот что обнаружил: в форматной строке с разными локалями делается перенос после первой точки с запятой. В результате появляется разрыв строкового параметра и синтаксическая ошибка.
Пример:
НСтр("ru = 'Накладная на перемещение';uk = 'Накладна на переміщення'", КодЯзыкаПечать)
разбивается на несколько строк и производится выравнивание знака равенства по самой длинной строке в блоке, добавляя 139 пробелов:
НСтр("ru = 'Накладная на перемещение';
	uk                                                                                                                                          = 'Накладна на переміщення'", КодЯзыкаПечать)
Я думаю, что в блоке поиска перевода строки по точке с запятой надо смотреть на парность кавычек.
53. Руслан Ибрагимов (break) 08.05.14 12:03
не хватает выравнивания по запятой
54. {ÐƦǑƝȊ} mx (dour-dead) 23.05.14 13:53
Не большой троллинг.
А так автору спасибо.
Прикрепленные файлы:
55. V. L. (Vladal) 18.09.14 23:44
(53) break, поддерживаю.
Пробовал нарисовать такое, да где-то прокол вышел - они потом все равно переформатируются.

(0) Что еще заметил: обработка режет большие комментарии - закомментированные блоки или текстовые описания и пояснения.
56. Дмитрий Круглов (Sibars) 19.09.14 07:05
Рад, что обработка оказалась полезной. Прошу прощения за долгое молчание - загруз на работе.
Ошибки и недочеты безусловно есть, но как часто бывает, нет времени их устранить, тем более, что после написания обработки стал писать код сразу правильно :))
Если у кого есть желание дописать обработку - welcome! Могу опубликовать обновленную версию у себя, можете выложить ее в своем блоге - ссылку на обновление здесь размещу.