BSL035 — Duplicate string literal¶
Summary¶
Duplicate string literal
Identifiers¶
| Field | Value |
|---|---|
| Rule code | BSL035 |
| Compatible alias | DuplicateStringLiteral |
| Severity | INFORMATION |
| Enabled by default | Yes |
| Implemented | Yes |
| Tags | convention, readability |
Behavior¶
- The public identifier
BSL035and aliasDuplicateStringLiteralare stable. - The rule reports the cases documented on this page.
- Suppressions and project configuration are applied before publication.
- The rule requires neither an external analyzer nor network access.
Configuration and suppression¶
BSL### is the primary stable identifier. The compatible alias is accepted
in select, ignore, and compatible block suppression comments.
All three suppression families support both a current line and a range. When an opening comment follows code, it affects only that line. Use any one form:
noqa:
bsl-disable:
- compatible
BSLLSform:
When the same opening comment is on a line by itself, it starts a range. Close it with the matching marker from the same family:
// noqa: BSL035
// code without this diagnostic
// noqa-enable: BSL035
// bsl-disable: BSL035
// code without this diagnostic
// bsl-enable: BSL035
// BSLLS:DuplicateStringLiteral-off
// code without this diagnostic
// BSLLS:DuplicateStringLiteral-on
To disable the rule until the end of the file, omit the closing
noqa-enable, bsl-enable, or BSLLS:…-on marker.
Opening and closing markers must belong to the same family.
Description¶
It is bad form to use the same string literals multiple times in the same module or method: - it can lead to problems with further maintenance, if necessary, change the value - there is a high probability of missing one of the repetitions - it can be a consequence of "copy-paste" - the developer may have forgotten to change the code after copying a similar block of code.
Features of the implementation of diagnostic¶
- Diagnostics with default settings does not respect the case of literal characters - the strings
AAAAandAaaAare considered the same. - You cannot specify a minimum parsed literal value less than the default. Short service literals are often used, which will generate unnecessary comments. For example: empty string "", selector numbers "1", "0", etc.
- You cannot reduce the allowed number of repetitions to less than 1, because it makes no practical sense.
Examples¶
Bad code
Procedure Test(Param)
Result = "Value";
If Param = "One" Then
Result = Result + One("Value");
Else
Result = Result + Two("Value");
EndIf;
EndProcedure
Сorrected:
Procedure Test(Param)
Result = "Value";
If Param = "One" Then
Result = Result + One(Result);
Else
Result = Result + Two(Result);
EndIf;
EndProcedure
Bad code
Procedure Test2(Param)
Result = "Value";
If Param = "One" Then
Result = Result + One("Value");
Else
Result = Result + Two("Value");
EndIf;
EndProcedure
Procedure Test3(Param)
If Param = "Five" Then
Result = Result + Five("Value");
EndIf;
EndProcedure
Сorrected
Procedure Test2(Param)
Result = "Value";
If Param = "One" Then
Result = Result + One(StringValue());
Else
Result = Result + Two(StringValue());
EndIf;
EndProcedure
Procedure Test3(Param)
If Param = "Five" Then
Result = Result + Five(StringValue());
EndIf;
EndProcedure
Function StringValue()
Return "Value";
EndFunction