rspec/rules/S1117/plsql/rule.adoc
Marco Borgeaud 98517de0ff
Modify rule S1117: Migrate To LayC - shadow variables (#3270)
The languages for this rule fall into two categories:

* CFamily, JS, and PLSQL: "Variables should not be shadowed" (general
case of shadowing)
* C#, Flex, Java, PHP, Swift: "Local variables should not shadow
field/property/enum case/..." (narrow case of shadowing)

For CFamily, these tickets are also handled: CPP-2785 CPP-3589
2023-10-16 12:04:08 +02:00

45 lines
858 B
Plaintext

include::../why-general.adoc[]
=== Noncompliant code example
The example below shows the typical situation in which shadowing can occur.
[source,sql,diff-id=1,diff-type=noncompliant]
----
SET SERVEROUTPUT ON
DECLARE
foo VARCHAR2(42) := 'foo';
BEGIN
DECLARE
foo VARCHAR2(42) := 'bar'; -- Noncompliant - this variable hides the one above and should be renamed
BEGIN
DBMS_OUTPUT.PUT_LINE(foo); -- Displays "bar", which is confusing
END;
DBMS_OUTPUT.PUT_LINE(foo); -- Displays "foo"
END;
/
----
=== Compliant solution
[source,sql,diff-id=1,diff-type=compliant]
----
SET SERVEROUTPUT ON
DECLARE
foo VARCHAR2(42) := 'foo';
BEGIN
DECLARE
bar VARCHAR2(42) := 'bar'; -- Compliant
BEGIN
DBMS_OUTPUT.PUT_LINE(bar); -- Displays "bar"
END;
DBMS_OUTPUT.PUT_LINE(foo); -- Displays "foo"
END;
/
----
include::../rspecator.adoc[]