• Определение неиспользуемых настроек в библиотеке libconfig

      Введение


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


      Проблема


      Так исторически сложилось, что большая часть конфигов внутри нашего проекта была написана на смеси json и yaml и парсилась с использованием библиотеки libconfig. Переписывать соответствующий код и содержимое конфигов, например на yaml, желания никакого не было, особенно когда есть куча других интересных и более сложных задач. Да и та часть библиотеки, что написана на C, сама по себе хороша: стабильна и богата функционалом (в обертке на C++ все не так однозначно).


      В один прекрасный день мы озаботились тем, чтобы выяснить, сколько мусора у нас накопилось в конфигурационных файлах. И такой опции у libconfig, к сожалению, не оказалось. Сначала мы попытались форкнуть проект на github и внести правки в ту часть, что написана на C++ (всевозможные методы lookup и operator[]), автоматизировав процесс выставления флага visited для ноды. Но это привело бы к очень большому патчу, принятие которого наверняка затянулось бы. И тогда выбор пал в сторону написания своей собственной обертки на C++, не затрагивая ядро libconfig.

      Читать дальше →