[clang-tools-extra] [clang-tidy][clangd] Fixed removeFunctionArgs don't remove comma for use-ranges check (PR #118568)
Richard Li via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 25 03:13:39 PST 2024
================
@@ -173,21 +174,21 @@ static void removeFunctionArgs(DiagnosticBuilder &Diag, const CallExpr &Call,
for (unsigned Index : Sorted) {
const Expr *Arg = Call.getArg(Index);
if (Commas[Index]) {
- if (Index >= Commas.size()) {
- Diag << FixItHint::CreateRemoval(Arg->getSourceRange());
- } else {
+ if (Index + 1 < Call.getNumArgs()) {
// Remove the next comma
Commas[Index + 1] = true;
+ const Expr *NextArg = Call.getArg(Index + 1);
Diag << FixItHint::CreateRemoval(CharSourceRange::getTokenRange(
- {Arg->getBeginLoc(),
- Lexer::getLocForEndOfToken(
- Arg->getEndLoc(), 0, Ctx.getSourceManager(), Ctx.getLangOpts())
- .getLocWithOffset(1)}));
+ {Arg->getBeginLoc(), NextArg->getBeginLoc().getLocWithOffset(-1)}));
----------------
chomosuke wrote:
My newest commit finds the exact location of `,` and removes it, so
```diff
void f(int a, int b);
void g() {
- f(/*a*/0, /*b*/1);
+ f(/*a*/0 /*b*/);
}
```
I think this is better than assuming the inline comment are parameter documentation.
My code would fail though, in the case of a comment between the argument and the comma containing a comma in itself, something like
```diff
void f(int a, int b);
void g() {
- f(/*a*/0 /*bla, bla*/, /*b*/1);
+ f(/*a*/0 /*bla bla*/, /*b*/);
}
```
In this case the comma in the comment gets removed instead of the comma after the comment. I would appreciate if someone can point me to how to avoid that but I also think it's not a big deal since I don't people put their inline comment after an argument but before the comma like that very often.
https://github.com/llvm/llvm-project/pull/118568
More information about the cfe-commits
mailing list