malcolm.parsons added inline comments.
================ Comment at: test/clang-tidy/cppcoreguidelines-one-name-per-declaration.cpp:8 + { + int x = 42, y = 43; + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: Do not declare multiple names per declaration [cppcoreguidelines-one-name-per-declaration] ---------------- aaron.ballman wrote: > malcolm.parsons wrote: > > omtcyfz wrote: > > > malcolm.parsons wrote: > > > > The guideline says "Flag non-function arguments with multiple > > > > declarators involving declarator operators (e.g., int* p, q;)". > > > > > > > > There are no declarator operators in this test, so there should be no > > > > warning. > > > The guideline says > > > > > > > Reason: One-declaration-per line increases readability and avoids > > > > mistakes related to the C/C++ grammar. It also leaves room for a more > > > > descriptive end-of-line comment. > > > > > > > Exception: a function declaration can contain several function argument > > > > declarations. > > > > > > I'm not sure why what you copied is written in "Enforcement" section, but > > > I do not think that is how it should be handled. I am concerned not only > > > about that specific case and I see no reason to cut off cases already > > > presented in this test. > > "mistakes related to the C/C++ grammar" only occur when declarator > > operators are involved. e.g. in `int* p, q` a reader might incorrectly > > think that q was a pointer. > > > > I see reasons not to warn about cases like > > `for (auto i = c.begin(), e = someExpensiveFn(); i != e; i++)` > > `for (int i = 0, j = someExpensiveFn(); i < j; i++);` > > because the alternatives increase variable scope, or for > > `int x = 42, y = 43;` > > because it's not difficult to read. > > > > As we disagree on this, can it be made configurable? > We usually try to ensure that the check matches the behavior required by the > normative wording of coding rules we follow. Based on that, the C++ core > guideline rule only cares about declarator operators while the CERT > recommendation kind of does not care about them. If you think the C++ core > guideline enforcement is wrong, you can file a bug against that project to > see if the editors agree, but I think the check should match the documented > behavior from the guidelines. FWIW, I'm happy to work on the CERT semantics > if you don't want to deal with those beyond what you've already done (or you > can tackle the semantic differences if you want). The CERT recommendation does care about declarator operators: "Multiple, simple variable declarations can be declared on the same line given that there are no initializations. A simple variable declaration is one that is not a pointer or array." |Declaration | CERT |CppCoreGuidelines| Me | |int i; | GOOD | GOOD | GOOD | |int i = 1; | GOOD | GOOD | GOOD | |int *p; | GOOD | GOOD | GOOD | |int *p, q; | BAD | BAD | BAD | |int i, j; | GOOD | GOOD | GOOD | |int i, j = 1; | BAD | GOOD | BAD | |int i = 1, j = 1; | BAD | GOOD | GOOD | |int i = 1, j; | BAD | GOOD | BAD | |int *i, *j; | BAD | BAD | BAD | |for (int i = 0, j = size; i != j; i++) | GOOD | GOOD | GOOD | |for (int *p = a, *q = a+size; p != q; p++) | GOOD | BAD | GOOD | I agree with CERT for most cases. ================ Comment at: test/clang-tidy/cppcoreguidelines-one-name-per-declaration.cpp:16 + return 0; +} ---------------- malcolm.parsons wrote: > aaron.ballman wrote: > > Please add tests that show the exceptions in the C++ Core Guidelines are > > properly handled. Also, I'd like to see tests with other named > > declarations, such as typedefs, template parameter lists, for loop > > initializers, etc. > and structured bindings (no warning). and global variables. https://reviews.llvm.org/D25024 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits