Private/New-FunctionHealthRecord.ps1

Function New-FunctionHealthRecord {
<#
.SYNOPSIS
    Creates a new custom object and gives it the TypeName : 'PSCodeHealth.Function.HealthRecord'.
.DESCRIPTION
    Creates a new custom object and gives it the TypeName : 'PSCodeHealth.Function.HealthRecord'.
 
.PARAMETER FunctionDefinition
    To specify the function definition.
 
.PARAMETER FunctionTestCoverage
    To specify the percentage of lines of code in the specified function that are tested by unit tests.
 
.EXAMPLE
    PS C:\> New-FunctionHealthRecord -FunctionDefinition $MyFunctionAst -FunctionTestCoverage $TestCoverage
 
    Returns new custom object of the type PSCodeHealth.Function.HealthRecord.
 
.OUTPUTS
    PSCodeHealth.Function.HealthRecord
 
.NOTES
     
#>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    Param (
        [Parameter(Position=0, Mandatory)]
        [System.Management.Automation.Language.FunctionDefinitionAst]$FunctionDefinition,

        [Parameter(Position=1, Mandatory)]
        [AllowNull()]
        [PSTypeName('PSCodeHealth.Function.TestCoverageInfo')]
        [PSCustomObject]$FunctionTestCoverage
    )

    $ScriptAnalyzerResultDetails = Get-FunctionScriptAnalyzerResult -FunctionDefinition $FunctionDefinition

    $ObjectProperties = [ordered]@{
        'FunctionName'                = $FunctionDefinition.Name
        'FilePath'                    = $FunctionDefinition.Extent.File
        'LinesOfCode'                 = Get-FunctionLinesOfCode -FunctionDefinition $FunctionDefinition
        'ScriptAnalyzerFindings'      = $ScriptAnalyzerResultDetails.Count
        'ScriptAnalyzerResultDetails' = $ScriptAnalyzerResultDetails
        'ContainsHelp'                = Test-FunctionHelpCoverage -FunctionDefinition $FunctionDefinition
        'TestCoverage'                = $FunctionTestCoverage.CodeCoveragePerCent
        'CommandsMissed'              = ($FunctionTestCoverage.CommandsMissed | Measure-Object).Count
        'Complexity'                  = Measure-FunctionComplexity -FunctionDefinition $FunctionDefinition
        'MaximumNestingDepth'         = Measure-FunctionMaxNestingDepth -FunctionDefinition $FunctionDefinition
    }

    $CustomObject = New-Object -TypeName PSObject -Property $ObjectProperties
    $CustomObject.psobject.TypeNames.Insert(0, 'PSCodeHealth.Function.HealthRecord')
    return $CustomObject
}