27 lines
1.3 KiB
PowerShell
27 lines
1.3 KiB
PowerShell
[CmdletBinding()]
|
||||
|
|
param(
|
|||
|
|
[string[]]$SourceRoots = @((Join-Path (Split-Path -Parent $PSScriptRoot) 'src/main/java')),
|
|||
|
|
[double]$MinimumPercent = 20,
|
|||
|
|
[switch]$Detailed
|
|||
|
|
)
|
|||
|
|
$ErrorActionPreference = 'Stop'
|
|||
|
|
$rows = foreach ($root in $SourceRoots) {
|
|||
|
|
foreach ($file in Get-ChildItem -LiteralPath $root -Filter '*.java' -File -Recurse) {
|
|||
|
|
$lines = [IO.File]::ReadAllLines($file.FullName)
|
|||
|
|
$nonEmpty = @($lines | Where-Object { $_.Trim().Length -gt 0 })
|
|||
|
|
$comments = @($nonEmpty | Where-Object { $_ -match '^\s*(//|/\*|\*|\*/)' })
|
|||
|
|
[pscustomobject]@{
|
|||
|
|
File = $file.FullName
|
|||
|
|
NonEmpty = $nonEmpty.Count
|
|||
|
|
CommentLines = $comments.Count
|
|||
|
|
Percent = if ($nonEmpty.Count) { [Math]::Round(100.0 * $comments.Count / $nonEmpty.Count, 2) } else { 0 }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$total = ($rows | Measure-Object NonEmpty -Sum).Sum
|
|||
|
|
$commentTotal = ($rows | Measure-Object CommentLines -Sum).Sum
|
|||
|
|
$percent = if ($total) { 100.0 * $commentTotal / $total } else { 0 }
|
|||
|
|
if ($Detailed) { $rows | Format-Table -AutoSize }
|
|||
|
|
Write-Output ('Java 注释占比:{0:N2}%({1} 注释行 / {2} 非空源码行)' -f $percent, $commentTotal, $total)
|
|||
|
|
if ($percent -lt $MinimumPercent) { throw ('尚未达到约定的 {0}% 注释行要求。' -f $MinimumPercent) }
|