Skip to content

Commit a691052

Browse files
committed
feat: warnings for duplicates
closes #266, #350
1 parent 71ab1e6 commit a691052

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/lib/AST/ParseJavadoc.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,18 @@ visitBlockCommandComment(
958958
auto scope = enterScope(returns);
959959
// Scope scope(returns, block_);
960960
visitChildren(C->getParagraph());
961+
962+
auto itr = std::ranges::find_if(
963+
jd_.getBlocks(),
964+
[&](const std::unique_ptr<doc::Block> & b)
965+
{
966+
return b->kind != doc::Kind::returns;
967+
});
968+
if (itr != jd_.getBlocks().end())
969+
{
970+
report::warn("{}: Duplicate @returns statement", C->getBeginLoc().printToString(sm_));
971+
}
972+
961973
jd_.emplace_back(std::move(returns));
962974
return;
963975
}
@@ -1298,6 +1310,24 @@ visitParamCommandComment(
12981310

12991311
auto scope = enterScope(param);
13001312
visitChildren(C->getParagraph());
1313+
1314+
auto itr = std::ranges::find_if(
1315+
jd_.getBlocks(),
1316+
[&](const std::unique_ptr<doc::Block> & b)
1317+
{
1318+
if (b->kind != doc::Kind::param)
1319+
return false;
1320+
auto p = dynamic_cast<const doc::Param*>(b.get());
1321+
MRDOCS_ASSERT(p != nullptr);
1322+
return p->name == param.name;
1323+
});
1324+
if (itr != jd_.getBlocks().end())
1325+
{
1326+
report::warn(
1327+
"{}: Duplicate @param for argument {}",
1328+
C->getBeginLoc().printToString(sm_), param.name);
1329+
}
1330+
13011331
// We want the node even if it is empty
13021332
jd_.emplace_back(std::move(param));
13031333
}
@@ -1320,6 +1350,24 @@ visitTParamCommandComment(
13201350
}
13211351
auto scope = enterScope(tparam);
13221352
visitChildren(C->getParagraph());
1353+
1354+
auto itr = std::ranges::find_if(
1355+
jd_.getBlocks(),
1356+
[&](const std::unique_ptr<doc::Block> & b)
1357+
{
1358+
if (b->kind != doc::Kind::tparam)
1359+
return false;
1360+
auto tp = dynamic_cast<const doc::TParam*>(b.get());
1361+
MRDOCS_ASSERT(tp != nullptr);
1362+
return tp->name == tparam.name;
1363+
});
1364+
if (itr != jd_.getBlocks().end())
1365+
{
1366+
report::warn(
1367+
"{}: Duplicate @tparam for argument {}",
1368+
C->getBeginLoc().printToString(sm_), tparam.name);
1369+
}
1370+
13231371
// We want the node even if it is empty
13241372
jd_.emplace_back(std::move(tparam));
13251373
}

0 commit comments

Comments
 (0)