@@ -32,16 +32,25 @@ CppMetricsParser::CppMetricsParser(ParserContext& ctx_): AbstractParser(ctx_)
3232 _inputPaths.push_back (fs::canonical (path).string ());
3333
3434 util::OdbTransaction {_ctx.db } ([&, this ] {
35- for (const model::CppFileMetrics& fm
36- : _ctx.db ->query <model::CppFileMetrics>())
35+ if (_ctx.options .count (" force-cpp-metrics" ))
3736 {
38- _fileIdCache.insert (fm.file );
37+ LOG (info) << " [cxxmetricsparser] Clearing all C++ metrics." ;
38+ _ctx.db ->erase_query <model::CppFileMetrics>();
39+ _ctx.db ->erase_query <model::CppAstNodeMetrics>();
3940 }
40-
41- for (const model::CppAstNodeMetricsFileView& anm
42- : _ctx.db ->query <model::CppAstNodeMetricsFileView>())
41+ else
4342 {
44- _astNodeIdCache.emplace (anm.astNodeId , anm.fileId );
43+ for (const model::CppFileMetrics& fm
44+ : _ctx.db ->query <model::CppFileMetrics>())
45+ {
46+ _fileIdCache.insert (fm.file );
47+ }
48+
49+ for (const model::CppAstNodeMetricsFileView& anm
50+ : _ctx.db ->query <model::CppAstNodeMetricsFileView>())
51+ {
52+ _astNodeIdCache.emplace (anm.astNodeId , anm.fileId );
53+ }
4554 }
4655 });
4756}
@@ -401,6 +410,9 @@ extern "C"
401410 {
402411 boost::program_options::options_description description (" C++ Metrics Plugin" );
403412
413+ description.add_options ()
414+ (" force-cpp-metrics" , " Forced recalculation of all C++ code metrics." );
415+
404416 return description;
405417 }
406418
0 commit comments