PowerShell / PowerShell/PSScriptAnalyzer
PSUseOutputTypeCorrectly: Fails when using multiple output types
Personne n'a encore pris cette issue.
- Langage dominant
- C#
- Étoiles
- 2.2k
- Forks
- 414
- Merge moyen
- 13 h 1 min
- PR mergées (30 j)
- 2
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire l’exemple avec Invoke-ScriptAnalyzer et suivez la manière dont la règle PSUseOutputTypeCorrectly traite plusieurs valeurs de OutputType et les valeurs renvoyées. C’est terminé lorsque la fonction valide ne produit plus de diagnostic et qu’une couverture de régression a été ajoutée partout où se trouvent les tests de cette règle.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- csharp, powershell
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100