39 lines
1 KiB
PowerShell
39 lines
1 KiB
PowerShell
|
<#
|
||
|
.SYNOPSIS
|
||
|
Gets the lines to hit from a sourcefile for coverage stubs.
|
||
|
#>
|
||
|
[CmdletBinding()]
|
||
|
param (
|
||
|
[Parameter(Mandatory, ValueFromRemainingArguments)]
|
||
|
[String[]]
|
||
|
$Path
|
||
|
)
|
||
|
|
||
|
$stubInfo = @(foreach ($sourcePath in $Path) {
|
||
|
# Default is to just no lines for missing files
|
||
|
[Collections.Generic.HashSet[int]]$lines = @()
|
||
|
|
||
|
if (Test-Path -LiteralPath $sourcePath) {
|
||
|
$code = [ScriptBlock]::Create([IO.File]::ReadAllText($sourcePath))
|
||
|
|
||
|
# We set our breakpoints with this predicate so our stubs should match
|
||
|
# that logic.
|
||
|
$predicate = {
|
||
|
$args[0] -is [System.Management.Automation.Language.CommandBaseAst]
|
||
|
}
|
||
|
$cmds = $code.Ast.FindAll($predicate, $true)
|
||
|
|
||
|
# We only care about unique lines not multiple commands on 1 line.
|
||
|
$lines = @(foreach ($cmd in $cmds) {
|
||
|
$cmd.Extent.StartLineNumber
|
||
|
})
|
||
|
}
|
||
|
|
||
|
[PSCustomObject]@{
|
||
|
Path = $sourcePath
|
||
|
Lines = $lines
|
||
|
}
|
||
|
})
|
||
|
|
||
|
ConvertTo-Json -InputObject $stubInfo -Depth 2 -Compress
|