From c14ce956adeabe476ad73c18d73103f347c9c613 Mon Sep 17 00:00:00 2001 From: Bart Date: Fri, 22 Aug 2025 13:37:11 -0400 Subject: [PATCH] chore: Update clang-format and prettier with pre-commit (#5709) The change updates how clang-format is called in CI and locally, and adds prettier to the pre-commit hook. Proto files are now also formatted, while external files are excluded. --- .clang-format | 36 +++++------ .git-blame-ignore-revs | 2 + .github/scripts/strategy-matrix/linux.json | 24 ++------ .github/scripts/strategy-matrix/macos.json | 12 +--- .github/scripts/strategy-matrix/windows.json | 14 +---- .github/workflows/check-format.yml | 63 ++++--------------- .github/workflows/on-pr.yml | 4 +- .pre-commit-config.yaml | 64 +++++++++++++++++++- .prettierignore | 1 - 9 files changed, 103 insertions(+), 117 deletions(-) diff --git a/.clang-format b/.clang-format index 9c3820a6bf..bd446022df 100644 --- a/.clang-format +++ b/.clang-format @@ -1,4 +1,20 @@ --- +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: true + AfterControlStatement: true + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false +KeepEmptyLinesAtTheStartOfBlocks: false +MaxEmptyLinesToKeep: 1 +--- Language: Cpp AccessModifierOffset: -4 AlignAfterOpenBracket: AlwaysBreak @@ -18,20 +34,7 @@ AlwaysBreakBeforeMultilineStrings: true AlwaysBreakTemplateDeclarations: true BinPackArguments: false BinPackParameters: false -BraceWrapping: - AfterClass: true - AfterControlStatement: true - AfterEnum: false - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: true - AfterStruct: true - AfterUnion: true - BeforeCatch: true - BeforeElse: true - IndentBraces: false BreakBeforeBinaryOperators: false -BreakBeforeBraces: Custom BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: true ColumnLimit: 80 @@ -66,8 +69,6 @@ IndentFunctionDeclarationAfterType: false IndentRequiresClause: true IndentWidth: 4 IndentWrappedFunctionNames: false -KeepEmptyLinesAtTheStartOfBlocks: false -MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: false @@ -96,11 +97,6 @@ TabWidth: 8 UseTab: Never QualifierAlignment: Right --- -Language: JavaScript ---- -Language: Json -IndentWidth: 2 ---- Language: Proto BasedOnStyle: Google ColumnLimit: 0 diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index a9805e705c..cf50d48f95 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -12,3 +12,5 @@ fe9a5365b8a52d4acc42eb27369247e6f238a4f9 9a93577314e6a8d4b4a8368cc9d2b15a5d8303e8 552377c76f55b403a1c876df873a23d780fcc81c 97f0747e103f13e26e45b731731059b32f7679ac +b13370ac0d207217354f1fc1c29aef87769fb8a1 +896b8c3b54a22b0497cb0d1ce95e1095f9a227ce diff --git a/.github/scripts/strategy-matrix/linux.json b/.github/scripts/strategy-matrix/linux.json index d8f176273d..44eaebd074 100644 --- a/.github/scripts/strategy-matrix/linux.json +++ b/.github/scripts/strategy-matrix/linux.json @@ -2,21 +2,11 @@ "architecture": [ { "platform": "linux/amd64", - "runner": [ - "self-hosted", - "Linux", - "X64", - "heavy" - ] + "runner": ["self-hosted", "Linux", "X64", "heavy"] }, { "platform": "linux/arm64", - "runner": [ - "self-hosted", - "Linux", - "ARM64", - "heavy-arm64" - ] + "runner": ["self-hosted", "Linux", "ARM64", "heavy-arm64"] } ], "os": [ @@ -159,12 +149,6 @@ "compiler_version": "19" } ], - "build_type": [ - "Debug", - "Release" - ], - "cmake_args": [ - "-Dunity=OFF", - "-Dunity=ON" - ] + "build_type": ["Debug", "Release"], + "cmake_args": ["-Dunity=OFF", "-Dunity=ON"] } diff --git a/.github/scripts/strategy-matrix/macos.json b/.github/scripts/strategy-matrix/macos.json index a6ffdf14b7..de37639ddd 100644 --- a/.github/scripts/strategy-matrix/macos.json +++ b/.github/scripts/strategy-matrix/macos.json @@ -2,12 +2,7 @@ "architecture": [ { "platform": "macos/arm64", - "runner": [ - "self-hosted", - "macOS", - "ARM64", - "mac-runner-m1" - ] + "runner": ["self-hosted", "macOS", "ARM64", "mac-runner-m1"] } ], "os": [ @@ -18,10 +13,7 @@ "compiler_version": "" } ], - "build_type": [ - "Debug", - "Release" - ], + "build_type": ["Debug", "Release"], "cmake_args": [ "-Dunity=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5", "-Dunity=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5" diff --git a/.github/scripts/strategy-matrix/windows.json b/.github/scripts/strategy-matrix/windows.json index aaa8c94411..5e6e536750 100644 --- a/.github/scripts/strategy-matrix/windows.json +++ b/.github/scripts/strategy-matrix/windows.json @@ -2,9 +2,7 @@ "architecture": [ { "platform": "windows/amd64", - "runner": [ - "windows-latest" - ] + "runner": ["windows-latest"] } ], "os": [ @@ -15,12 +13,6 @@ "compiler_version": "" } ], - "build_type": [ - "Debug", - "Release" - ], - "cmake_args": [ - "-Dunity=OFF", - "-Dunity=ON" - ] + "build_type": ["Debug", "Release"], + "cmake_args": ["-Dunity=OFF", "-Dunity=ON"] } diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index 5e3da10028..359e3e634b 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -13,9 +13,9 @@ defaults: shell: bash jobs: - clang-format: + pre-commit: runs-on: ubuntu-latest - container: ghcr.io/xrplf/ci/tools-rippled-clang-format + container: ghcr.io/xrplf/ci/tools-rippled-pre-commit steps: # The $GITHUB_WORKSPACE and ${{ github.workspace }} might not point to the # same directory for jobs running in containers. The actions/checkout step @@ -38,48 +38,11 @@ jobs: echo 'Checking environment variables.' env | sort + echo 'Checking pre-commit version.' + pre-commit --version + echo 'Checking clang-format version.' clang-format --version - - name: Format code - run: find include src tests -type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.h' -o -name '*.ipp' \) -exec clang-format -i {} + - - name: Check for differences - env: - MESSAGE: | - One or more files did not conform to the formatting specified in - .clang-format. Maybe you did not run 'git-clang-format' or - 'clang-format' before committing, or your version of clang-format - has an incompatibility with the one used here (see the "Check - configuration" step above). - - Run 'git-clang-format --extensions cpp,h,hpp,ipp develop' in your - repo, and then commit and push the changes. - run: | - DIFF=$(git status --porcelain) - if [ -n "${DIFF}" ]; then - # Print the files that changed to give the contributor a hint about - # what to expect when running git-clang-format on their own machine. - git status - echo "${MESSAGE}" - exit 1 - fi - - prettier: - runs-on: ubuntu-latest - container: ghcr.io/xrplf/ci/tools-rippled-prettier - steps: - - name: Configure git safe.directory - run: | - git config --global --add safe.directory $GITHUB_WORKSPACE - git config --global --add safe.directory ${{ github.workspace }} - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - name: Check configuration - run: | - echo 'Checking path.' - echo ${PATH} | tr ':' '\n' - - echo 'Checking environment variables.' - env | sort echo 'Checking NPM version.' npm --version @@ -90,22 +53,22 @@ jobs: echo 'Checking prettier version.' prettier --version - name: Format code - run: prettier --check . + run: pre-commit run --show-diff-on-failure --color=always --all-files - name: Check for differences env: MESSAGE: | - One or more files did not conform to the formatting rules specified - by Prettier. Maybe you did not run 'prettier' before committing, or - your version of prettier has an incompatibility with the one used - here (see the "Check configuration" step above). + One or more files did not conform to the formatting. Maybe you did + not run 'pre-commit' before committing, or your version of + 'clang-format' or 'prettier' has an incompatibility with the ones + used here (see the "Check configuration" step above). - Run 'prettier --check .' in your repo, and then commit and push the - changes. + Run 'pre-commit run --all-files' in your repo, and then commit and + push the changes. run: | DIFF=$(git status --porcelain) if [ -n "${DIFF}" ]; then # Print the files that changed to give the contributor a hint about - # what to expect when running prettier on their own machine. + # what to expect when running pre-commit on their own machine. git status echo "${MESSAGE}" exit 1 diff --git a/.github/workflows/on-pr.yml b/.github/workflows/on-pr.yml index f3811c4ea4..d1623874ac 100644 --- a/.github/workflows/on-pr.yml +++ b/.github/workflows/on-pr.yml @@ -69,7 +69,7 @@ jobs: runs-on: ubuntu-latest steps: - name: No-op - run: echo '' + run: true check-format: needs: should-run @@ -86,7 +86,7 @@ jobs: runs-on: ubuntu-latest steps: - name: No-op - run: echo '' + run: true outputs: conan_remote_name: ${{ env.CONAN_REMOTE_NAME }} conan_remote_url: ${{ env.CONAN_REMOTE_URL }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7daecdb5ec..3bd60b76d0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,64 @@ -# .pre-commit-config.yaml +# To run pre-commit hooks, first install pre-commit: +# - `pip install pre-commit==${PRE_COMMIT_VERSION}` +# - `pip install pre-commit-hooks==${PRE_COMMIT_HOOKS_VERSION}` +# +# Depending on your system, you can use `brew install` or `apt install` as well +# for installing the pre-commit package, but `pip` is needed to install the +# hooks; you can also use `pipx` if you prefer. +# Next, install the required formatters: +# - `pip install clang-format==${CLANG_VERSION}` +# - `npm install prettier@${PRETTIER_VERSION}` +# +# See https://github.com/XRPLF/ci/blob/main/.github/workflows/tools-rippled.yml +# for the versions used in the CI pipeline. You will need to have the exact same +# versions of the tools installed on your system to produce the same results as +# the pipeline. +# +# Then, run the following command to install the git hook scripts: +# - `pre-commit install` +# You can run all configured hooks against all files with: +# - `pre-commit run --all-files` +# To manually run a specific hook, use: +# - `pre-commit run --all-files` +# To run the hooks against only the files changed in the current commit, use: +# - `pre-commit run` repos: - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v18.1.8 + - repo: local hooks: - id: clang-format + name: clang-format + language: system + entry: clang-format -i + files: '\.(cpp|hpp|h|ipp|proto)$' + - id: trailing-whitespace + name: trailing-whitespace + entry: trailing-whitespace-fixer + language: system + types: [text] + - id: end-of-file + name: end-of-file + entry: end-of-file-fixer + language: system + types: [text] + - id: mixed-line-ending + name: mixed-line-ending + entry: mixed-line-ending + language: system + types: [text] + - id: check-merge-conflict + name: check-merge-conflict + entry: check-merge-conflict --assume-in-merge + language: system + types: [text] + - repo: local + hooks: + - id: prettier + name: prettier + language: system + entry: prettier --ignore-unknown --write + +exclude: | + (?x)^( + external/.*| + .github/scripts/levelization/results/.*\.txt + )$ diff --git a/.prettierignore b/.prettierignore index 477120ade1..5446323fad 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1 @@ external -.*