src/SyntaxErrorDataBuilder.ps1

param ($SyntaxErrors, $CodeContent)
$CodeLines = if ($CodeContent) { $CodeContent -split "\r?\n" }
$SyntaxErrors | ForEach-Object {
    $Extent = $_.Extent
    if ($Extent.StartLineNumber) {
        $LineStr = $Extent.StartLineNumber.ToString()
    }
    if ($Extent.StartLineNumber -ne $Extent.EndLineNumber) {
        $LineStr += "-$($Extent.EndLineNumber)"
    }
    if ($Extent.StartColumnNumber) {
        $ColumnStr = $Extent.StartColumnNumber.ToString()
    }
    if ($Extent.StartColumnNumber -ne $Extent.EndColumnNumber) {
        $ColumnStr += "-$($Extent.EndColumnNumber)"
    }
    $SpoceText = $Extent.StartLineNumber, $Extent.StartColumnNumber
    # 只显示出错的那一行;没有代码内容或行号越界时退回完整脚本
    $ScriptLine = if ($CodeLines -and $Extent.StartLineNumber -ge 1 -and $Extent.StartLineNumber -le $CodeLines.Count) {
        $CodeLines[$Extent.StartLineNumber - 1]
    }
    elseif ($Extent.StartScriptPosition) {
        $Extent.StartScriptPosition.GetFullScript()
    }
    @{
        Text      = $ScriptLine
        Message   = $_.Message
        Spoce     = @{
            Line      = $Extent.StartLineNumber
            Column    = $Extent.StartColumnNumber
            LineEnd   = $Extent.EndLineNumber
            ColumnEnd = $Extent.EndColumnNumber
        }
        SpoceText = $SpoceText
        ErrorId   = $_.ErrorId
    }
}