af1152b001
Refactored all C# test files to use explicit namespace declarations and moved all using directives inside the namespace block for consistency. Updated assembly info and cache files to reflect the new build. Adjusted MvcTestingAppManifest.json to use fully qualified assembly names. No functional changes; all updates are related to code style, organization, and project metadata.
196 lines
5.3 KiB
PowerShell
196 lines
5.3 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
<#
|
|
.SYNOPSIS
|
|
Fixes StyleCop warnings in C# files.
|
|
|
|
.DESCRIPTION
|
|
Automatically fixes common StyleCop warnings:
|
|
- SA1413: Adds trailing commas to multi-line initializers
|
|
- SA1515: Adds blank lines before single-line comments
|
|
- SA1518: Ensures files end with single newline
|
|
|
|
.PARAMETER Path
|
|
The root path to search for C# files. Defaults to "MediaBrowser.Model"
|
|
|
|
.PARAMETER DryRun
|
|
If specified, shows what would be changed without actually modifying files
|
|
|
|
.EXAMPLE
|
|
.\FixStyleCopWarnings.ps1 -DryRun
|
|
#>
|
|
|
|
param(
|
|
[string]$Path = "MediaBrowser.Model",
|
|
[switch]$DryRun
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
function Fix-TrailingCommas {
|
|
param([string]$Content)
|
|
|
|
$modified = $false
|
|
$lines = $content -split '\r?\n'
|
|
|
|
for ($i = 0; $i -lt $lines.Length - 1; $i++) {
|
|
$currentLine = $lines[$i]
|
|
$nextLine = $lines[$i + 1]
|
|
|
|
# Check if current line ends with a property/value without comma
|
|
# and next line closes the initializer
|
|
if ($currentLine -match '^\s+\w+\s*=\s*.+[^,]\s*$' -and $nextLine -match '^\s*[}\)]') {
|
|
$lines[$i] = $currentLine.TrimEnd() + ','
|
|
$modified = $true
|
|
}
|
|
}
|
|
|
|
if ($modified) {
|
|
return ($lines -join "`n")
|
|
}
|
|
|
|
return $Content
|
|
}
|
|
|
|
function Fix-BlankLinesBeforeComments {
|
|
param([string]$Content)
|
|
|
|
$modified = $false
|
|
$lines = $content -split '\r?\n'
|
|
$newLines = @()
|
|
|
|
for ($i = 0; $i -lt $lines.Length; $i++) {
|
|
$currentLine = $lines[$i]
|
|
|
|
# Check if this is a single-line comment
|
|
if ($currentLine -match '^\s+//\s+\w') {
|
|
# Check if previous line exists and is not blank
|
|
if ($i -gt 0) {
|
|
$prevLine = $lines[$i - 1]
|
|
$prevLineIsBlank = [string]::IsNullOrWhiteSpace($prevLine)
|
|
$prevLineIsOpenBrace = $prevLine -match '\{\s*$'
|
|
$prevLineIsComment = $prevLine -match '^\s*//'
|
|
|
|
# Add blank line if previous line is not blank, not open brace, not another comment
|
|
if (-not $prevLineIsBlank -and -not $prevLineIsOpenBrace -and -not $prevLineIsComment) {
|
|
$newLines += ""
|
|
$modified = $true
|
|
}
|
|
}
|
|
}
|
|
|
|
$newLines += $currentLine
|
|
}
|
|
|
|
if ($modified) {
|
|
return ($newLines -join "`n")
|
|
}
|
|
|
|
return $Content
|
|
}
|
|
|
|
function Fix-FileEnding {
|
|
param([string]$Content)
|
|
|
|
# Ensure file ends with exactly one newline
|
|
$trimmed = $Content.TrimEnd("`r", "`n", " ", "`t")
|
|
return $trimmed + "`n"
|
|
}
|
|
|
|
function Fix-StyleCopWarnings {
|
|
param(
|
|
[string]$FilePath,
|
|
[switch]$DryRun
|
|
)
|
|
|
|
$content = Get-Content -Path $FilePath -Raw
|
|
$originalContent = $content
|
|
|
|
# Apply fixes
|
|
$content = Fix-TrailingCommas -Content $content
|
|
$content = Fix-BlankLinesBeforeComments -Content $content
|
|
$content = Fix-FileEnding -Content $content
|
|
|
|
# Restore Windows line endings if original had them
|
|
if ($originalContent -match '\r\n') {
|
|
$content = $content -replace '(?<!\r)\n', "`r`n"
|
|
}
|
|
|
|
if ($content -ne $originalContent) {
|
|
if ($DryRun) {
|
|
Write-Host " [DRY-RUN] Would fix StyleCop warnings" -ForegroundColor Cyan
|
|
return $true
|
|
}
|
|
|
|
[System.IO.File]::WriteAllText($FilePath, $content, [System.Text.UTF8Encoding]::new($false))
|
|
Write-Host " [FIXED]" -ForegroundColor Green
|
|
return $true
|
|
}
|
|
|
|
Write-Host " [SKIP] No warnings to fix" -ForegroundColor Gray
|
|
return $false
|
|
}
|
|
|
|
# Main script
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host "StyleCop Warning Fixer" -ForegroundColor Cyan
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host
|
|
|
|
if ($DryRun) {
|
|
Write-Host "DRY RUN MODE - No files will be modified" -ForegroundColor Yellow
|
|
Write-Host
|
|
}
|
|
|
|
if (-not (Test-Path $Path)) {
|
|
Write-Error "Path not found: $Path"
|
|
exit 1
|
|
}
|
|
|
|
$files = Get-ChildItem -Path $Path -Filter "*.cs" -Recurse | Where-Object {
|
|
$_.FullName -notmatch "\\obj\\" -and
|
|
$_.FullName -notmatch "\\bin\\"
|
|
}
|
|
|
|
Write-Host "Found $($files.Count) C# files in $Path" -ForegroundColor Cyan
|
|
Write-Host
|
|
|
|
$fixedCount = 0
|
|
$skippedCount = 0
|
|
$errorCount = 0
|
|
|
|
foreach ($file in $files) {
|
|
$relativePath = $file.FullName.Replace((Get-Location).Path, "").TrimStart([char]92, [char]47)
|
|
Write-Host "[Processing] $relativePath" -ForegroundColor White
|
|
|
|
try {
|
|
$fixed = Fix-StyleCopWarnings -FilePath $file.FullName -DryRun:$DryRun
|
|
if ($fixed) {
|
|
$fixedCount++
|
|
} else {
|
|
$skippedCount++
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host " [ERROR] $_" -ForegroundColor Red
|
|
$errorCount++
|
|
}
|
|
}
|
|
|
|
Write-Host
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host "Summary:" -ForegroundColor Cyan
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host " Total files: $($files.Count)" -ForegroundColor White
|
|
Write-Host " Fixed: $fixedCount" -ForegroundColor Green
|
|
Write-Host " Skipped: $skippedCount" -ForegroundColor Gray
|
|
Write-Host " Errors: $errorCount" -ForegroundColor Red
|
|
|
|
if ($DryRun) {
|
|
Write-Host
|
|
Write-Host "This was a DRY RUN. Run without -DryRun to apply changes." -ForegroundColor Yellow
|
|
}
|
|
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
|
|
exit $errorCount
|