rspec/rules/S5032/cobol/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
Inline adoc files when they are included exactly once.

Also fix language tags because this inlining gives us better information
on what language the code is written in.
2023-05-25 14:18:12 +02:00

82 lines
1.6 KiB
Plaintext

== Why is this an issue?
Using recursion with paragraphs is not a problem in itself but it potentially exposes the software to endless loop. This is the case when there is no condition to end the recursion or when this condition is always false.
This rule raises an issue when a paragraph contains a ``++PERFORM++`` to itself to warn the developer that there is a risk of endless loop. This rule can also be used to fully prevent recursion to be used.
=== Noncompliant code example
[source,cobol]
----
PROCEDURE DIVISION.
...
PERFORM READ-RELATED-REC-PARA
...
READ-RELATED-REC-PARA.
...
CALL MY-MODULE
IF MORE-RECS
PERFORM READ-RELATED-REC-PARA
...
----
[source,cobol]
----
999-ERROR.
"Write to a log file"
If "write fails:
"Display an error message"
PERFORM 999-ERROR.
----
=== Compliant solution
[source,cobol]
----
PROCEDURE DIVISION.
...
PERFORM READ-RELATED-REC-PARA
UNTIL NO-MORE-RELATED-RECS
OR MAX-NO-OF-RELATED-RECS
...
READ-RELATED-REC-PARA.
...
CALL MY-MODULE
IF MORE-RECS
SET MORE-RELATED-RECS TO TRUE
ADD 1 TO NO-OF-RELATED-RECS
ELSE
SET NO-MORE-RELATED-RECS TO TRUE
END-IF
...
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Refactor this code to remove the "PERFORM XXX" to remove the risk of a potential infinite loop.
=== Highlighting
PERFORM XXX
'''
== Comments And Links
(visible only on this page)
=== on 14 Nov 2018, 18:26:58 Ann Campbell wrote:
\[~alexandre.gigleux] this seems to overlap RSPEC-925
endif::env-github,rspecator-view[]