PowerShell / PowerShell/PSScriptAnalyzer

Variables, defined with "-Option AllScope", in Nested Function reports "assigned but never used".

Offen
#1,669 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Area - PSUseDeclaredVarsMoreThanAssignments Issue - Enhancement Up-for-Grabs
Vorherrschende Sprache
C#
Sterne
2.2k
Forks
414
Ø Merge
13 Std. 1 Min.
Gemergte PRs (30 T.)
2

Beschreibung

Issue Description

I'm learning PowerShell, and also new to Visual Studio Code, and ran into a situation where it would be useful to create nested functions that access the parent function's variables. To my pleasant surprise PowerShell can do this and I created the below code to try it out. But Visual Studio Code continues to complain "The variable 'Data' is assigned but never used." and "The variable 'Return' is assigned but never used." But PowerShell itself seems to be quite happy with the code and produces the results I expected.

It appears that Visual Studio code is not recognizing the work that "Set-Variable", with the "AllScope" option, does in making these variables accessible throughout the GetMatchingIndex method (I wouldn't be surprised if "AllScope" makes it accessible outside the class - coming from a C# background, PowerShell does some really weird things).

If VSCode is working correctly, and there really are 2 bugs in my code, then I guess I need someone to explain how to fix the code.

class FERMI {   # ForEachReturnMatchingIndex
    [string[]]$CharSets
    FERMI() {
        $this.CharSets = 'ab', 'cd', 'ef', 'gh'
    }
    [int] GetMatchingIndex([string]$StringToFind) {
        Write-Host
        Set-Variable -Name ItemIndex, UpperOuterBounds, Data, Return -Option AllScope
        [int]$Return = [int]$ItemIndex = -1
        $UpperOuterBounds = $this.CharSets.Length
        function AbleToGetAnotherItem {
            [OutputType([bool])]
            param ()
            if ($atgaiReturn = ++$ItemIndex -lt $UpperOuterBounds) { $Data = $this.CharSets[$ItemIndex]}
            return $atgaiReturn
        }
        function ProcessData {
            Write-Host "Data: $Data, Index: $ItemIndex"
            if($Data -eq $StringToFind){
                $Return = $ItemIndex
            }
        }
        While (AbleToGetAnotherItem) {
            ProcessData
        }
        return $Return
    }
}

[FERMI] $MyFERMI = [FERMI]::New()
Write-Host "ef: $($MyFERMI.GetMatchingIndex('ef'))"
Write-Host "cd: $($MyFERMI.GetMatchingIndex('cd'))"
Write-Host "ij: $($MyFERMI.GetMatchingIndex('ij'))"
Write-Host "gh: $($MyFERMI.GetMatchingIndex('gh'))"
Write-Host "ab: $($MyFERMI.GetMatchingIndex('ab'))"

Environment Information

Visual Studio Code

Name Version
Operating System Windows_NT x64 10.0.19042
VSCode 1.55.2
PowerShell Extension Version 2021.2.2

PowerShell Information

Name Value
PSVersion 7.1.3
PSEdition Core
GitCommitId 7.1.3
OS Microsoft Windows 10.0.19042
Platform Win32NT
PSCompatibleVersions 1.0 2.0 3.0 4.0 5.0 5.1.10032.0 6.0.0 6.1.0 6.2.0 7.0.0 7.1.3
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0

Visual Studio Code Extensions

Visual Studio Code Extensions(Click to Expand)
Extension Author Version
powershell ms-vscode 2021.2.2

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die bereitgestellte FERMI-PowerShell-Reproduktion mit den gemeldeten PowerShell- und VS Code-Erweiterungsversionen auszuführen, und untersuche anschließend, wie der Analyzer Variablen verfolgt, die mit Set-Variable -Option AllScope innerhalb verschachtelter Funktionen erstellt wurden. Als erledigt gilt die Aufgabe, wenn die Diagnosen die Verwendungen der Variablen korrekt berücksichtigen oder der Issue klar dokumentiert, warum die Warnungen gültig sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
powershell, vscode
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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