`SamplePSReadLineProfile.ps1` SmartInsertQuote Error On Strict Mode

Đang mở Phù hợp với người mới
#5,121 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.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
72/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
powershell
Lĩnh vực
cli

Hướng nghiên cứu

Bắt đầu với PSReadLine/SamplePSReadLineProfile.ps1 tại điều kiện SmartInsertQuote được liên kết và chạy profile mẫu dưới Set-StrictMode -Version Latest. Tái hiện lỗi bằng cách di chuyển đến cuối một dòng và nhập một dấu ngoặc kép, sau đó xác minh rằng guard xử lý vị trí đó, chèn hai dấu ngoặc kép và tránh ngoại lệ index-out-of-range.

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

Mô tả

Needs-Triage :mag:
Prerequisites
  • Write a descriptive title.
  • Make sure you are able to repro it on the latest released version
  • Search the existing issues, especially the pinned issues.
Exception report
Exception             : 
    Type       : System.IndexOutOfRangeException
    TargetSite : 
        Name          : ThrowIndexOutOfRangeException
        DeclaringType : [Internal.Runtime.CompilerHelpers.ThrowHelpers]
        MemberType    : Method
        Module        : System.Private.CoreLib.dll
    Message    : Index was outside the bounds of the array.
    Source     : System.Private.CoreLib
    HResult    : -2146233080
    StackTrace : 
   at CallSite.Target(Closure, CallSite, Object, Object)
   at System.Management.Automation.EnumerableOps.SlicingIndex(Object target, IEnumerator indexes, Func`3 indexer)
   at <ScriptBlock>(Closure, FunctionContext)
CategoryInfo          : OperationStopped: (:) [], IndexOutOfRangeException
FullyQualifiedErrorId : System.IndexOutOfRangeException
InvocationInfo        : 
    ScriptLineNumber : 393
    OffsetInLine     : 17
    HistoryId        : 111
    ScriptName       : C:\Users\matt\OneDrive\Documents\PowerShell\profile.ps1
    Line             : if ($line[0..$cursor].Where{$_ -eq $quote}.Count % 2 -eq 1) {
                       
    Statement        : $line[0..$cursor].Where{$_ -eq $quote}.Count % 2 -eq 1
    PositionMessage  : At C:\Users\matt\OneDrive\Documents\PowerShell\profile.ps1:393 char:17
                       + …         if ($line[0..$cursor].Where{$_ -eq $quote}.Count % 2 -eq 1) { …
                       +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    PSScriptRoot     : C:\Users\matt\OneDrive\Documents\PowerShell
    PSCommandPath    : C:\Users\matt\OneDrive\Documents\PowerShell\profile.ps1
    CommandOrigin    : Internal
ScriptStackTrace      : at <ScriptBlock>, C:\Users\matt\.local\share\chezmoi\outchezmoiscripts\Sync-ScoopConfig.ps1: line 64
                        at <ScriptBlock>, <No file>: line 1
Screenshot

N/A

Environment data
PS Version: 7.6.0
PS HostName: Visual Studio Code Host
PSReadLine Version: 2.4.4-beta4
PSReadLine EditMode: Vi
OS: 10.0.22621.1 (WinBuild.160101.0800)
BufferWidth: 190
BufferHeight: 19
Steps to reproduce

Run the sample profile with Set-StrictMode -Version Latest . Then go to end of line. Then enter a quote.

Expected behavior

Two quotes should be entered

Actual behavior

Error happens.

Workaround

I edited the below line
https://github.com/PowerShell/PSReadLine/blob/caa53f8469e35f6ba6e1a434d4fc8efae2dde20c/PSReadLine/SamplePSReadLineProfile.ps1#L195
to add $cursor -lt $line.Length -and to beginning of the if block to short circuit and prevent the index out of range. I wasn't sure if $cursor - 1 inside the indexer would be appropriate as I don't completely understand all the code.

Ngôn ngữ chính
C#
Star
4.4k
Fork
341
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

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.

Issue khác của PowerShell/PSReadLine

Tất cả issue của PowerShell/PSReadLine

Issue tương tự

Thêm issue về C#

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.