// RUN: %check_clang_tidy %s bugprone-argument-comment %t -- \
// RUN:   -config="{CheckOptions: [ \
// RUN:     {key: bugprone-argument-comment.CommentBoolLiterals, value: 1}, \
// RUN:     {key: bugprone-argument-comment.CommentIntegerLiterals, value: 1}, \
// RUN:     {key: bugprone-argument-comment.CommentFloatLiterals, value: 1}, \
// RUN:     {key: bugprone-argument-comment.CommentUserDefinedLiterals, value: 1}, \
// RUN:     {key: bugprone-argument-comment.CommentStringLiterals, value: 1}, \
// RUN:     {key: bugprone-argument-comment.CommentNullPtrs, value: 1}, \
// RUN:     {key: bugprone-argument-comment.CommentCharacterLiterals, value: 1}]}" --

struct A {
  void foo(bool abc);
  void foo(bool abc, bool cde);
  void foo(const char *, bool abc);
  void foo(int iabc);
  void foo(float fabc);
  void foo(double dabc);
  void foo(const char *strabc);
  void fooW(const wchar_t *wstrabc);
  void fooPtr(A *ptrabc);
  void foo(char chabc);
};

#define FOO 1
#define X(x) (x)

void g(int a);
void h(double b);
void i(const char *c);
void j(int a, int b, int c);

double operator"" _km(long double);

void test() {
  A a;

  a.foo(true);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*abc=*/true);

  a.foo(false);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*abc=*/false);

  a.foo(true, false);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
  // CHECK-MESSAGES: [[@LINE-2]]:15: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*abc=*/true, /*cde=*/false);

  a.foo(false, true);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
  // CHECK-MESSAGES: [[@LINE-2]]:16: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true);

  a.foo(/*abc=*/false, true);
  // CHECK-MESSAGES: [[@LINE-1]]:24: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true);

  a.foo(false, /*cde=*/true);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true);

  bool val1 = true;
  bool val2 = false;
  a.foo(val1, val2);

  a.foo("", true);
  // CHECK-MESSAGES: [[@LINE-1]]:13: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo("", /*abc=*/true);

  a.foo(0);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'iabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*iabc=*/0);

  a.foo(1.0f);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'fabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*fabc=*/1.0f);

  a.foo(-1.0f);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'fabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*fabc=*/-1.0f);

  a.foo(1.0);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*dabc=*/1.0);

  a.foo(-1.0);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*dabc=*/-1.0);

  int val3 = 10;
  a.foo(val3);
  a.foo(-val3);

  float val4 = 10.0;
  a.foo(val4);
  a.foo(-val4);

  double val5 = 10.0;
  a.foo(val5);
  a.foo(-val5);

  a.foo("Hello World");
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'strabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*strabc=*/"Hello World");
  //
  a.fooW(L"Hello World");
  // CHECK-MESSAGES: [[@LINE-1]]:10: warning: argument comment missing for literal argument 'wstrabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.fooW(/*wstrabc=*/L"Hello World");

  a.fooPtr(nullptr);
  // CHECK-MESSAGES: [[@LINE-1]]:12: warning: argument comment missing for literal argument 'ptrabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.fooPtr(/*ptrabc=*/nullptr);

  a.foo(402.0_km);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*dabc=*/402.0_km);

  a.foo(-402.0_km);
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*dabc=*/-402.0_km);

  a.foo('A');
  // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'chabc' [bugprone-argument-comment]
  // CHECK-FIXES: a.foo(/*chabc=*/'A');

  g(FOO);
  g(-FOO);
  h(1.0f);
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment]
  // CHECK-FIXES: h(/*b=*/1.0f);
  h(-1.0f);
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment]
  // CHECK-FIXES: h(/*b=*/-1.0f);
  i(__FILE__);

  j(1, X(1), X(1));
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment]
  // CHECK-FIXES: j(/*a=*/1, X(1), X(1));
  j(/*a=*/1, X(1), X(1));

  j(X(1), 1, X(1));
  // CHECK-MESSAGES: [[@LINE-1]]:11: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment]
  // CHECK-FIXES: j(X(1), /*b=*/1, X(1));
  j(X(1), /*b=*/1, X(1));

  j(X(1), X(1), 1);
  // CHECK-MESSAGES: [[@LINE-1]]:17: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment]
  // CHECK-FIXES: j(X(1), X(1), /*c=*/1);
  j(X(1), X(1), /*c=*/1);

  j(X(1), 1, 1);
  // CHECK-MESSAGES: [[@LINE-1]]:11: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment]
  // CHECK-MESSAGES: [[@LINE-2]]:14: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment]
  // CHECK-FIXES: j(X(1), /*b=*/1, /*c=*/1);
  j(X(1), /*b=*/1, /*c=*/1);

  j(1, X(1), 1);
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment]
  // CHECK-MESSAGES: [[@LINE-2]]:14: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment]
  // CHECK-FIXES: j(/*a=*/1, X(1), /*c=*/1);
  j(/*a=*/1, X(1), /*c=*/1);

  j(1, 1, X(1));
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment]
  // CHECK-MESSAGES: [[@LINE-2]]:8: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment]
  // CHECK-FIXES: j(/*a=*/1, /*b=*/1, X(1));
  j(/*a=*/1, /*b=*/1, X(1));

  // FIXME Would like the below to add argument comments.
  g((1));
  // FIXME But we should not add argument comments here.
  g(_Generic(0, int : 0));
}

void f(bool _with_underscores_);
void ignores_underscores() {
  f(false);
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument '_with_underscores_' [bugprone-argument-comment]
  // CHECK-FIXES: f(/*_with_underscores_=*/false);

  f(true);
  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument
  // CHECK-FIXES: f(/*_with_underscores_=*/true);
}
