При нажатии ENTER внутри многострочного комментария автоматически добавлять "//" в начало новой строки

tormozit Закрыто

При нажатии ENTER внутри многострочного комментария автоматически добавлять "//" в начало новой строки аналогично тому, как обрабатывается нажатие ENTER внутри строкового литерала.

//.
// Возвращаемое значение:
//   Соответствие - 
Функция НедоступныеТипы() Экспорт

В EDT так уже давно работает. Это удобно. Хотя изредка конечно бывает что приходится удалять эти символы.

Это практически не вредно только начиная с добавления 3-й строки. При добавлении 2-й строки вред относительно часто возникает.

Скрипт "Автозавершение текущей конструкции" не подходит

  1. По его названию и даже подсказке трудно догадаться, что он может это делать.
  2. Очень часто нажимать CTRL+ENTER неудобно.

Комментарии

tormozit
#1, 27 октября 2024 22:02

Добавил аналогичную функцию в редактор кода ИР https://www.hostedredmine.com/issues/994795
Не хотелось бы перехватывать своим скриптом нажатие ENTER в конфигураторе.
Поэтому надеюсь на ее добавление в ядро Турбоконфа.

tormozit изменил статус на Открыто


bolsun
#2, 27 октября 2024 22:07

(1) tormozit, такая возможность была, на деле оказалось не удобно. Когда хочется добавить пустую строку после комментария.


tormozit
#3, ред. 27 октября 2024 23:00

Еще раз проанализировал вредные условия срабатывания этой функции. Сделал ее применение более условным.
Обновил описание https://www.hostedredmine.com/issues/994795
Кажется в таком виде вредные срабатывания будут очень редки.
Вот код условия

	Если Истина
		И мКонечнаяСтрока > 1
		И Лев(СокрЛ(ПолеТекста.ПолучитьСтроку(мКонечнаяСтрока - 1)), 2) = "//"
		И Лев(СокрЛ(ПолеТекста.ПолучитьСтроку(мКонечнаяСтрока)), 2) <> "//"
		И мКонечнаяСтрока < ПолеТекста.КоличествоСтрок()
	Тогда
		СледующаяСтрока = СокрЛ(ПолеТекста.ПолучитьСтроку(мКонечнаяСтрока + 1));
		Если Ложь
			Или ирОбщий.СтрНачинаетсяСЛкс(СледующаяСтрока, "//")
			Или ирОбщий.СтрНачинаетсяСЛкс(СледующаяСтрока, "&")
			Или ирОбщий.СтрНачинаетсяСЛкс(СледующаяСтрока, "Асинх")
			Или ирОбщий.СтрНачинаетсяСЛкс(СледующаяСтрока, "Процедура")
			Или ирОбщий.СтрНачинаетсяСЛкс(СледующаяСтрока, "Функция")
		Тогда
			ПолеТекста.ВыделенныйТекст("// ");
		КонецЕсли;
	КонецЕсли;


tormozit
#4, 31 октября 2024 07:18

Кто то видит вред в таком алгоритме работы? Потестировать можно в ИР консоли кода.


amiralnar
#5, 31 октября 2024 16:19

(4) tormozit, Протестировал. Работает отлично!


bolsun
#6, 04 ноября 2024 12:00

(3) tormozit, попробуем


bolsun
#7, 04 декабря 2024 21:51

Добавлено в 6.3.9104.42682
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg


bolsun
#8, 04 декабря 2024 22:01

Работает не всегда правильно, скоро будет исправление.


bolsun
#9, 04 декабря 2024 22:06

6.3.9105.117
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg


bolsun
#10, 04 декабря 2024 22:07


tormozit
#11, ред. 05 декабря 2024 00:03

В последней строке не надо добавлять. Обычно в теле метода пишут однострочный комментарий, а многострочный - очень редко. Не хочу чтобы в этом случае вставлялся комментарий в следующей строке - мне его придется удалять в 90% случаев. В (3) я написал четкое и хорошо протестированное условие. Оно вставляет комментарий в следующей строке только если она внутри блока комментариев или перед началом метода.


bolsun
#12, ред. 05 декабря 2024 00:14

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


tormozit
#13, 05 декабря 2024 00:17

(12) bolsun, да, я сначала плохо рассмотрел твою демонстрацию. Теперь понял. Если ENTER нажимаем в середине строки комментария, то в новую строку полезно вставлять комментарий, т.к. обычно это просто разбивка комментария на 2 строки. Тогда буду тестировать.


bolsun
#14, 05 декабря 2024 00:31

(13) tormozit, жду результатов тестирования, для отправки версии в канал разработчиков.


tormozit
#15, ред. 05 декабря 2024 00:39

Основные сценарии проверил. Все хорошо. Но на мой вкус еще бы пробел ставить сразу после такой вставки "//". Так мне читать комментарии удобнее. Поэтому я всегда ставлю пробел.


bolsun
#16, 05 декабря 2024 01:02

(15) tormozit, можно конечно проверить, есть ли пробел в текущей строке после // и тогда вставлять.


bolsun
#17, 05 декабря 2024 01:12

(15) tormozit,
6.3.9105.5671
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg

Если есть пробел после // в текущей строке, то будет добавлен и в следующей


tormozit
#18, 05 декабря 2024 09:11

(17) bolsun, пробел не добавляется. Нажать ENTER в первой строке

// Тест
//


bolsun
#19, ред. 05 декабря 2024 12:40

(18) tormozit, у меня добавляется, какая версия, точно обновил до 6.3.9105.5671? Пришли лог


bolsun
#20, 05 декабря 2024 12:40

и где находится каретка в данном примере


tormozit
#21, 05 декабря 2024 12:41

(19) bolsun, полный тест

функция Хом1() Экспорт    
	тз = Новый ТаблицаЗначений; 
	тз.Найти("Регистратор");  
	ирОбщий.BinaryCOMSafeArrayToHEXЛкс() // РасширениеПоляФормыДляПоляВвода    
	// Тест
	//
КонецФункции


bolsun
#22, 05 декабря 2024 12:41

(21) tormozit, понял, да в этом случае не добавляет


bolsun
#23, 05 декабря 2024 16:11

(21) tormozit, исправил
6.3.9105.32356
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg


bolsun
#24, 05 декабря 2024 21:13

bolsun изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера