`SamplePSReadLineProfile.ps1` SmartInsertQuote Error On Strict Mode

Offen Anfängerfreundlich
#5,121 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
72/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
powershell
Bereich
cli

Rechercherichtung

Beginnen Sie mit PSReadLine/SamplePSReadLineProfile.ps1 an der verlinkten SmartInsertQuote-Bedingung und führen Sie das Beispielprofil unter Set-StrictMode -Version Latest aus. Reproduzieren Sie den Fehler, indem Sie an das Ende einer Zeile gehen und ein Anführungszeichen eingeben, und überprüfen Sie anschließend, dass die Absicherung diese Position behandelt, zwei Anführungszeichen einfügt und die Index-out-of-range-Ausnahme vermeidet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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.

Vorherrschende Sprache
C#
Sterne
4.4k
Forks
341
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus PowerShell/PSReadLine

Alle Issues in PowerShell/PSReadLine

Ähnliche Issues

Weitere Issues zu C#

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.