PSScriptAnalyzerSettings.psd1

@{
    # La puerta del repositorio es cero hallazgos en Error y Warning. Las reglas
    # de severidad Information se ejecutan tambien, para verlas, pero no bloquean.
    Severity = @('Error', 'Warning', 'Information')

    IncludeDefaultRules = $true

    ExcludeRules = @(
        # El modulo declara Windows PowerShell 5.1 y PowerShell 7+, no las
        # ediciones reducidas de Nano Server ni Windows IoT, donde faltan cmdlets
        # como Get-CimInstance, Clear-RecycleBin o Get-MpComputerStatus. Con la
        # regla activa practicamente cada linea del motor sale marcada, lo que
        # ahoga los hallazgos reales. La compatibilidad de SINTAXIS si se
        # comprueba, con PSUseCompatibleSyntax, que es la que importa para 5.1.
        'PSUseCompatibleCmdlets'
    )

    Rules = @{
        PSUseCompatibleSyntax = @{
            # Esta es la red de seguridad de la promesa "5.1 y 7+": detecta
            # ternarios, ?? y el resto de sintaxis que solo existe en 7.x.
            Enable         = $true
            TargetVersions = @('5.1', '7.0')
        }

        # Las llaves de apertura y cierre si se exigen: una llave fuera de sitio
        # cambia el alcance de un bloque y eso no es cosmetico.
        PSPlaceOpenBrace = @{
            Enable             = $true
            OnSameLine         = $true
            NewLineAfter       = $true
            IgnoreOneLineBlock = $true
        }

        PSPlaceCloseBrace = @{
            Enable             = $true
            NewLineAfter       = $false
            IgnoreOneLineBlock = $true
            NoEmptyLineBefore  = $false
        }
    }

    # Deliberadamente NO se activan PSUseConsistentIndentation,
    # PSUseConsistentWhitespace ni PSAlignAssignmentStatement. No forman parte del
    # conjunto por defecto, y al aplicarlas con Invoke-Formatter el resultado era
    # menos legible que el original: desalinea los brazos de un switch y mete
    # sangria extra en los argumentos de un -f partido en varias lineas.
}