PowerShell / PowerShell/PSScriptAnalyzer

PSUseOutputTypeCorrectly: Fails when using multiple output types

Đang mở
#1,289 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Area - Rules Issue - Bug
Ngôn ngữ chính
C#
Star
2.2k
Fork
414
Merge trung bình
13 giờ 1 phút
Pull request đã merge (30 ngày)
2

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu bằng cách tái hiện ví dụ với Invoke-ScriptAnalyzer và theo dõi cách quy tắc PSUseOutputTypeCorrectly xử lý nhiều giá trị OutputType và các giá trị được trả về. Công việc được xem là hoàn tất khi hàm hợp lệ không còn tạo ra chẩn đoán và phạm vi kiểm thử hồi quy đã được bổ sung ở mọi nơi chứa các bài kiểm thử của quy tắc này.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
csharp, powershell
Lĩnh vực
tooling
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
42/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.