mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 11:17:53 +01:00
Implement powershell script which enables devs to clang-format modified source files
This commit is contained in:
50
format_sources.ps1
Normal file
50
format_sources.ps1
Normal file
@@ -0,0 +1,50 @@
|
||||
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!"
|
||||
Reference in New Issue
Block a user