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.
With the default threshold of 3:
func run() {
prepare("This should be a constant") // Noncompliant; 'foo' is duplicated 3 times
execute("This should be a constant")
release("This should be a constant")
}
const ACTION = "This should be a constant"
func run() {
prepare(ACTION)
execute(ACTION)
release(ACTION)
}
To prevent generating some false-positives, literals having less than 5 characters are excluded.