/
clang-tidy.ps1
116 lines (101 loc) · 3.17 KB
/
clang-tidy.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env pwsh
# -- -m64 -x c++ -std=c++2a -ferror-limit=1000 -D_WIN64 -DNDEBUG -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0502 -DWINVER=0x0502 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -DSCI_LEXER -DNO_CXX11_REGEX -I../include -Wall -Wextra -Wshadow -Wimplicit-fallthrough -Wcomma -Wformat=2
param(
[string]$Out
)
# C:\Program Files\Microsoft Visual Studio\2022
$VS2022Root = "$env:ProgramFiles\Microsoft Visual Studio\2022"
$clangtidy = $null
$clangtidyLocal = $(
# x64
"$VS2022Root\Preview\VC\Tools\Llvm\x64\bin\clang-tidy.exe",
"$VS2022Root\Community\VC\Tools\Llvm\x64\bin\clang-tidy.exe",
"$VS2022Root\Professional\VC\Tools\Llvm\x64\bin\clang-tidy.exe",
"$VS2022Root\Enterprise\VC\Tools\Llvm\x64\bin\clang-tidy.exe",
"$env:ProgramFiles\llvm\bin\clang-tidy.exe"
)
foreach ($c in $clangtidyLocal) {
if (Test-Path $c) {
$clangtidy = $c
break
}
}
if ($null -eq $clangtidy) {
$clangtidyobj = Get-Command -CommandType Application "clang-tidy" -ErrorAction SilentlyContinue
if ($null -eq $clangtidyobj) {
Write-Host -ForegroundColor Red "No clang-tidy to be found"
return
}
$clangtidy = $clangtidyobj[0].Source
}
$SOURCE_DIRS = $(
"$PSScriptRoot\tools\baulk",
"$PSScriptRoot\tools\baulk-exec",
"$PSScriptRoot\tools\baulk-lnk",
"$PSScriptRoot\tools\baulk-update",
"$PSScriptRoot\lib\archive",
"$PSScriptRoot\lib\archive\zip",
"$PSScriptRoot\lib\archive\tar",
"$PSScriptRoot\lib\mem",
"$PSScriptRoot\lib\misc",
"$PSScriptRoot\lib\net",
"$PSScriptRoot\lib\vfs"
)
$checks = $(
"-*",
"clang-analyzer-*",
"-clang-analyzer-cplusplus*",
"performance-*",
"cert-*",
"bugprone-*",
"readability-*",
"-readability-magic-numbers",
"-readability-qualified-auto",
"modernize-*",
"-modernize-use-trailing-return-type",
"-modernize-avoid-c-arrays",
"-header-filter=.*"
)
$checksText = [string]::Join(",", $checks)
$inputArgs = $(
"-checks=$checksText",
"--",
"-m64",
"-x",
"c++" ,
"-std=c++20",
"-ferror-limit=1000",
"-D_WIN64",
"-DNDEBUG",
"-DUNICODE",
"-D_UNICODE",
"-D_WIN32_WINNT=0x0A00",
"-DWINVER=0x0A00",
"-Iinclude",
"-Ivendor/bela/include",
"-Ivendor/pugixml",
"-Ilib/archive/brotli/include",
"-Ilib/archive/bzip2",
"-Ilib/archive/ced",
"-Ilib/archive/chromium_zlib",
"-Ilib/archive/liblzma/api",
"-Ilib/archive/zstd",
"-Wall",
"-Wextra",
"-Wshadow",
"-Wimplicit-fallthrough"
)
$inputArgsPrefix = [string]::Join(" ", $inputArgs)
Write-Host "Use $clangtidy`n$inputArgsPrefix"
$extensions = (".cc", ".cxx", ".cpp", ".c++");
foreach ($d in $SOURCE_DIRS) {
Write-Host -ForegroundColor Magenta "check $d"
Get-ChildItem -Force -File -Path $d | ForEach-Object {
if ($extensions.Contains($_.Extension)) {
$FileName = $_.FullName
Write-Host -ForegroundColor Magenta "check $FileName"
$exitCode = Start-Process -FilePath $clangtidy -ArgumentList "`"$FileName`" $inputArgsPrefix" -Wait -PassThru -NoNewWindow -WorkingDirectory $PSScriptRoot
$exitCode | Out-Null
}
}
}