.. _ComparePrimitivesByEqualRule:

============================
ComparePrimitivesByEqualRule
============================

Enforces the use of ``==`` and ``!=`` in comparisons to primitives rather than ``is`` and ``is not``.
The ``==`` operator checks equality (https://docs.python.org/3/reference/datamodel.html#object.__eq__),
while ``is`` checks identity (https://docs.python.org/3/reference/expressions.html#is).

-------
Message
-------
Don't use `is` or `is not` to compare primitives, as they compare references. Use == or != instead.

----------------
Has Autofix: Yes
----------------

-------------------
VALID Code Examples
-------------------

# 1:







.. code-block:: python

            a == 1




# 2:







.. code-block:: python

            a == '1'




# 3:







.. code-block:: python

            a != '1'




.. container:: toggle


    # 4:







    .. code-block:: python

                '3' == '1'





    # 5:







    .. code-block:: python

                3 == '1'





    # 6:







    .. code-block:: python

                3 > 2 > 1





    # 7:







    .. code-block:: python

                3 > 2 > '1'





    # 8:







    .. code-block:: python

                a is b > 1





    # 9:







    .. code-block:: python

                a is b is c





    # 10:







    .. code-block:: python

                1 > b is c





---------------------
INVALID Code Examples
---------------------

# 1:







.. code-block:: python

            a is 1




Autofix:

.. code-block:: python

    --- 
    +++ 
    @@ -1 +1 @@
    -a is 1
    +a == 1

# 2:







.. code-block:: python

            a is '1'




Autofix:

.. code-block:: python

    --- 
    +++ 
    @@ -1 +1 @@
    -a is '1'
    +a == '1'

# 3:







.. code-block:: python

            a is f'1{b}'




Autofix:

.. code-block:: python

    --- 
    +++ 
    @@ -1 +1 @@
    -a is f'1{b}'
    +a == f'1{b}'

.. container:: toggle


    # 4:







    .. code-block:: python

                a is not f'1{d}'




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -a is not f'1{d}'
        +a != f'1{d}'


    # 5:







    .. code-block:: python

                1 is a




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -1 is a
        +1 == a


    # 6:







    .. code-block:: python

                '2' > '1' is a




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -'2' > '1' is a
        +'2' > '1' == a


    # 7:







    .. code-block:: python

                3 > a is 2




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -3 > a is 2
        +3 > a == 2


    # 8:







    .. code-block:: python

                1  is   2




    Autofix:

    .. code-block:: python

        --- 
        +++ 
        @@ -1 +1 @@
        -1  is   2
        +1  ==   2

