PowerShell / PowerShell/PSScriptAnalyzer
PSUseOutputTypeCorrectly: Fails when using multiple output types
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C#
- Sterne
- 2.2k
- Forks
- 414
- Ø Merge
- 13 Std. 1 Min.
- Gemergte PRs (30 T.)
- 2
Beschreibung
Steps to reproduce
The following code snippet returns to objects with different types.
function Get-Function
{
[CmdletBinding()]
[OutputType(
[System.String],
[System.UInt32])]
param ()
return [System.String] 'hello', [System.UInt32] 1
}
$myString, $myInt = Get-Function
$myString.GetType()
$myInt.GetType()
But when running the analyzer on this it hits rule PSUseOutputTypeCorrectly .
Invoke-ScriptAnalyzer -ScriptDefinition @'
function Get-Function
{
[CmdletBinding()]
[OutputType(
[System.String],
[System.UInt32])]
param ()
return [System.String] 'hello', [System.UInt32] 1
}
'@
Expected behavior
No rule should be hit since the OutputType contains two output types which is valid syntax according to this https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_outputtypeattribute?view=powershell-5.1
Two or more output types could equal to System.Object[]. But preferably it should see if there are multiple output types, and then see how many return values there are.
Actual behavior
RuleName Severity ScriptName Line Message
-------- -------- ---------- ---- -------
PSUseOutputTypeCorrectly Information 9 The cmdlet 'Get-Function' returns an object of type '
System.Object[]' but this type is not declared in the
OutputType attribute.
Environment data
> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18890.1000
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18890.1000
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.18.1
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das Beispiel mit Invoke-ScriptAnalyzer zu reproduzieren, und verfolge, wie die Regel PSUseOutputTypeCorrectly mehrere OutputType-Werte und zurückgegebene Werte verarbeitet. Erledigt ist die Aufgabe, wenn die gültige Funktion keine Diagnose mehr erzeugt und überall dort, wo sich die Tests dieser Regel befinden, eine Regressionstestabdeckung hinzugefügt wurde.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- csharp, powershell
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100