На этом этапе кодирования, помимо работы над преобразованием и обновлением правил (подробнее можно прочитать здесь), я также занимался обработкой исключений в Renraku. Поскольку правила могут быть созданы кем угодно и могут содержать некоторые ошибки, вы можете получить много ошибок исключения, когда вы нажимаете на метод. Раньше вы могли войти в режим, в котором вы игнорировали бы все ошибки, что не очень хорошо, потому что иногда пользователи могли не знать о наличии проблемы. Но благодаря этому обновлению теперь можно будет видеть все исключения на панели контроля качества, не прерываясь. Это будет полезно как для опытных разработчиков, которым часто приходится ломать определенные методы во время работы, так и для относительно новых пользователей Pharo, для которых такой подход будет менее утомительным, чем постоянное прерывание действительно раздражающими сообщениями об исключениях.

Дело в том, что Ренраку — невероятно мощный инструмент, с помощью которого можно реализовать множество полезных вещей. Например, Renraku можно использовать не только для сообщения критических замечаний, но и для сообщения о проблемах через средство отслеживания проблем Pharo. Таким образом, я запрограммировал ReExceptionProperty, который является подклассом ReProperty, показанным на панели контроля качества. ExceptionProperty сохраняет сообщение об исключении, чтобы отобразить его в качестве заголовка свойства. Он также сохраняет стек, с помощью которого вы можете отладить исключение, если это необходимо. Все, что вам нужно, это щелкнуть значок ошибки в сообщении об исключении, чтобы начать процесс отладки. Так что теперь пользователь может работать без перерывов (потому что они могут быть крайне раздражающими, если вы работаете в режиме разработчика и постоянно над чем-то экспериментируете), но при этом пользователь предупрежден о возникших исключениях.

Затем я работал над обработкой ошибок во время проверки в классе ReCriticEngine — в этом случае я добавил часть on:do: для обработки исключения, которая в основном похожа на try-catch на других языках программирования.

И, наконец, я работал над установкой исключений в настройках через ReExceptionStrategy. Есть три стратегии. Один — ReIgnoreExceptionStrategy — в соответствии со своим названием вообще игнорирует исключение и продолжает выполнение. Второй — RePassExceptionStrategy, который передает исключение, позволяя обрабатывать его обработчикам вверх по стеку, или открывает отладчик, если обработчиков нет. И последний, ReLogExceptionStrategy, — сообщает об исключении как о свойстве (критике), которое впоследствии можно отладить. Вот код для него:

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

— M