Create rule S6899 (#3589)
This commit is contained in:
parent
473c6826ad
commit
ac24b76b0f
2
rules/S6899/metadata.json
Normal file
2
rules/S6899/metadata.json
Normal file
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
23
rules/S6899/python/metadata.json
Normal file
23
rules/S6899/python/metadata.json
Normal 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"
|
||||
}
|
||||
}
|
53
rules/S6899/python/rule.adoc
Normal file
53
rules/S6899/python/rule.adoc
Normal 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
|
Loading…
x
Reference in New Issue
Block a user