Browse Source

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 years ago
parent
commit
388d455575

+ 6 - 1
.clang-format

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

+ 1 - 1
.devcontainer/devcontainer.json

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

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

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

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

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

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

@@ -57,9 +57,9 @@ jobs:
         # Packages below aren't.
         # Packages below aren't.
         run: |
         run: |
           wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
           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 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
           if ${{ matrix.arch == 'aarch64' }}; then
             # FIXME: Remove this when we no longer build our own Qemu binary.
             # 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
             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
           python -m pip install --upgrade pip
           pip install flake8 requests
           pip install flake8 requests
       - name: Check versions
       - 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 ===
       # === PREPARE FOR BUILDING ===
 
 

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

@@ -26,9 +26,9 @@ jobs:
         #
         #
         run: |
         run: |
           wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
           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 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
       - name: Check versions
         run: set +e; g++ --version; g++-12 --version; ninja --version;
         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.
         # Packages below aren't.
         run: |
         run: |
           wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
           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 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
       - name: Check versions
         run: set +e; g++ --version; g++-12 --version; ninja --version;
         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:**
 **Do:**
 
 
 * Write in idiomatic SerenityOS C++20, using the `AK` containers in all code.
 * 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.
 * 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).
 * 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.
 * 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.
 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.
 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
 ## 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…"
 - In QtCreator, go to "Help > About Plugins…"
 - Find the `Beautifier (experimental)` row (for example, by typing `beau` into the search)
 - 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: |
     - script: |
         set -e
         set -e
         wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
         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 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'
       displayName: 'Install Dependencies'
 
 
   - ${{ if eq(parameters.os, 'Linux') }}:
   - ${{ if eq(parameters.os, 'Linux') }}:

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

@@ -28,21 +28,21 @@ fi
 if (( ${#files[@]} )); then
 if (( ${#files[@]} )); then
     TOOLCHAIN_DIR=Toolchain/Local/clang/bin
     TOOLCHAIN_DIR=Toolchain/Local/clang/bin
     CLANG_FORMAT=false
     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
         CLANG_FORMAT=$TOOLCHAIN_DIR/clang-format
     elif command -v clang-format >/dev/null 2>&1 ; then
     elif command -v clang-format >/dev/null 2>&1 ; then
         CLANG_FORMAT=clang-format
         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."
             echo "It is very likely that the resulting changes are not what you wanted."
         fi
         fi
     else
     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
         exit 1
     fi
     fi