Files
panopainter/scripts/automation/check-renderer-boundary.ps1

63 lines
1.6 KiB
PowerShell

[CmdletBinding()]
param(
[string]$Root = ""
)
$ErrorActionPreference = "Stop"
if ([string]::IsNullOrWhiteSpace($Root)) {
$Root = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path
}
$started = Get-Date
$pattern = '\b(?:GL|WGL)_[A-Z0-9_]+\b'
$allowed = @(
"src/renderer_gl/",
"src/rtt.cpp",
"src/texture.cpp"
)
$violations = @()
$files = Get-ChildItem -Path (Join-Path $Root "src") -Recurse -File -Include *.c,*.cc,*.cpp,*.h,*.hpp
foreach ($file in $files) {
$relative = $file.FullName.Substring($Root.Length).TrimStart('\', '/').Replace('\', '/')
$isAllowed = $false
foreach ($prefix in $allowed) {
if ($relative.StartsWith($prefix)) {
$isAllowed = $true
break
}
}
if ($isAllowed) {
continue
}
$lineNumber = 0
foreach ($line in Get-Content -LiteralPath $file.FullName) {
$lineNumber += 1
$trimmed = $line.TrimStart()
if ($trimmed.StartsWith("//")) {
continue
}
$matches = [regex]::Matches($line, $pattern)
foreach ($match in $matches) {
$violations += [ordered]@{
file = $relative
line = $lineNumber
token = $match.Value
}
}
}
}
$exitCode = if ($violations.Count -eq 0) { 0 } else { 1 }
$elapsed = [int]((Get-Date) - $started).TotalMilliseconds
[ordered]@{
command = "check-renderer-boundary"
exitCode = $exitCode
violationCount = $violations.Count
violations = @($violations | Select-Object -First 50)
elapsedMs = $elapsed
} | ConvertTo-Json -Compress -Depth 4
exit $exitCode