@@ -, +, @@ Updating libclangformat-ide to suppurt llvm / clang 11.0.0. --- a/dev-libs/libclangformat-ide/Manifest +++ a/dev-libs/libclangformat-ide/Manifest @@ -1,6 +1,9 @@ +AUX clang-qtcreator-compat-11.0.0.patch 7551 BLAKE2B 3bba88d182fc9d0eac5145694777e7ac1b3c1baebfc8cb30104b720ccc66dbf5e8cecbab6ec252b9e5518edbe90802c425ad4365ba529e85b8099e14b31c0784 SHA512 aa7b48775994b7ecbbf6bec3a6746628b628b43762de1e28ce2dade8ccd485f4005900dc4cc11847d70bf88df17689f769c8198478c4846fb4c74ab364d8487c AUX clang-qtcreator-compat.patch 7480 BLAKE2B aabe085093786be2733f50259be355596b8f35ddcf524aa9437f67462e48c22532e51b113a1e839e6f1bb22548229ee111c0587e58b62e3a145a6bdf43b9b347 SHA512 6e8d761dcd7bcdda476326fa8b2e3d5966f15959aefc500c04a57b6396a035fc822ad1a57184519de3ac7340c680a5f49f5fc9841d24210e20e949d6b28a57b4 DIST llvmorg-10.0.0.tar.gz 120804856 BLAKE2B 6b0254f5b913398cdcf2b2ec1ff219888706d2b79d5296590934714e42ac79f6a6547941ac2b1d2c4e6313dd18b6c7068e748aa6ac033e49fccbf5d355aa8191 SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0 +DIST llvmorg-11.0.0.tar.gz 122743665 BLAKE2B 3f95570240789fd68ddb747df817f5c6cdc9da40911bbe9ee3531c15ada9165e5002b1c2f778cf8735858485ea05a8754e3d3a5f4b15bdd6cb33d64a14692984 SHA512 b6d38871ccce0e086e27d35e42887618d68e57d8274735c59e3eabc42dee352412489296293f8d5169fe0044936345915ee7da61ebdc64ec10f7737f6ecd90f2 DIST llvmorg-9.0.1.tar.gz 113193320 BLAKE2B b86e405f2b8e00436045fd409fe19cdde75c797b1192c62a22b5ec75e6b4dc8e874a0f33008dc31562445e4cbe53a992b6f48c684255a6a1ef261e595b8b161f SHA512 fa88beeaae94b6d0cd9b5ba38658d0ffed8004035d7d8a4f95c3d31a709b88b581ae9bd7761333c8e5375c44b8f6be01768b5a3be901163159d7e6c43b71da59 EBUILD libclangformat-ide-10.0.0.ebuild 1724 BLAKE2B 4b7fc4a91fff065ef5b9687dbbab5e905d39a9ec6b7903b90c27e14e232522ba79ad928873a658c46c60eb5e7e596c798fccc9189844b5e002313fe02b95a9c0 SHA512 21d3e5d1960548bb04a5a57ccc40b3aaf4f1df69ed9ad650253b6f01b655a9fd7232e035c27a3b037b93f5e83930ce10ff995560429aa62e27cba99c238a539c +EBUILD libclangformat-ide-11.0.0.ebuild 1730 BLAKE2B abb71ab942c5bf16428a5b3cc4d5e30c0b4b2191a75c5b61b7c8f1f54296878c7e8fb0cd6fe681f4956a91c7115dfbc5ca2591e8af8953c3890fcf9fe54ac5cb SHA512 4faa67304b3c8e9843f0012eebd888264dcc2f90df6dad2e90b80b89c17f2a239f1a7e671474bc7caaec28e3d679a2e03f2f7a9c15d36bbaa19b7b3cbea3845a EBUILD libclangformat-ide-9.0.1.ebuild 1719 BLAKE2B af595842b8e1928f435a93bdc04935bbfac86c90ec40a87344b1023e1bcb855dbcf3517e63f1c0d9093e652aa12aa8ceef8cc0e48a831831f445185e6687125d SHA512 c345fed4ed94521ec51ae5b998db71f29efc5b927bd3471c754649c787373939a396f0dcd16bfa3a2516eb415cbc2457cd7616b17a404b70712c94f8b99335d7 MISC metadata.xml 250 BLAKE2B 3c6a58190f2680dd7f7e4afd9e6abfedc7e36181b1a8d7fa9710e08c805ef85988e4a156221c61fc71c36f8e84113537b70a8f144e0764e7704f7dd074af8172 SHA512 d2115b154bf731eac11fd7b96a95baa2467cb660371f7a3dc7a7a77cf4a6cf992b97c5353f184010eac1d37cdfffa6c5d9ec35d82e171f0fad5086767d0173a5 --- a/dev-libs/libclangformat-ide/files/clang-qtcreator-compat-11.0.0.patch +++ a/dev-libs/libclangformat-ide/files/clang-qtcreator-compat-11.0.0.patch @@ -0,0 +1,186 @@ +From 9b992a0f7f160dd6c75f20a4dcfcf7c60a4894df Mon Sep 17 00:00:00 2001 +From: Ivan Donchevskii +Date: Fri, 12 Oct 2018 08:19:25 +0200 +Subject: [clang-format] Introduce the flag which allows not to shrink lines + +https://reviews.llvm.org/D53072 + +Currently there's no way to prevent to lines optimization even +if you have intentionally put to split the line. + +In general case it's fine. So I would prefer to have such option +which you can enable in special cases (for me it's an IDE related use case). + +Revert this change if upstream clang-format offers better solution. + +Reviewed-by; Marco Bubke + +Cherry picked from commit +clang.git/fa1b9053729ec6a4425a44ec5502dd388928274a. + +Change-Id: I92296dd177c811593ebba7d4b5c3c5f472af10a2 +Reviewed-by: Cristian Adam +--- + clang/include/clang/Format/Format.h | 13 +++++++++++++ + clang/lib/Format/Format.cpp | 4 ++++ + clang/lib/Format/UnwrappedLineFormatter.cpp | 9 +++++---- + clang/lib/Format/UnwrappedLineParser.cpp | 2 ++ + clang/unittests/Format/FormatTest.cpp | 16 ++++++++++++++++ + 5 files changed, 40 insertions(+), 4 deletions(-) + +NB! Line numbers adjusted manually to get perfect patch. + +diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h +index 3549ec9e..1e6a4869 100755 +--- a/clang/include/clang/Format/Format.h ++++ b/clang/include/clang/Format/Format.h +@@ -21,6 +21,8 @@ + #include "llvm/Support/Regex.h" + #include + ++#define KEEP_LINE_BREAKS_FOR_NON_EMPTY_LINES_BACKPORTED ++ + namespace llvm { + namespace vfs { + class FileSystem; +@@ -1666,6 +1668,16 @@ struct FormatStyle { + bool JavaScriptWrapImports; + // clang-format on + ++ /// If true, no line breaks are optimized out (works only with ColumnLimit = 0) ++ /// \code ++ /// true: false: ++ /// int foo(int a, vs. int foo(int a, int b) { ++ /// int b) { ++ /// bar(); bar(); ++ /// } } ++ /// \endcode ++ bool KeepLineBreaksForNonEmptyLines; ++ + /// If true, the empty line at the start of blocks is kept. + /// \code + /// true: false: +@@ -2358,6 +2370,7 @@ struct FormatStyle { + JavaImportGroups == R.JavaImportGroups && + JavaScriptQuotes == R.JavaScriptQuotes && + JavaScriptWrapImports == R.JavaScriptWrapImports && ++ KeepLineBreaksForNonEmptyLines == R.KeepLineBreaksForNonEmptyLines && + KeepEmptyLinesAtTheStartOfBlocks == + R.KeepEmptyLinesAtTheStartOfBlocks && + MacroBlockBegin == R.MacroBlockBegin && +diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp +index 0d277a64..7875838b 100644 +--- a/clang/lib/Format/Format.cpp ++++ b/clang/lib/Format/Format.cpp +@@ -532,6 +532,8 @@ template <> struct MappingTraits { + IO.mapOptional("JavaImportGroups", Style.JavaImportGroups); + IO.mapOptional("JavaScriptQuotes", Style.JavaScriptQuotes); + IO.mapOptional("JavaScriptWrapImports", Style.JavaScriptWrapImports); ++ IO.mapOptional("KeepLineBreaksForNonEmptyLines", ++ Style.KeepLineBreaksForNonEmptyLines); + IO.mapOptional("KeepEmptyLinesAtTheStartOfBlocks", + Style.KeepEmptyLinesAtTheStartOfBlocks); + IO.mapOptional("MacroBlockBegin", Style.MacroBlockBegin); +@@ -889,6 +891,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) { + LLVMStyle.JavaScriptWrapImports = true; + LLVMStyle.TabWidth = 8; + LLVMStyle.MaxEmptyLinesToKeep = 1; ++ LLVMStyle.KeepLineBreaksForNonEmptyLines = false; + LLVMStyle.KeepEmptyLinesAtTheStartOfBlocks = true; + LLVMStyle.NamespaceIndentation = FormatStyle::NI_None; + LLVMStyle.ObjCBinPackProtocolList = FormatStyle::BPS_Auto; +@@ -973,6 +976,7 @@ FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language) { + GoogleStyle.IncludeStyle.IncludeIsMainRegex = "([-_](test|unittest))?$"; + GoogleStyle.IncludeStyle.IncludeBlocks = tooling::IncludeStyle::IBS_Regroup; + GoogleStyle.IndentCaseLabels = true; ++ GoogleStyle.KeepLineBreaksForNonEmptyLines = false; + GoogleStyle.KeepEmptyLinesAtTheStartOfBlocks = false; + GoogleStyle.ObjCBinPackProtocolList = FormatStyle::BPS_Never; + GoogleStyle.ObjCSpaceAfterProperty = false; +diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp +index 22f27a66..5060b04f 100644 +--- a/clang/lib/Format/UnwrappedLineFormatter.cpp ++++ b/clang/lib/Format/UnwrappedLineFormatter.cpp +@@ -732,7 +732,7 @@ public: + LineFormatter(ContinuationIndenter *Indenter, WhitespaceManager *Whitespaces, + const FormatStyle &Style, + UnwrappedLineFormatter *BlockFormatter) +- : Indenter(Indenter), Whitespaces(Whitespaces), Style(Style), ++ : Indenter(Indenter), Style(Style), Whitespaces(Whitespaces), + BlockFormatter(BlockFormatter) {} + virtual ~LineFormatter() {} + +@@ -773,7 +773,8 @@ protected: + // assert so that we can simply call this function for all tokens. + return true; + +- if (NewLine) { ++ if (NewLine || (Previous.Children[0]->First->MustBreakBefore && ++ Style.KeepLineBreaksForNonEmptyLines)) { + int AdditionalIndent = State.Stack.back().Indent - + Previous.Children[0]->Level * Style.IndentWidth; + +@@ -819,10 +820,10 @@ protected: + } + + ContinuationIndenter *Indenter; ++ const FormatStyle &Style; + + private: + WhitespaceManager *Whitespaces; +- const FormatStyle &Style; + UnwrappedLineFormatter *BlockFormatter; + }; + +@@ -845,7 +846,7 @@ public: + while (State.NextToken) { + bool Newline = + Indenter->mustBreak(State) || +- (Indenter->canBreak(State) && State.NextToken->NewlinesBefore > 0); ++ (State.NextToken->NewlinesBefore > 0 && Indenter->canBreak(State)); + unsigned Penalty = 0; + formatChildren(State, Newline, /*DryRun=*/false, Penalty); + Indenter->addTokenToState(State, Newline, /*DryRun=*/false); +diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp +index a3738642..f80c1116 100644 +--- a/clang/lib/Format/UnwrappedLineParser.cpp ++++ b/clang/lib/Format/UnwrappedLineParser.cpp +@@ -2942,6 +2942,8 @@ void UnwrappedLineParser::nextToken(int LevelDifference) { + else + readTokenWithJavaScriptASI(); + FormatTok->Previous = Previous; ++ if (FormatTok->NewlinesBefore && Style.KeepLineBreaksForNonEmptyLines) ++ FormatTok->MustBreakBefore = true; + } + + void UnwrappedLineParser::distributeComments( +diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp +index 17d302f0..48971623 100644 +--- a/clang/unittests/Format/FormatTest.cpp ++++ b/clang/unittests/Format/FormatTest.cpp +@@ -393,6 +393,22 @@ TEST_F(FormatTest, RemovesEmptyLines) { + " void funk() {}\n" + "};", + Style)); ++ ++ Style.KeepLineBreaksForNonEmptyLines = true; ++ Style.ColumnLimit = 0; ++ EXPECT_EQ("int foo(int a,\n" ++ " int b)\n" ++ "{\n" ++ "}", ++ format("int foo(int a,\n" ++ "int b) {}", ++ Style)); ++ ++ EXPECT_EQ("[]() {\n" ++ " foo(); }", ++ format("[]() {\n" ++ "foo(); }", ++ Style)); + } + + TEST_F(FormatTest, RecognizesBinaryOperatorKeywords) { +-- +2.26.2 + --- a/dev-libs/libclangformat-ide/libclangformat-ide-11.0.0.ebuild +++ a/dev-libs/libclangformat-ide/libclangformat-ide-11.0.0.ebuild @@ -0,0 +1,72 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit cmake llvm llvm.org toolchain-funcs + +DESCRIPTION="A static clangformat library patched for IDE use" +HOMEPAGE="https://www.qt.io/blog/2019/04/17/clangformat-plugin-qt-creator-4-9" +LLVM_COMPONENTS=( clang ) + +llvm.org_set_globals + +LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT" +SLOT="$(ver_cut 1)" +KEYWORDS="~amd64 ~arm ~x86" +IUSE="debug" + +DEPEND="~sys-devel/llvm-${PV}:${SLOT}=[debug=]" + +# least intrusive of all +CMAKE_BUILD_TYPE=RelWithDebInfo + +PATCHES=( "${FILESDIR}/clang-qtcreator-compat-${PV}.patch" ) + +pkg_setup() { + LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup +} + +src_unpack() { + llvm.org_src_unpack +} + +src_configure() { + local mycmakeargs=( + -DLLVM_CMAKE_PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)/cmake/llvm" + -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}" + -DBUILD_SHARED_LIBS=OFF + -DLLVM_ENABLE_EH=ON + -DLLVM_ENABLE_RTTI=ON + ) + + if [[ -n ${EPREFIX} ]]; then + mycmakeargs+=( + -DGCC_INSTALL_PREFIX="${EPREFIX}/usr" + ) + fi + + if tc-is-cross-compiler; then + [[ -x "/usr/bin/clang-tblgen" ]] \ + || die "/usr/bin/clang-tblgen not found or usable" + mycmakeargs+=( + -DCMAKE_CROSSCOMPILING=ON + -DCLANG_TABLEGEN=/usr/bin/clang-tblgen + ) + fi + + # LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844 + use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG" + cmake_src_configure +} + +src_compile() { + cmake_src_compile libclangFormat.a +} + +src_install() { + into usr/lib/llvm/${SLOT} + newlib.a "${BUILD_DIR}/$(get_libdir)/libclangFormat.a" libclangFormatIDE.a + insinto usr/lib/llvm/${SLOT}/include/clang/Format + newins "${S}/include/clang/Format/Format.h" FormatIDE.h +}