Skip to main content

Sonar: Replace `is` with `==` for literal or new object comparisons

sonar:python/literal-or-new-object-identity-S5796

ImportanceReview GuidanceRequires Scanning Tool
LowMerge Without ReviewYes (Sonar)

This codemod acts upon the following Sonar rules: 'python:S5796'.

The is and is not operators only evaluate to True when the expressions on each side have the same id. In other words, a is b is equivalent to id(a) == id(b). With few exceptions, objects and literals have unique identities and thus shouldn't generally be compared by using the is or is not operators.

Our changes look something like this:

def foo(l):
- return l is [1,2,3]
+ return l == [1,2,3]

If you have feedback on this codemod, please let us know!

F.A.Q.

Why is this codemod marked as Merge Without Review?

Since literals and new objects have their own identities, comparisons against them using is operators are most likely a bug and thus we deem the change safe.

Codemod Settings

N/A

References