PowerToys/format_sources.ps1

50 lines
1.5 KiB
PowerShell

param (
[switch]$all = $false
)
if(!(Get-Command "git" -ErrorAction SilentlyContinue)) {
throw "You need to have a git in path to be able to format only the dirty files!"
}
$clangFormat = "clang-format.exe"
if(!(Get-Command $clangFormat -ErrorAction SilentlyContinue)) {
Write-Information "Can't find clang-format.exe in %PATH%, trying to use %VCINSTALLDIR%..."
$clangFormat="$env:VCINSTALLDIR\Tools\Llvm\bin\clang-format.exe"
if(!(Test-Path -Path $clangFormat -PathType leaf)) {
throw "Can't find clang-format.exe executable. Make sure you either have it in %PATH% or run this script from vcvars.bat!"
}
}
$sourceExtensions = New-Object System.Collections.Generic.HashSet[string]
$sourceExtensions.Add(".cpp") | Out-Null
$sourceExtensions.Add(".h") | Out-Null
function Get-Dirty-Files-From-Git() {
$staged = & git diff --name-only --diff-filter=d --cached
$unstaged = & git ls-files -m
$untracked = & git ls-files --others --exclude-standard
$result = New-Object System.Collections.Generic.List[string]
$staged, $unstaged, $untracked | % {
$_.Split(" ") |
where {$sourceExtensions.Contains((Get-Item $_).Extension)} |
foreach {$result.Add($_)}
}
return $result
}
if($all) {
$filesToFormat =
Get-ChildItem -Recurse -File src |
Resolve-Path -Relative |
where {$sourceExtensions.Contains((Get-Item $_).Extension)}
}
else {
$filesToFormat = Get-Dirty-Files-From-Git
}
$filesToFormat | % {
Write-Host "Formatting $_"
& $clangFormat -i -style=file -fallback-style=none $_ 2>&1
}
Write-Host "Done!"