summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbriaguya <70942617+briaguya-ai@users.noreply.github.com>2024-05-22 09:46:12 -0400
committerGarrett Cox <garrettjcox@gmail.com>2024-05-22 09:05:05 -0500
commit0a2d89924bf54b29921f04ec5357166bbc74be9a (patch)
tree49b4a6585afc9f240b1f5464bc3156e01cb9d5fc
parenta8ffb5bcb6605eb86f6d023bb8ea80f6f614d407 (diff)
clang format (#447)
* add linux clang format script * first shot at powershell * whoops * webrequest is slow, try webclient * just get the one file * simplify and maybe make it work? * whoops again * try a different suggestion * why is it always windows * again * try again * bit of path stuff * chmod +x * add action to check * fix workflow name
-rw-r--r--.github/workflows/clang-format.yml20
-rw-r--r--run-clang-format.ps147
-rwxr-xr-xrun-clang-format.sh29
3 files changed, 96 insertions, 0 deletions
diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml
new file mode 100644
index 000000000..443d6669d
--- /dev/null
+++ b/.github/workflows/clang-format.yml
@@ -0,0 +1,20 @@
+name: clang-format
+on: [pull_request]
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+jobs:
+ clang-format:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+ - name: Install clang-format
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y clang-format-14
+ - name: Run clang-format
+ run: |
+ ./run-clang-format.sh
+ git diff --exit-code
diff --git a/run-clang-format.ps1 b/run-clang-format.ps1
new file mode 100644
index 000000000..38d4d1422
--- /dev/null
+++ b/run-clang-format.ps1
@@ -0,0 +1,47 @@
+$url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/LLVM-14.0.6-win64.exe"
+$llvmInstallerPath = ".\LLVM-14.0.6-win64.exe"
+$clangFormatFilePath = ".\clang-format.exe"
+$requiredVersion = "clang-format version 14.0.6"
+$currentVersion = ""
+
+function Test-7ZipInstalled {
+ $sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
+ return Test-Path $sevenZipPath -PathType Leaf
+}
+
+if (Test-Path $clangFormatFilePath) {
+ $currentVersion = & $clangFormatFilePath --version
+ if (-not ($currentVersion -eq $requiredVersion)) {
+ # Delete the existing file if the version is incorrect
+ Remove-Item $clangFormatFilePath -Force
+ }
+}
+
+if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVersion)) {
+ if (-not (Test-7ZipInstalled)) {
+ Write-Host "7-Zip is not installed. Please install 7-Zip and run the script again."
+ exit
+ }
+
+ $wc = New-Object net.webclient
+ $wc.Downloadfile($url, $llvmInstallerPath)
+
+ $sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
+ $specificFileInArchive = "bin\clang-format.exe"
+ & "$sevenZipPath" e $llvmInstallerPath $specificFileInArchive
+
+ Remove-Item $llvmInstallerPath -Force
+}
+
+$basePath = (Resolve-Path .).Path
+$files = Get-ChildItem -Path $basePath\mm -Recurse -File `
+ | Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or `
+ ($_.Extension -eq '.h' -and `
+ (-not ($_.FullName -like "*\mm\src\*" -or $_.FullName -like "*\mm\include\*")))) -and `
+ (-not ($_.FullName -like "*\mm\assets\*")) }
+
+foreach ($file in $files) {
+ $relativePath = $file.FullName.Substring($basePath.Length + 1)
+ Write-Host "Formatting $relativePath"
+ .\clang-format.exe -i $file.FullName
+}
diff --git a/run-clang-format.sh b/run-clang-format.sh
new file mode 100755
index 000000000..7f37ec3f4
--- /dev/null
+++ b/run-clang-format.sh
@@ -0,0 +1,29 @@
+# this line does quite a bit, so let's break it down
+#
+# find mm
+# use "find" to look in the "mm" directory
+# this ensures we don't try to format stuff in the submodules
+#
+# -type f
+# only look for files
+#
+# -name "*.c" -o -name "*.cpp"
+# find all .c and .cpp files
+#
+# -name "*.h" ! -path "mm/src/**.h" ! -path "mm/include/**.h"
+# find all .h files that aren't in mm/src or mm/include
+# this is because zret decomp only runs clang-format on c files
+# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182
+#
+# ! -path "mm/assets/*"
+# asset headers are autogenerated, don't fight them
+#
+# | sed 's| |\\ |g'
+# pipe the result of find into sed to
+# ensure all the paths returned by find have spaces escaped
+#
+# | xargs clang-format-14 -i
+# use xargs to take each path we've found
+# and pass it as an argument to clang-format
+
+find mm -type f \( -name "*.c" -o -name "*.cpp" -o \( -name "*.h" ! -path "mm/src/**.h" ! -path "mm/include/**.h" \) \) ! -path "mm/assets/*" | sed 's| |\\ |g' | xargs clang-format-14 -i