From patchwork Tue Aug 10 10:17:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 13278 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 2B0D7BD87D for ; Tue, 10 Aug 2021 10:17:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id EA0876884D; Tue, 10 Aug 2021 12:17:52 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="fFiMsAC1"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 508B0687F0 for ; Tue, 10 Aug 2021 12:17:52 +0200 (CEST) Received: from Monstersaurus.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DFF5B3F0; Tue, 10 Aug 2021 12:17:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1628590672; bh=5zRpiZsIMgUQOsmKiW/gH8cuXENdjM1FHujZtvk4pqw=; h=From:To:Cc:Subject:Date:From; b=fFiMsAC12BL3mJw3EWszGAWp/iFAKaOzokOsyFyNwnRVZRH980aXA1mpWVMeN3GvQ ZAWahGSjcp9B4fnYkZF5xOhtIz7xfvzOlZk++9wa0pdWV3h5ZhRLvbPJAlGvTwq6pg pMgW0O6W3BXPKYj+RyNtZqWlE6SApTcS1LWbZi6Q= From: Kieran Bingham To: libcamera devel Date: Tue, 10 Aug 2021 11:17:48 +0100 Message-Id: <20210810101748.2029495-1-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3] clang-format: Regroup sort orders X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Utilise the clang-format header sort to provide a regex based pattern match for our header inclusion coding style. The rules are updated to match as close as possible the existing practices and the documentation is updated accordingly. Reviewed-by: Laurent Pinchart Reviewed-by: Jean-Michel Hautbois Signed-off-by: Kieran Bingham --- v3: - Merge C++ back with C and system headers - Add some explicit pre-matching for known external headers that are not system headers. .clang-format | 53 ++++++++++++++++++++++++++++++++-- Documentation/coding-style.rst | 17 +++++++++-- 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/.clang-format b/.clang-format index 3a8a896e373d..ff60b928affc 100644 --- a/.clang-format +++ b/.clang-format @@ -66,10 +66,57 @@ ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true ForEachMacros: - 'udev_list_entry_foreach' -IncludeBlocks: Preserve +SortIncludes: true +IncludeBlocks: Regroup IncludeCategories: - - Regex: '.*' - Priority: 1 + # Headers matching the name of the component are matched automatically. + # Priority 1 + # Other library headers (explicit overrides to match before system headers) + - Regex: '(|||||)' + Priority: 9 + # Qt includes (match before C++ standard library) + - Regex: '' + Priority: 9 + CaseSensitive: true + # Headers in <> with an extension. (+system libraries) + - Regex: '<([A-Za-z0-9\-_])+\.h>' + Priority: 2 + # System headers + - Regex: '' + Priority: 2 + # C++ standard library includes (no extension) + - Regex: '<([A-Za-z0-9\-_/])+>' + Priority: 2 + # Linux headers, as a second group/subset of system headers + - Regex: '' + Priority: 3 + # Headers for libcamera Base support + - Regex: '' + Priority: 4 + - Regex: '' + Priority: 5 + # Public API Headers for libcamera, which are not in a subdir (i.e. ipa/,internal/) + - Regex: '' + Priority: 6 + # IPA Interfaces + - Regex: '' + Priority: 7 + # libcamera Internal headers in "" + - Regex: '"libcamera/internal/.*\.h"' + Priority: 8 + # Other libraries headers with one group per library (.h or .hpp) + - Regex: '<.*/.*\.hp*>' + Priority: 9 + # local modular includes "path/file.h" (.h or .hpp) + - Regex: '"(.*/)+.*\.hp*"' + Priority: 10 + # Other local headers "file.h" with extension (.h or .hpp) + - Regex: '".*.hp*"' + Priority: 11 + # Any unmatched line, separated from the last group + - Regex: '"*"' + Priority: 100 + IncludeIsMainRegex: '(_test)?$' IndentCaseLabels: false IndentPPDirectives: None diff --git a/Documentation/coding-style.rst b/Documentation/coding-style.rst index 5db7f480af05..ef3a0d1714ab 100644 --- a/Documentation/coding-style.rst +++ b/Documentation/coding-style.rst @@ -70,19 +70,30 @@ macro. For .cpp files, if the file implements an API declared in a header file, that header file shall be included first in order to ensure it is self-contained. +While the following list is extensive, it documents the expected behaviour +defined by the clang-format configuration and tooling should assist with +ordering. + The headers shall be grouped and ordered as follows: 1. The header declaring the API being implemented (if any) 2. The C and C++ system and standard library headers -3. Other libraries' headers, with one group per library -4. Other project's headers +3. Linux kernel headers +4. The libcamera base private header if required +5. The libcamera base library headers +6. The libcamera public API headers +7. The libcamera IPA interfaces +8. The internal libcamera headers +9. Other libraries' headers, with one group per library +10. Local headers grouped by subdirectory +11. Any local headers Groups of headers shall be separated by a single blank line. Headers within each group shall be sorted alphabetically. System and library headers shall be included with angle brackets. Project headers shall be included with angle brackets for the libcamera public API -headers, and with double quotes for other libcamera headers. +headers, and with double quotes for internal libcamera headers. C++ Specific Rules