Open
Description
Before submitting a bug report:
- Make sure you are able to repro it on the latest released version
- Perform a quick search for existing issues to check if this bug has already been reported
Steps to reproduce
function Split-KeyValuePairFormatter {
[OutputType('System.String[]')]
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[string]
$Format,
[string]
$KeyConstituent,
[string]
$ValueConstituent,
[string]
$KeyPlaceHolder = "<%KEY%>",
[string]
$ValuePlaceHolder = "<%VALUE%>"
)
[string[]]$constituents = @();
# IMPLEMENTATION CODE OMITTED, but you can see that the return statement
# just returns the array declared as string[]
return $constituents;
}
Expected behavior
No warning expected
Actual behavior
Error:
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
PSUseOutputTypeCorrectly Information split-key- 152 The cmdlet 'Split-KeyValuePairFormatter' returns an
value-pair object of type 'System.String' but this type is not
-formatter declared in the OutputType attribute.
.ps1
If I change OutputType to: [OutputType('System.String')], which is clearly wrong as it doesn't reflect the behaviour of the actual code, then there is no error. This does not seem right. As a work around, I'm having to declare an incorrect return type, ie System.string in [OutputType()], and put in a comment to indicate as such. Luckily, there is no effect on the functinality, but I can't omit the OutputType without PSScriptAnalyzer reporting a warning.
Environment data
> $PSVersionTable
Name Value
---- -----
PSVersion 7.0.0
PSEdition Core
GitCommitId 7.0.0
OS Microsoft Windows 10.0.18362
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.19.0
1.18.3