Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.
On the other hand, constants can be referenced from many places, but only need to be updated in a single place.
Noncompliant Code Example
With the default threshold of 3:
def run():
prepare("this is a duplicate") # Noncompliant - "this is a duplicate" is duplicated 3 times
execute("this is a duplicate")
release("this is a duplicate")
Compliant Solution
ACTION_1 = "action1"
def run():
prepare(ACTION_1)
execute(ACTION_1)
release(ACTION_1)
Exceptions
No issue will be raised on:
- duplicated string in decorators
- strings with less than 5 characters
- strings with only letters, numbers and underscores
@app.route("/api/users/", methods=['GET', 'POST', 'PUT'])
def users():
pass
@app.route("/api/projects/", methods=['GET', 'POST', 'PUT']) # Compliant
def projects():
pass