rspec/rules/S2477/plsql/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

87 lines
1.3 KiB
Plaintext

== Why is this an issue?
Labeled loops are useful, especially when the code is badly indented, to match the begin and end of each loop. When loops are nested, labeling them can improve the code's readability. This rule detects nested loops which do not have a start label.
=== Noncompliant code example
[source,sql]
----
BEGIN
LOOP
LOOP -- Noncompliant, this nested loop is not labeled
EXIT;
END LOOP;
EXIT;
END LOOP;
FOR i IN 1..10 LOOP
WHILE true LOOP -- Noncompliant, this nested loop has no start label
EXIT;
END LOOP nestedLoopLabel1;
EXIT;
END LOOP;
WHILE true LOOP
<<nestedLoopLabel2>>
LOOP -- Compliant, but better with an end label
EXIT;
END LOOP;
EXIT;
END LOOP;
END;
/
----
=== Compliant solution
[source,sql]
----
BEGIN
LOOP
<<nestedLoopLabel0>>
LOOP
EXIT;
END LOOP nestedLoopLabel0;
EXIT;
END LOOP;
FOR i IN 1..10 LOOP
<<nestedLoopLabel1>>
WHILE true LOOP
EXIT;
END LOOP nestedLoopLabel1;
EXIT;
END LOOP;
WHILE true LOOP
<<nestedLoopLabel2>>
LOOP
EXIT;
END LOOP nestedLoopLabel2;
EXIT;
END LOOP;
END;
/
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Add labels to this loop.
endif::env-github,rspecator-view[]