Create rule S6899 (#3589)

This commit is contained in:
github-actions[bot] 2024-04-12 16:03:12 +02:00 committed by GitHub
parent 473c6826ad
commit ac24b76b0f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,2 @@
{
}

View File

@ -0,0 +1,23 @@
{
"title": "datetime.datetime objects should not be compared with datetime.date objects",
"type": "BUG",
"status": "ready",
"remediation": {
"func": "Constant\/Issue",
"constantCost": "5min"
},
"tags": [
],
"defaultSeverity": "Major",
"ruleSpecification": "RSPEC-6899",
"sqKey": "S6899",
"scope": "All",
"defaultQualityProfiles": ["Sonar way"],
"quickfix": "unknown",
"code": {
"impacts": {
"RELIABILITY": "HIGH"
},
"attribute": "LOGICAL"
}
}

View File

@ -0,0 +1,53 @@
This rule raises an issue when trying to perform comparison or arithmetic operations between `datetime.date` and `datetime.datetime` objects.
== Why is this an issue?
Despite the fact that the `datetime.datetime` is inherited from the `datetime.date` they are not compatible from comparison and arithmetical operations perspective.
Trying to compare a `datetime.datetime` with a `datetime.date` objects leads to a `TypeError`.
== How to fix it
Make sure that comparison or arithmetic operations are performed between compatible types e.g. convert `datetime.datetime` to `datetime.date` or vice versa.
=== Code examples
==== Noncompliant code example
[source,python,diff-id=1,diff-type=noncompliant]
----
from datetime import datetime, date
dt = datetime.now()
d = date.today()
if dt < d: # Noncompliant: TypeError: can't compare datetime.datetime to datetime.date
...
----
==== Compliant solution
[source,python,diff-id=1,diff-type=compliant]
----
from datetime import datetime, date
dt = datetime.now()
d = date.today()
if dt.date() < d: # OK
...
----
//=== How does this work?
//=== Pitfalls
//=== Going the extra mile
== Resources
=== Documentation
* Python documentation - https://docs.python.org/3/library/datetime.html#datetime-objects[Datetime Objects]
* Python documentation - https://docs.python.org/3/library/datetime.html#date-objects[Date Objects]
//=== Articles & blog posts
//=== Conference presentations
//=== Standards
//=== External coding guidelines
//=== Benchmarks