Opened 5 months ago
Closed 3 months ago
#696 closed улучшение (готово)
Улучшение диагностики регулярных выражений плат VE-*
Reported by: | alx | Owned by: | alx |
---|---|---|---|
Priority: | средний | Milestone: | 2 очередь |
Component: | sw | Keywords: | |
Cc: | san |
Description
В платах VE-01/VE-02/VE-12 широко используются регулярные выражения (в том числе с подстановками). Иногда (в некоторых сложных или "хитрых" случаях) бывает трудно составить их правильно, легко ошибиться. Кроме этого, в платах используется сразу две альтернативные реализации регулярных выражений (libpcre и libpcre2), не совсем совместимые друг с другом по синтаксису.
Предлагается реализовать ряд функций, которые могут помочь пользователям при конфигурировании регулярных выражений и замен.
- При использовании рег. выражений с заменой ссылки на группы захвата в строке замены имеют вид
\1
,\2
и т.д. в случае PCRE и$1
,$2
и т.д. в случае PCRE2. Предлагается при наличии в строке замены ссылок в синтаксисе PCRE автоматически выделять их желтым цветом, если режим PCRE "авто" (чтобы пользователь видел, что будет использоваться синтаксис PCRE) и красным если режим PCRE "PCRE2".
- Собственно регулярное выражение в процессе его ввода отправлять на сервер для валидации (и там их компилировать). В случае ошибки компиляции выделять красным тот символ, на котором возникла ошибка компиляции (или даже от этого символа до конца строки).
- Добавить дополнительную функцию теста регулярных выражений - какая-нибудь специальная иконка рядом со строкой ввода, при клике которой появляется новый диалог. В этом диалоге должна быть копия строки ввода соответствующего выражения, а ниже несколько строк для ввода тестового текста. Эти тестовые строки вместе с рег. выражением должны передаваться на сервер и там матчиться (опционально с заменой), а результаты должны отображаться в диалоге (примерно как в Zabbix можно протестировать применение javascript-аплетов). Это позволит пользователю сразу видеть результат применения рег. выражения (и замены) для всех интересующих его случаев.
Change History (8)
comment:1 by , 5 months ago
comment:2 by , 5 months ago
Cc: | added |
---|
На данный момент частично реализовано предложение 1 (только ссылки в стиле PCRE) и предложение 2 полностью.
По предложению 1: ссылки в стиле PCRE2 могут быть сложными (учитывая расширенный режим замены, когда поддерживаются выражения в стиле переменных bash, типа ${12:+123:-456}
), я затрудняюсь написать регулярное выражение для их нахождения. Но и, наверное, как раз ссылки PCRE2 выделять не очень-то и надо. Но если кто-то поможет с рег. выражением, я, возможно, добавлю выделение ссылок PCRE2...
По предложению 2 я заметил, что очень часто ошибки компиляции возникают в самом конце выражения (ошибки типа отсутствия закрывающей скобки). Компилятор в таких случаях устанавливает указатель ошибки после последнего символа, и выделять цветом, получается, нечего... Пока сделал для таких случае выделение всего рег. выражения, но может быть есть мысли, как сделать лучше?
Что сделано:
- шрифт вводимого тексте сделан моноширинным (так удобнее видеть выделение);
- в строке замены выделяется ссылка в стиле PCRE (желтым в режиме "авто" и красным (точнее, скорее розовым) в режиме PCRE2) - локально в браузере;
- строка замены ищется только при наличии у поля класса
replace
, иначе текст всегда трактуется и проверяется как рег. выражение (строки типа блокировок вызовов, где нет замен). - собственно рег. выражение отправляется для проверки на сервер (при отсутствии нового ввода в течение 300 мс);
- ответы от сервера (результаты проверки) кэшируются на странице;
- Ошибка отображается в зависимости от установленного режима (в режиме "PCRE" - ошибки libpcre, в режиме "PCRE2" - ошибки libpcre2, в режиме "авто" - libpcre если в строке замены есть ссылки в стиле PCRE и libpcre2 в противном случае), ошибка выделяется желтым если ее вернула libpcre2, и при этом libpcre скомпилировал это же выражение без ошибок (не проверялось - я не смог найти такого выражения), в противном случае выделение красным;
- при наведении курсора на отмеченную ошибку отображается tooltip с текстом ошибки;
- при разметке сохраняется позиция выделения и курсора.
Сейчас в блоке "Нижний Самурай" можно посмотреть текущую реализацию предложений тикета в диалоге конфигурации канального окончания FXS в параметре "Рег. выражение набора" (и только там) плат VE-01/VE-02. Так как нативное поле ввода не позволяет размечать вводимый текст, пришлось делать собственный аналог поля ввода (этакий закат солнца вручную), чтоы он был максимально похож на нативное поле. Если возможно, прошу поиграть с ним и обратить внимание на возможные странности в поведении (изменение ширины, неожиданные перемещения курсора, перепутывание символов и т.п.).
comment:4 by , 5 months ago
Известные проблемы на текущий момент:
- Safari не показывает первоначальную раскраску (не подсвечивает ошибки в строках в момент открытия диалога). При интерактивном вводе подсвечивает.
При открытии диалога факус почему-то оказывается на поле<div class="textInput"/>
(вероятно, это связано с функцией восстановления текущего выделенияrestorePosition()
).- В элемент
<div class="textInput"/>
можно встаыить текст с переводом строки, (а в Firefox вообще любой RTF, так как Mozilla не поддерживает значениеplaintext-only
атрибутаcontenteditable
). Элемент при этом становится многострочным...
comment:8 by , 3 months ago
Resolution: | → готово |
---|---|
Status: | new → closed |
Полностью реализовано в r2412.
In 2392/sw: