Просмотр исходного кода

Meta: Switch to clang-format-16 as the standard formatter

This includes a few new options to the .clang-format configuration file
to A) adhere to option changes within clang-format 16 (namely the option
AlignTrailingComments), and B) enforce existing style guide rules with
new clang-format rules.
Timothy Flynn 2 лет назад
Родитель
Сommit
388d455575

+ 6 - 1
.clang-format

@@ -1,7 +1,9 @@
 ---
 Language: Cpp
 AlignEscapedNewlines: Left
-AlignTrailingComments: true
+AlignTrailingComments:
+    Kind: Always
+    OverEmptyLines: 0
 BasedOnStyle: WebKit
 BraceWrapping:
     AfterFunction: true
@@ -10,7 +12,10 @@ BreakBeforeInheritanceComma: true
 BreakConstructorInitializers: BeforeComma
 IndentPPDirectives: AfterHash
 IndentRequiresClause: false
+InsertNewlineAtEOF: true
+LineEnding: LF
 NamespaceIndentation: None
 QualifierAlignment: Right
 RequiresClausePosition: WithFollowing
+RequiresExpressionIndentation: OuterScope
 SpaceAfterTemplateKeyword: false

+ 1 - 1
.devcontainer/devcontainer.json

@@ -7,7 +7,7 @@
         "ghcr.io/devcontainers/features/github-cli:1": {},
         "ghcr.io/devcontainers-contrib/features/pre-commit:1": {},
         "./features/serenity": {
-            "llvm_version": 15,
+            "llvm_version": 16,
             "enable_ladybird": true,
             "enable_serenity": true
         },

+ 2 - 2
.devcontainer/features/serenity/devcontainer-feature.json

@@ -7,11 +7,11 @@
         "llvm_version": {
             "type": "string",
             "proposals": [
-                14,
                 15,
+                16,
                 "trunk"
             ],
-            "default": 15,
+            "default": 16,
             "description": "Select LLVM compiler version to use"
         },
         "enable_ladybird": {

+ 1 - 1
.devcontainer/features/serenity/install.sh

@@ -3,7 +3,7 @@ set -e
 
 # Feature options
 
-LLVM_VERSION=${LLVM_VERSION:-15}
+LLVM_VERSION=${LLVM_VERSION:-16}
 ENABLE_LADYBIRD=${ENABLE_LADYBIRD:-true}
 ENABLE_SERENITY=${ENABLE_SERENITY:-true}
 

+ 3 - 3
.github/workflows/cmake.yml

@@ -57,9 +57,9 @@ jobs:
         # Packages below aren't.
         run: |
           wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
-          sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main'
+          sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main'
           sudo apt-get update
-          sudo apt-get install -y clang-format-15 ccache e2fsprogs gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build optipng qemu-utils qemu-system-i386 unzip
+          sudo apt-get install -y clang-format-16 ccache e2fsprogs gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build optipng qemu-utils qemu-system-i386 unzip
           if ${{ matrix.arch == 'aarch64' }}; then
             # FIXME: Remove this when we no longer build our own Qemu binary.
             sudo apt-get install libgtk-3-dev libpixman-1-dev libsdl2-dev libslirp-dev
@@ -72,7 +72,7 @@ jobs:
           python -m pip install --upgrade pip
           pip install flake8 requests
       - name: Check versions
-        run: set +e; g++ --version; g++-12 --version; clang-format --version; clang-format-15 --version; prettier --version; python --version; python3 --version; ninja --version; flake8 --version; ccache --version; qemu-system-i386 --version
+        run: set +e; g++ --version; g++-12 --version; clang-format --version; clang-format-16 --version; prettier --version; python --version; python3 --version; ninja --version; flake8 --version; ccache --version; qemu-system-i386 --version
 
       # === PREPARE FOR BUILDING ===
 

+ 2 - 2
.github/workflows/pvs-studio-static-analysis.yml

@@ -26,9 +26,9 @@ jobs:
         #
         run: |
           wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
-          sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main'
+          sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main'
           sudo apt-get update
-          sudo apt-get install -y clang-format-15 gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build unzip pvs-studio
+          sudo apt-get install -y clang-format-16 gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build unzip pvs-studio
 
       - name: Check versions
         run: set +e; g++ --version; g++-12 --version; ninja --version;

+ 2 - 2
.github/workflows/sonar-cloud-static-analysis.yml

@@ -58,9 +58,9 @@ jobs:
         # Packages below aren't.
         run: |
           wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
-          sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main'
+          sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main'
           sudo apt-get update
-          sudo apt-get install -y clang-format-15 gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build unzip
+          sudo apt-get install -y clang-format-16 gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build unzip
 
       - name: Check versions
         run: set +e; g++ --version; g++-12 --version; ninja --version;

+ 1 - 1
CONTRIBUTING.md

@@ -40,7 +40,7 @@ Nobody is perfect, and sometimes we mess things up. That said, here are some goo
 **Do:**
 
 * Write in idiomatic SerenityOS C++20, using the `AK` containers in all code.
-* Conform to the project coding style found in [CodingStyle.md](https://github.com/SerenityOS/serenity/blob/master/Documentation/CodingStyle.md). Use `clang-format` (version 15 or later) to automatically format C++ files. See [AdvancedBuildInstructions.md](https://github.com/SerenityOS/serenity/blob/master/Documentation/AdvancedBuildInstructions.md#clang-format-updates) for instructions on how to get an up-to-date version if your OS distribution does not ship clang-format-15.
+* Conform to the project coding style found in [CodingStyle.md](https://github.com/SerenityOS/serenity/blob/master/Documentation/CodingStyle.md). Use `clang-format` (version 16 or later) to automatically format C++ files. See [AdvancedBuildInstructions.md](https://github.com/SerenityOS/serenity/blob/master/Documentation/AdvancedBuildInstructions.md#clang-format-updates) for instructions on how to get an up-to-date version if your OS distribution does not ship clang-format-15.
 * Choose expressive variable, function and class names. Make it as obvious as possible what the code is doing.
 * Split your changes into separate, atomic commits (i.e. A commit per feature or fix, where the build, tests and the system are all functioning).
 * Make sure your commits are rebased on the master branch.

+ 1 - 1
Documentation/CodingStyle.md

@@ -2,7 +2,7 @@
 
 For low-level styling (spaces, parentheses, brace placement, etc), all code should follow the format specified in `.clang-format` in the project root.
 
-**Important: Make sure you use `clang-format` version 15 or later!**
+**Important: Make sure you use `clang-format` version 16 or later!**
 
 This document describes the coding style used for C++ code in the Serenity Operating System project. All new code should conform to this style.
 

+ 1 - 1
Documentation/QtCreatorConfiguration.md

@@ -48,7 +48,7 @@ Qt Creator should be set up correctly now, go ahead and explore the project and
 
 ## Auto-Formatting
 
-You can use `clang-format` to help you with the [style guide](CodingStyle.md). Before you proceed, check that you're actually using clang-format version 15, as some OSes will ship older clang-format versions by default.
+You can use `clang-format` to help you with the [style guide](CodingStyle.md). Before you proceed, check that you're actually using clang-format version 16, as some OSes will ship older clang-format versions by default.
 
 - In QtCreator, go to "Help > About Plugins…"
 - Find the `Beautifier (experimental)` row (for example, by typing `beau` into the search)

+ 2 - 2
Meta/Azure/Setup.yml

@@ -9,9 +9,9 @@ steps:
     - script: |
         set -e
         wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
-        sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main'
+        sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main'
         sudo apt-get update
-        sudo apt-get install clang-format-15 ccache e2fsprogs gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build qemu-utils qemu-system-i386 unzip lld
+        sudo apt-get install clang-format-16 ccache e2fsprogs gcc-12 g++-12 libstdc++-12-dev libmpfr-dev libmpc-dev ninja-build qemu-utils qemu-system-i386 unzip lld
       displayName: 'Install Dependencies'
 
   - ${{ if eq(parameters.os, 'Linux') }}:

+ 9 - 9
Meta/lint-clang-format.sh

@@ -28,21 +28,21 @@ fi
 if (( ${#files[@]} )); then
     TOOLCHAIN_DIR=Toolchain/Local/clang/bin
     CLANG_FORMAT=false
-    if command -v clang-format-15 >/dev/null 2>&1 ; then
-        CLANG_FORMAT=clang-format-15
-    elif command -v brew >/dev/null 2>&1 && command -v "$(brew --prefix llvm@15)"/bin/clang-format >/dev/null 2>&1 ; then
-        CLANG_FORMAT="$(brew --prefix llvm@15)"/bin/clang-format
-    elif command -v $TOOLCHAIN_DIR/clang-format >/dev/null 2>&1 && $TOOLCHAIN_DIR/clang-format --version | grep -qF ' 15.' ; then
+    if command -v clang-format-16 >/dev/null 2>&1 ; then
+        CLANG_FORMAT=clang-format-16
+    elif command -v brew >/dev/null 2>&1 && command -v "$(brew --prefix llvm@16)"/bin/clang-format >/dev/null 2>&1 ; then
+        CLANG_FORMAT="$(brew --prefix llvm@16)"/bin/clang-format
+    elif command -v $TOOLCHAIN_DIR/clang-format >/dev/null 2>&1 && $TOOLCHAIN_DIR/clang-format --version | grep -qF ' 16.' ; then
         CLANG_FORMAT=$TOOLCHAIN_DIR/clang-format
     elif command -v clang-format >/dev/null 2>&1 ; then
         CLANG_FORMAT=clang-format
-        if ! "${CLANG_FORMAT}" --version | awk '{ if (substr($NF, 1, index($NF, ".") - 1) < 15) exit 1; }'; then
-            echo "You are using '$("${CLANG_FORMAT}" --version)', which appears to not be clang-format 15 or later."
+        if ! "${CLANG_FORMAT}" --version | awk '{ if (substr($NF, 1, index($NF, ".") - 1) < 16) exit 1; }'; then
+            echo "You are using '$("${CLANG_FORMAT}" --version)', which appears to not be clang-format 16 or later."
             echo "It is very likely that the resulting changes are not what you wanted."
         fi
     else
-        echo "clang-format-15 is not available, but C or C++ files need linting! Either skip this script, or install clang-format-15."
-        echo "(If you install a package 'clang-format', please make sure it's version 15 or later.)"
+        echo "clang-format-16 is not available, but C or C++ files need linting! Either skip this script, or install clang-format-16."
+        echo "(If you install a package 'clang-format', please make sure it's version 16 or later.)"
         exit 1
     fi