Transpilers/Syntax/EqualityComparison.psx.ps1

<#
.SYNOPSIS
    Allows equality comparison.
.DESCRIPTION
    Allows most equality comparison using double equals (==).

    Many languages support this syntax. PowerShell does not.

    This transpiler enables equality comparison with ==.
.NOTES
    This will not work if there is a constant on both sides of the expression

    
    if ($null == $null) { "this will work"}
    if ('' == '') { "this will not"}
    
.EXAMPLE
    Invoke-PipeScript -ScriptBlock {
        $a = 1
        if ($a == 1 ) {
            "A is $a"
        }
    }
.EXAMPLE
    {
        $a == "b"
    } | .>PipeScript
#>

[ValidateScript({
    # This is valid if the assignment statement's
    $AssignmentStatementAST = $_
    # right side is followed by an = and at least one space.
    $AssignmentStatementAST.Right -match '^=\s{1,}'
})]
param(
# The original assignment statement.
[Parameter(Mandatory,ValueFromPipeline)]
[Management.Automation.Language.AssignmentStatementAst]
$AssignmentStatementAST
)

process {
    # This is a very trivial transpiler.
    
    # We create a new script by:
    $newScript =
        # taking the left side as-is.
        $AssignmentStatementAST.Left.Extent.ToString() + 
        # replacing the = with ' -eq '
        ' -eq ' +
        # And replacing any the = and any trailing whitespace.
        ($AssignmentStatementAST.Right.Extent.ToString() -replace '^=\s{1,}')
    
    [scriptblock]::Create($newScript)
}