Изменение в работе макросов примерно после сборки 5350

Здесь можно сообщить о найденных багах в Far.
Post Reply
buniak_a_h
Posts: 705
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Изменение в работе макросов примерно после сборки 5350

Post by buniak_a_h » Thu 17 Jan, 2019 09:21

Что-то изменилось в функции editor.Select() - она теперь вылетает без второго параметра. К сожалению, не могу точно указать номер версии, с которой сломался вызов. Если очень надо - могу поискать, но авторы, наверно, и так знают, что менялось. Точно в старой 5193 ещё работал; в 5352 - уже нет. Велет описан, в частности, в viewtopic.php?p=152598#p152598. Некоторые мои скрипты тоже сломались.
Напомню. Вызов без 2-го параметра приводил к гашению выделения.
В changelog-е я об этом ничего не нашёл. Как-то неожиданно... :mad:
Last edited by buniak_a_h on Thu 17 Jan, 2019 09:26, edited 3 times in total.

Shtirla
Posts: 107
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 8 times
Been thanked: 2 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shtirla » Thu 17 Jan, 2019 13:46

что то случилось с обновленнием в версии 5354 начал ругаться на макросы при запуске

Code: Select all

Macros\scripts\LuaManager.lua:227: bad argument #3 to 'Get' (invalid flag)   
вызов функции выглядит вот так

Code: Select all

local function Load1(n,d) return not defaults and obj:Get(key or -1,n,({string=F.FST_STRING,number=F.FST_QWORD})[type(d)]) or d end
второй пример с той же функцией

Code: Select all

FastFind Enhanced\FastFind Enhanced.dll:
FastFind Enhanced\ffind.lua:420: bad argument #3 to 'Get' (invalid flag)
на версии 5350 вроде (какая вчера была в стабильных?) не наблюдалось.



пошел искать рабочую версию...

upd: про пути удалил, косяка нет
Last edited by Shtirla on Thu 17 Jan, 2019 14:13, edited 1 time in total.

Shmuel
Posts: 5739
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 204 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel » Thu 17 Jan, 2019 14:22

По поводу изменившегося поведения макросов.

1. Смотрите запись в LuaMacro\changelog, build 679, пункт 4, а также мантис #3663.

2. В двух словах: все до сих пор репорты о поломанных макросах, это на самом деле изначально неправильные макросы, передававшие nil вместо аргументов-флагов, не обозначенных в документации как опциональные аргументы. До поры до времени это работало, а теперь, будьте добры, приведите свой код в соответствие с документацией.

3. Насчёт Fast Find Enhanced - строка 420 в ffind.lua не содержит функции Get - у вас наверное какая-то древняя версия. Возьмите версию 1.0.0.5 и сделайте в ней правку, указанную в последних сообщениях темы плагина.

buniak_a_h
Posts: 705
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h » Thu 17 Jan, 2019 15:16

Shmuel wrote:
Thu 17 Jan, 2019 14:22
1. Смотрите запись в LuaMacro\changelog, build 679, пункт 4, а также мантис #3663.

