forked from OSchip/llvm-project
![]() ClangFormat does not correctly handle an Objective-C interface declaration with both lightweight generics and a protocol conformance. This simple example: ``` @interface Foo : Bar <Baz> <Blech> @end ``` means `Foo` extends `Bar` (a lightweight generic class whose type parameter is `Baz`) and also conforms to the protocol `Blech`. ClangFormat should not apply any changes to the above example, but instead it currently formats it quite poorly: ``` @interface Foo : Bar <Baz> <Blech> @end ``` The bug is that `UnwrappedLineParser` assumes an open-angle bracket after a base class name is a protocol list, but it can also be a lightweight generic specification. This diff fixes the bug by factoring out the logic to parse lightweight generics so it can apply both to the declared class as well as the base class. Test Plan: New tests added. Ran tests with: % ninja FormatTests && ./tools/clang/unittests/Format/FormatTests Confirmed tests failed before diff and passed after diff. Reviewed By: sammccall, MyDeveloperDay Differential Revision: https://reviews.llvm.org/D89496 |
||
---|---|---|
.. | ||
INPUTS | ||
bindings | ||
cmake | ||
docs | ||
examples | ||
include | ||
lib | ||
runtime | ||
test | ||
tools | ||
unittests | ||
utils | ||
www | ||
.clang-format | ||
.clang-tidy | ||
.gitignore | ||
CMakeLists.txt | ||
CODE_OWNERS.TXT | ||
INSTALL.txt | ||
LICENSE.TXT | ||
ModuleInfo.txt | ||
NOTES.txt | ||
README.txt |
README.txt
//===----------------------------------------------------------------------===// // C Language Family Front-end //===----------------------------------------------------------------------===// Welcome to Clang. This is a compiler front-end for the C family of languages (C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM compiler infrastructure project. Unlike many other compiler frontends, Clang is useful for a number of things beyond just compiling code: we intend for Clang to be host to a number of different source-level tools. One example of this is the Clang Static Analyzer. If you're interested in more (including how to build Clang) it is best to read the relevant web sites. Here are some pointers: Information on Clang: http://clang.llvm.org/ Building and using Clang: http://clang.llvm.org/get_started.html Clang Static Analyzer: http://clang-analyzer.llvm.org/ Information on the LLVM project: http://llvm.org/ If you have questions or comments about Clang, a great place to discuss them is on the Clang development mailing list: http://lists.llvm.org/mailman/listinfo/cfe-dev If you find a bug in Clang, please file it in the LLVM bug tracker: http://llvm.org/bugs/