cfg: log unused config entries

This commit is contained in:
Megamouse 2021-03-20 14:19:00 +01:00 committed by Ivan
parent ae01e1d2c3
commit cb9e7358d2
2 changed files with 59 additions and 0 deletions

View File

@ -12,6 +12,7 @@
#include "util/yaml.hpp"
#include "Utilities/File.h"
#include "Utilities/Config.h"
LOG_CHANNEL(cfg_log, "CFG");
@ -173,8 +174,64 @@ void emu_settings::LoadSettings(const std::string& title_id)
}
}
void emu_settings::ValidateSettings()
{
std::function<void(int, const YAML::Node&, std::vector<std::string>&, cfg::_base*)> search_level;
search_level = [&search_level](int level, const YAML::Node& yml_node, std::vector<std::string>& keys, cfg::_base* cfg_base)
{
if (!yml_node || !yml_node.IsMap())
{
return;
}
const int next_level = level + 1;
for (const auto& yml_entry : yml_node)
{
const std::string key = yml_entry.first.Scalar();
cfg::_base* cfg_node = nullptr;
keys.resize(next_level);
keys[level] = key;
if (cfg_base && cfg_base->get_type() == cfg::type::node)
{
for (const auto& [name, node] : static_cast<const cfg::node*>(cfg_base)->get_nodes())
{
if (name == keys[level])
{
cfg_node = node;
break;
}
}
}
if (cfg_node)
{
search_level(next_level, yml_node[key], keys, cfg_node);
}
else
{
std::string key;
for (usz i = 0; i < keys.size(); i++)
{
key += keys[i];
if (i < keys.size() - 1) key += ": ";
}
cfg_log.warning("Unknown config entry found: %s", key);
}
}
};
cfg_root root;
std::vector<std::string> keys;
search_level(0, m_current_settings, keys, &root);
}
void emu_settings::SaveSettings()
{
ValidateSettings();
YAML::Emitter out;
emit_data(out, m_current_settings);

View File

@ -94,6 +94,8 @@ public Q_SLOTS:
/** Writes the unsaved settings to file. Used in settings dialog on accept.*/
void SaveSettings();
private:
void ValidateSettings();
YAML::Node m_default_settings; // The default settings as a YAML node.
YAML::Node m_current_settings; // The current settings as a YAML node.
std::string m_title_id;