2. В двух словах: все до сих пор репорты о поломанных макросах, это на самом деле изначально неправильные макросы, передававшие nil вместо аргументов-флагов, не обозначенных в документации как опциональные аргументы. До поры до времени это работало, а теперь, будьте добры, приведите свой код в соответствие с документацией.
Запись в changelog-е:
возможность опустить параметры-флаги может быть нежелательна.
Ну... может быть нежелательна - это не значит, что надо ломать то, что работало. :-( Менее трудоёмко и травматично для конечного пользователя было бы изменить документацию, указав, что этот параметр - опциональный... Ладно - мои скрипты, легко найти. А многие взяты с форума. И теперь напряг: когда стрельнёт и сколько данных потеряю?...

Shmuel
Posts: 5739
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 204 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel » Thu 17 Jan, 2019 15:28

Не передёргивайте. Запись в чейнжлоге: #M3663: возможность опустить параметры-флаги может быть нежелательна. это общепринятое для чейнжлогов цитирование заголовка тикета на мантисе (автор фразы = автор тикета).

Никто ничего не ломал. Полагаться на недокументированное поведение - это быть самим себе злобным буратино.

buniak_a_h
Posts: 705
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h » Thu 17 Jan, 2019 15:56

Не хочется вступать в дискуссию, но агрессивность ответа вынуждает...
Shmuel wrote:
Thu 17 Jan, 2019 15:28
Не передёргивайте. Запись в чейнжлоге: #M3663: возможность опустить параметры-флаги может быть нежелательна. это общепринятое для чейнжлогов цитирование заголовка тикета на мантисе (автор фразы = автор тикета).
1. Я ничего не передёргивал. Вы сослались на этот пункт; я его просто процитировал, чтоб удобнее было (чтоб не лазать в текстовый файл).
2. «Общепринятое» - я не в курсе. С мантисом только тут сталкивался. Обычно если цитирование, то в кавычках; там их нет
3. На самом деле если Вы вносите изменения, которые могут повлиять на работу ФАРа, то (а) надо писать конкретно, в чём заключаются изменения и (б) писать это в общем changelog-е ФАРа. Я не знаю структуры модулей проекта; для меня как для конечного пользователя исполнением макроса "заведует" Far file manager. А что он на самом деле делает это посредством вызова плагина - это технические подробности, ненужные пользователю. Тем более, что этот плагин входит к комплект поставки.
Shmuel wrote:
Thu 17 Jan, 2019 15:28
Никто ничего не ломал. Полагаться на недокументированное поведение - это быть самим себе злобным буратино.
Повторюсь. Перестали работать те скрипты, которые я брал с форума. Ну, мне-то исправить - легко. Но ведь есть люди, которые ничего про лаги не знают.
Если Вы убрали "четную" ошибку, в результате чего что-то перестало работать - это и называется "сломали". Я же не спорю, что была ошибка.
Пример на мантисе, конечно, эффектный, но:
функция editor.Select: второй параметр - либо таблица, либо 5 параметров. Таблица может быть пустой, и от этого ваше изменение не спасёт. Тут, скорее, надо было сделать так: если параметр - флаг, то он - обязательный. Если параметр может быть таблицей, то вызов без флага должен приравниваться к вызову с пустой таблицей.

buniak_a_h
Posts: 705
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h » Thu 17 Jan, 2019 16:02

Shmuel, кстати вдогонку.
Опять же конкретно о функции editor.Select. С пустой таблицей в качестве второго параметра она отрабатывает как раньше. Нелогично... Должна вылетать, т.к. элемент BlockType: flags не указан...

Shmuel
Posts: 5739
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 204 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel » Thu 17 Jan, 2019 16:04

Данный тикет #3663 на мантисе преследует определённую цель - исключить ряд ошибок в макросах, когда забывают передать параметр или передают неинициализированную переменную, или (что то же самое) переменную с ошибкой в наборе имени.

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

Дальнейших ответов здесь на эту тему от меня не будет.

Shtirla
Posts: 107
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 8 times
Been thanked: 2 times

Изменение в работе макросов примерно после сборки 5350

Post by Shtirla » Fri 18 Jan, 2019 10:16

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

ну да ладно, вроде победил проблему, вопрос, как определить где она еще может остаться? Пересматривать все макросы нереально....
может есть предложения?

User avatar
John Doe
Бюрократ
Posts: 12248
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Изменение в работе макросов примерно после сборки 5350

Post by John Doe » Fri 18 Jan, 2019 10:20

Shtirla wrote:
Fri 18 Jan, 2019 10:16
да и в стабильные сборки фар с такими изменениями (пусть и в дочернем плагине) как то рано записывать
А в какой момент станет не "рано", а "пора"?
Shtirla wrote:
Fri 18 Jan, 2019 10:16
как определить где она еще может остаться?
По красным окошкам с текстом ошибки и содержимым стека.

Shtirla
Posts: 107
Joined: Wed 04 Mar, 2009 20:09
Has thanked: 8 times
Been thanked: 2 times

Изменение в работе макросов примерно после сборки 5350

Post by Shtirla » Fri 18 Jan, 2019 10:37

Ну хотя бы когда те авторы макросов, которые здесь перестали бы удивляться и скрипты в общем доступе порпавили/ проверили.

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

buniak_a_h
Posts: 705
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 67 times
Been thanked: 19 times
Contact:

Изменение в работе макросов примерно после сборки 5350

Post by buniak_a_h » Fri 18 Jan, 2019 18:13

Shtirla wrote:
Fri 18 Jan, 2019 10:16
ну да ладно, вроде победил проблему, вопрос, как определить где она еще может остаться? Пересматривать все макросы нереально....
может есть предложения?
Есть идея. Подозреваю, что трудоёмкая и будет отвергнута...
Придумать механизм описания интерфейса вызова функций, регистрации этих описаний и в макросе синтаксической проверки например, Luacheck FAR scripts от jd, а также в far.MacroCheck добавить проверку синтаксиса вызова зарегистрированных функций
Есть ещё мысль: если вызов функции предполагает две формы указания параметров: позиционный и ключевой (в таблице), то автоматически считать эти параметры опциональными, т.к. в таблице они могут быть опущены, и это не приведёт к "красному окошку"

Post Reply

Return to “Глюки и баги”