Пустые группировки в регулярном выражении
Реализовать правило: "Пустые группировки в регулярном выражении не несут смысла"
Comments (26)
-
reporter -
reporter Реализовано
-
repo owner Тестировать это сейчас только через юнит-тесты можно? Чем скорее и удобнее будет тестирование, тем лучше...
-
repo owner Еще
а) отучитесь вы уже писать комменты на русском, тем более там не такие уж сложные фразы
б) не надо комиттить отладочную печать - даже в тестах - и подобные вещи, в репозитории код должен быть чистым (и комментирование части тестов тоже не стоит комититть). Через shelve вполне возможно закомиттить часть изменений в файл если это необходимо.
-
reporter Интерфейс в простейшем виде реализован, им тоже можно пользоваться. Что касается группировок, то тут осталась одна проблема. В случае, когда пустая группировка является едиственным дочерним элементом оператора, этот оператор тоже надо удалять. Например для "a(?:){3}" должно быть так "a", а не "a{3}". Как только это поправлю, сразу напишу сюда
-
reporter Реализовано
-
repo owner У вас ftp-доступ к edu.vstu.org есть? Если есть интерфейс для тестирования - выкладывайте туда. А шикарно было бы доделать к интерфейсу кнопку, которая показывала бы код юнит-теста или запоминала комбинацию для юнит теста -подумать как проще всего накапливать новые примеры и ошибочные строки...
-
reporter Нет, доступа нету к ftp нету
-
repo owner -
repo owner Если не сможете найти - пишите, поищем еще раз.
-
repo owner По идее удалять нужно не только пустые группировки, но и группировки без альтернативы или конкатенации внутри. Кроме ситуаций типа (?:a{2})? чтобы отличить добавочный квантификатор от ленивости. Но по вложенным квантификаторам у нас должно было быть правило, оно готово?
-
repo owner То есть варианты типа (?:a){2} или (?:[ab]){2} тоже должны удалять группировки
-
reporter Да, я понял. Это реализовано как часть нормализации для CSE, правило же называется "Пустые группировки в регулярном выражении" и я подумал, что раз пользователь нарисовал эту группировку не пустую, то пусть будет. Но я согласен, что стоит предлагать убирать не нужные не пустые группировки, так что сделаю это
-
reporter Вобщем это тоже готово, осталось только текст подсказок поправить
-
repo owner Да текст должен быть другим. Думаю стоит назвать "Не нужные" или "Бесполезные" группировки, а не просто пустые...
Кстати и подмаски такие тоже надо обнаруживать и устранять если нет обратных ссылок/условных подмасок на них, а не только пустые. А то сейчас с подмасками в два правила работает - сначала она делает из нее группировку, и только потом замечает что группировка то там вовсе не нужна.
-
reporter Согласен, доделаю
-
reporter Случай с "(?:)" поправлен, CSE был виноват. Но остался баг с подсветкой в регулярке, если сервер вернул пустую регулярку, это пофикшу
-
repo owner (?:) подтверждаю, только надо разделить сообщение - когда пустые скобки, а когда они не влияют на выражение но все-таки не пустые... А то юзер очень сильно удивится...
-
reporter Сообщения поправлены
-
reporter Но есть баг. Вот такая штука "a(?:a|b)" проверяться не должна. Доделаю
-
reporter Готово
-
repo owner 1) (?:) когда составляет все выражение (результат получится пустым) - не удаляется при нажатии кнопки применить, хотя правило выдается.
Остальное работает
-
reporter Исправлено
-
repo owner Сервер виснет когда все выражение - (?:)
-
reporter Исправлено
-
repo owner Сервер больше не виснет, но когда выражение без конкатенаций и альтернатив то ничего и не происходит - как в случае (?:) так и (?:)+ например.
- Log in to comment
Осталось реализовать случай вложенных пустых группировок: (?:(?:(?:)))