From 597bfc9696c9f33d16ce944375ea11a51f7b2bc5 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Mon, 8 Mar 2021 10:37:11 -0800 Subject: [PATCH] Update `Concise` ErrorView to not show line information for errors from script module functions (#14912) --- .../PowerShellCore_format_ps1xml.cs | 3 ++- .../engine/Formatting/ErrorView.Tests.ps1 | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs index d97631646..8c2a5bb98 100644 --- a/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs +++ b/src/System.Management.Automation/FormatAndOutput/DefaultFormatters/PowerShellCore_format_ps1xml.cs @@ -1105,7 +1105,8 @@ namespace System.Management.Automation.Runspaces $message = '' $prefix = '' - if ($myinv -and $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1 -or $err.CategoryInfo.Category -eq 'ParserError') { + # Don't show line information if script module + if (($myinv -and $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1 -or $err.CategoryInfo.Category -eq 'ParserError') -and !($myinv.ScriptName.EndsWith('.psm1', [System.StringComparison]::OrdinalIgnoreCase))) { $useTargetObject = $false # Handle case where there is a TargetObject and we can show the error at the target rather than the script source diff --git a/test/powershell/engine/Formatting/ErrorView.Tests.ps1 b/test/powershell/engine/Formatting/ErrorView.Tests.ps1 index d77f9eb45..b94c4b5fa 100644 --- a/test/powershell/engine/Formatting/ErrorView.Tests.ps1 +++ b/test/powershell/engine/Formatting/ErrorView.Tests.ps1 @@ -21,6 +21,7 @@ Describe 'Tests for $ErrorView' -Tag CI { Context 'ConciseView tests' { BeforeEach { $testScriptPath = Join-Path -Path $TestDrive -ChildPath 'test.ps1' + $testModulePath = Join-Path -Path $TestDrive -ChildPath 'test.psm1' } AfterEach { @@ -136,6 +137,19 @@ Describe 'Tests for $ErrorView' -Tag CI { $e = & "$PSHOME/pwsh" -noprofile -file $testScriptPath 2>&1 | Out-String $e.Split("o${newline}t").Count | Should -Be 1 -Because "Error message should not contain newline" } + + It "Script module error should not show line information" { + $testModule = @' + function Invoke-Error() { + throw 'oops' + } +'@ + + Set-Content -Path $testModulePath -Value $testModule + $e = & "$PSHOME/pwsh" -noprofile -command "Import-Module '$testModulePath'; Invoke-Error" 2>&1 | Out-String + $e | Should -Not -BeNullOrEmpty + $e | Should -Not -BeLike "*Line*" + } } Context 'NormalView tests' {