steveire added a comment.
I like the approach of using clang-format to implement this. It's much faster
than a `clang-tidy` approach.
The broader C++ community has already chosen `East`/`West` and it has momentum.
If you choose `Left`/`Right` now, you will get pressure to add `East`/`West` in
the future, which means we'll have the synonyms we want to avoid.
The broader C++ community already has understanding of `East`/`West`. Trying to
change that now should be out of scope for this patch. This patch should use
`East`/`West`.
I ran this on a large codebase and discovered some problems with this patch.
Given this `.clang-format` file:
BasedOnStyle: LLVM
PointerAlignment: Left
ConstStyle: Right
I get the failures as commented here:
template <typename T> struct Foo {};
template <> struct Foo<int> {
static const int bat;
static const int fn();
};
// 'const' inserted in wrong place:
int const Foo<int>::bat = 0;
// 'const const' inserted in wrong place:
int const Foo<int>::fn() {
return 0;
}
void foo() {
Foo<Foo<int>> ffi;
// '* const' inserted instead of 'const':
const Foo<Foo<int>>* p = const_cast<const Foo<Foo<int>>*>(&ffi);
}
// 'const >' inserted instead of 'const':
Foo<const Foo<int>> P;
template <typename T>
// 'const const' inserted instead of 'const':
void fn(const Foo<T>& i);
// This is needed to trigger the above 'const const' bug above:
#if 0
#else
#endif
namespace ns {
struct S {};
} // namespace ns
// not modified:
void fns(const ns::S& s);
Some of these (eg the `int Foo<int>::bat const = 0`) are the kinds of breakages
`clang-format` so far avoids by not reordering tokens, as @sammccall was
saying. I don't know if the `clang-format` parser is smart enough to not cause
those bugs.
Thanks for working on this!
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69764/new/
https://reviews.llvm.org/D69764
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits