MCPcopy Create free account
hub / github.com/DFHack/dfhack / setFilter

Function setFilter

plugins/debug.cpp:787–844  ·  view source on GitHub ↗

Handler for debugfilter set

Source from the content-addressed store, hash-verified

785
786//! Handler for debugfilter set
787static command_result setFilter(color_ostream& out,
788 std::vector<std::string>& parameters)
789{
790 bool persist = false;
791 size_t pos = 1u;
792 if (pos < parameters.size() &&
793 parameters[pos] == persistent) {
794 pos++;
795 persist = true;
796 }
797 if (pos >= parameters.size()) {
798 ERR(command,out).print("set requires at least the level parameter\n");
799 return CR_WRONG_USAGE;
800 }
801 const std::string& level = parameters[pos];
802 auto iter = std::find_if(levelNames.begin(), levelNames.end(),
803 [&level](const LevelName& v) -> bool {
804 return v.match(level);
805 });
806 if (iter == levelNames.end()) {
807 ERR(command,out).print("level ('{}') parameter must be one of "
808 "trace, debug, info, warning, error.\n",
809 parameters[pos]);
810 return CR_WRONG_USAGE;
811 }
812
813 DebugCategory::level filterLevel = static_cast<DebugCategory::level>(
814 iter - levelNames.begin());
815
816 unsigned line = 0;
817 Filter* newFilter = nullptr;
818 return applyCategoryFilters(out, parameters, pos + 1,
819 // After parameters parsing
820 [&parameters, pos, filterLevel,persist,&newFilter](DebugManager&, const std::regex& catRegex, const std::regex& pluginRegex)
821 {
822 auto& filMan = FilterManager::getInstance();
823 newFilter = &filMan.emplaceNew(filterLevel,
824 pos+1 < parameters.size()?parameters[pos+1]:".",
825 catRegex,
826 pos+2 < parameters.size()?parameters[pos+2]:".",
827 pluginRegex,
828 persist).first->second;
829 return filMan.blockSlot();
830 },
831 // Per item
832 [filterLevel, &line, &out, &newFilter](DebugCategory& cat) {
833 auto old = cat.allowed();
834 cat.allowed(filterLevel);
835 newFilter->addMatch();
836 printCategoryListEntry(out, line, cat, old);
837 },
838 // After list
839 [&out,&persist]() {
840 if (persist)
841 return FilterManager::getInstance().saveConfig(out);
842 return CR_OK;
843 });
844}

Callers

nothing calls this directly

Calls 12

applyCategoryFiltersFunction · 0.85
printCategoryListEntryFunction · 0.85
matchMethod · 0.80
emplaceNewMethod · 0.80
blockSlotMethod · 0.80
allowedMethod · 0.80
addMatchMethod · 0.80
saveConfigMethod · 0.80
sizeMethod · 0.45
printMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected