forked from microsoft/PowerToys
-
Notifications
You must be signed in to change notification settings - Fork 0
/
format_sources.ps1
50 lines (43 loc) · 1.55 KB
/
format_sources.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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!"