@@ -271,25 +271,28 @@ static void sarifReadCodeFlow(Defect *pDef, const pt::ptree &cf)
271271 for (const auto &item : *locs) {
272272 const pt::ptree &tfLoc = item.second ;
273273
274- const pt::ptree *kindList;
275- if (!findChildOf (&kindList, tfLoc, " kinds" ) || kindList->empty ())
276- // kind of the event not specified
277- continue ;
278-
279- // concatenate event name
280274 std::string evtName;
281- for (const auto &kindItem : *kindList) {
282- const pt::ptree &kind = kindItem.second ;
283- if (!evtName.empty ())
284- evtName += " _" ;
285- evtName += kind.data ();
275+ const pt::ptree *kindList;
276+ if (findChildOf (&kindList, tfLoc, " kinds" )) {
277+ // calculate event name from the `kinds` list
278+ for (const auto &kindItem : *kindList) {
279+ const pt::ptree &kind = kindItem.second ;
280+ if (!evtName.empty ())
281+ evtName += " _" ;
282+ evtName += kind.data ();
283+ }
286284 }
287285
288286 // append a new event of the specified kind
289287 events.push_back (DefEvent (evtName));
290288 DefEvent &evt = events.back ();
291289
292- evt.verbosityLevel = valueOf<int >(tfLoc, " nestingLevel" , 1 );
290+ // read/infer verbosity level
291+ evt.verbosityLevel = valueOf<int >(tfLoc, " nestingLevel" ,
292+ (evt.event .empty ())
293+ ? /* trace */ 2
294+ : /* info */ 1 );
295+
293296 if (!evt.verbosityLevel )
294297 // update key event
295298 keyEventIdx = events.size () - 1U ;
@@ -301,6 +304,13 @@ static void sarifReadCodeFlow(Defect *pDef, const pt::ptree &cf)
301304
302305 sarifReadLocation (&evt, *loc);
303306 sarifReadMsg (&evt.msg , *loc);
307+
308+ if (evt.event .empty ()) {
309+ // if no `kind` is given, assume a generic trace event
310+ evt.event = " path" ;
311+ if (evt.msg .empty ())
312+ evt.msg = " generic trace event" ;
313+ }
304314 }
305315
306316 if (events.size () <= 1U )
0 commit comments