
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
45 lines
858 B
Plaintext
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[] |