== Why is this an issue?

The use of ``++options( *nopass )++`` on a parameter makes it optional, so it should always be checked before use.


=== Noncompliant code example

[source,rpg]
----
       DCL-PR VIOLATION1 EXTPGM;
         LASTNAME Char(10);
         FIRSTNAME Char(10) OPTIONS(*NOPASS:*OMIT);
       END-PR;

       DCL-PI VIOLATION1;
         LASTNAME Char(10);
         FIRSTNAME Char(10) OPTIONS(*NOPASS:*OMIT);
       END-PI;

       dsply FIRSTNAME;
       dsply LASTNAME;  // Noncompliant; LASTNAME is optional
       *inlr = *on;
----


=== Compliant solution

[source,rpg]
----
       DCL-PR VIOLATION1 EXTPGM;
         LASTNAME Char(10);
         FIRSTNAME Char(10) OPTIONS(*NOPASS:*OMIT);
       END-PR;

       DCL-PI VIOLATION1;
         LASTNAME Char(10);
         FIRSTNAME Char(10) OPTIONS(*NOPASS:*OMIT);
       END-PI;

       dsply FIRSTNAME;
       IF %PARMS > 1;
         dsply LASTNAME;
       EndIf;
       *inlr = *on;
----


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Make sure this optional parameter was actually passed before you use it.


=== Highlighting

Parameter name


'''
== Comments And Links
(visible only on this page)

=== on 28 Oct 2015, 20:10:15 Ann Campbell wrote:
Source: user suggestion with background from \http://www.itjungle.com/fhg/fhg010505-story02.html

=== on 29 Oct 2015, 13:47:46 Pierre-Yves Nicolas wrote:
\[~ann.campbell.2] This rule looks more like a bug detection rule than something about api-design or readability.

=== on 29 Oct 2015, 14:02:11 Ann Campbell wrote:
You're right [~pierre-yves.nicolas]. Adjusted.

=== on 29 Oct 2015, 14:07:55 Pierre-Yves Nicolas wrote:
\[~ann.campbell.2] Should we also update the SQALE characteristic?

=== on 29 Oct 2015, 14:20:29 Ann Campbell wrote:
Thanks [~pierre-yves.nicolas]. That's done too now.

endif::env-github,rspecator-view[]
