PowerShell / PowerShell/PSScriptAnalyzer
PSUseOutputTypeCorrectly: Fails when using multiple output types
Chưa có ai nhận issue này.
- 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
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- 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