PowerShell / PowerShell/PSScriptAnalyzer

PSUseOutputTypeCorrectly: Fails when using multiple output types

オープン
#1,289 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Area - Rules Issue - Bug
主要言語
C#
スター
2.2k
フォーク
414
平均マージ
13時間 1分
マージ済み PR(30日)
2

説明

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

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず Invoke-ScriptAnalyzer を使用して例を再現し、PSUseOutputTypeCorrectly ルールが複数の OutputType 値と返される値をどのように処理するかを追跡します。完了の条件は、有効な関数が診断を生成しなくなり、このルールのテストが存在するすべての場所に回帰テストのカバレッジが追加されていることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
csharp, powershell
領域
tooling
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。