Przeglądaj źródła

CI: Integrate `pre-commit` for style checks

Thaddeus Crews 8 miesięcy temu
rodzic
commit
f70686cdbe

+ 4 - 12
.github/workflows/ci.yml

@@ -15,19 +15,11 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v4
 
-      - name: Install dependencies
-        run: |
-          # Install tools used by `_tools/format.sh`.
-          sudo apt-get -qq update
-          sudo apt-get -qq install dos2unix recode
-          sudo pip3 install -r requirements.txt
-          sudo pip3 install codespell
-
-      - name: Linter checks
-        run: |
-          bash _tools/format.sh
+      - name: Style checks via pre-commit
+        uses: pre-commit/[email protected]
 
-          codespell -D- -D _tools/codespell-dict.txt -I _tools/codespell-ignore.txt -x _tools/codespell-ignore-lines.txt -S tutorials/i18n/locales.rst {about,community,contributing,getting_started,tutorials}/{*.rst,**/*.rst,**/**/*.rst,**/**/**/*.rst}
+      - name: Install dependencies
+        run: sudo pip3 install -r requirements.txt
 
       # Use dummy builder to improve performance as we don't need the generated HTML in this workflow.
       - name: Sphinx build

+ 18 - 0
.pre-commit-config.yaml

@@ -0,0 +1,18 @@
+default_language_version:
+  python: python3
+
+repos:
+  - repo: https://github.com/codespell-project/codespell
+    rev: v2.3.0
+    hooks:
+      - id: codespell
+        files: ^(about|community|contributing|getting_started|tutorials)/.*\.rst$
+        additional_dependencies: [tomli]
+
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v5.0.0
+    hooks:
+      - id: end-of-file-fixer
+      - id: fix-byte-order-marker
+      - id: mixed-line-ending
+        args: ['--fix=lf']

+ 0 - 42
_tools/format.sh

@@ -1,42 +0,0 @@
-#!/usr/bin/env bash
-
-set -uo pipefail
-IFS=$'\n\t'
-
-# Loops through all text files tracked by Git.
-git grep -zIl '' |
-while IFS= read -rd '' f; do
-    # Exclude csproj and hdr files.
-    if [[ "$f" == *"csproj" ]]; then
-        continue
-    elif [[ "$f" == *"hdr" ]]; then
-        continue
-    fi
-    # Ensures that files are UTF-8 formatted.
-    recode UTF-8 "$f" 2> /dev/null
-    # Ensures that files have LF line endings.
-    dos2unix "$f" 2> /dev/null
-    # Ensures that files do not contain a BOM.
-    sed -i '1s/^\xEF\xBB\xBF//' "$f"
-    # Ensures that files end with newline characters.
-    tail -c1 < "$f" | read -r _ || echo >> "$f";
-done
-
-git diff > patch.patch
-FILESIZE="$(stat -c%s patch.patch)"
-MAXSIZE=5
-
-# If no patch has been generated all is OK, clean up, and exit.
-if (( FILESIZE < MAXSIZE )); then
-    printf "Files in this commit comply with the formatting rules.\n"
-    rm -f patch.patch
-    exit 0
-fi
-
-# A patch has been created, notify the user, clean up, and exit.
-printf "\n*** The following differences were found between the code "
-printf "and the formatting rules:\n\n"
-cat patch.patch
-printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
-rm -f patch.patch
-exit 1

+ 0 - 1
classes/index.rst

@@ -1085,4 +1085,3 @@ Variant types
     class_vector3i
     class_vector4
     class_vector4i
-

+ 0 - 1
contributing/how_to_contribute.rst

@@ -108,4 +108,3 @@ Community support
   Chances are you looked for learning materials outside of what the documentation provides.
   Without content creators covering the game development process, there would not be this big of a community today.
   Therefore it seemed only right to mention them in a page about important contributions to the project.
-

+ 0 - 1
getting_started/introduction/first_look_at_the_editor.rst

@@ -181,4 +181,3 @@ Alternatively,
   or built-in variable in the script editor.
 * Right-clicking on nodes and choosing **Open Documentation** or choosing **Lookup Symbol**
   for elements in script editor will directly open their documentation.
-

+ 8 - 0
pyproject.toml

@@ -0,0 +1,8 @@
+[tool.ruff]
+line-length = 120
+
+[tool.codespell]
+dictionary = ["_tools/codespell-dict.txt", "-"]
+ignore-words = "_tools/codespell-ignore.txt"
+exclude-file = "_tools/codespell-ignore-lines.txt"
+skip = "tutorials/i18n/locales.rst"

+ 0 - 1
tutorials/assets_pipeline/escn_exporter/index.rst

@@ -11,4 +11,3 @@ is not maintained or supported in Godot 4.x. While not officially supported, the
 partially work for some Godot and Blender versions, particularly before Blender version 4.0.
 For complete docs on the Blender exporter, see the 
 `previous version of this page <https://docs.godotengine.org/en/4.0/tutorials/assets_pipeline/escn_exporter/index.html>`__.
-

+ 0 - 1
tutorials/editor/external_editor.rst

@@ -119,4 +119,3 @@ Emacs
 ^^^^^
 
 Check the official instructions to configure `LSP <https://github.com/godotengine/emacs-gdscript-mode#auto-completion-with-the-language-server-protocol-lsp>`_, and `DAP <https://github.com/godotengine/emacs-gdscript-mode#using-the-debugger>`_.
-

+ 0 - 1
tutorials/navigation/navigation_using_navigationmeshes.rst

@@ -694,4 +694,3 @@ The following script uses the NavigationServer to update a navigation region wit
             NavigationServer3D.RegionSetNavigationMesh(_regionRid, _navigationMesh);
         }
     }
-

+ 0 - 1
tutorials/scripting/gdextension/gdextension_file.rst

@@ -182,4 +182,3 @@ If no path is supplied Godot will move the libraries into the same directory as
         "res://bin/libdependency.linux.template_release.arm64.so" : "",
         "res://bin/libdependency.linux.template_release.rv64.so" : ""
     }
-

+ 0 - 1
tutorials/xr/xr_action_map.rst

@@ -385,4 +385,3 @@ This is why many XR runtimes only use it as a last resort and will attempt to us
   This is our advice as well: limit your action map to the interaction profiles for devices you have actually tested your game with.
   The Oculus Touch controller is widely used as a fallback controller by many runtimes.
   If you are able to test your game using a Meta Rift or Quest and add this profile there is a high probability your game will work with other headsets.
-