.. include:: includes.rst

Procedure Call Rules
--------------------

These rules handle **procedure_call_statement** and **concurrent_procedure_call_statement** productions.

.. _procedure_call_structural_rules:

procedure_call_001
##################

|phase_1| |error| |structure|

This rule checks for labels on procedure call statements.
Labels on procedure calls are optional and do not provide additional information.

**Violation**

.. code-block:: vhdl

   WR_EN_OUTPUT : WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   WR_EN(parameter);

procedure_call_002
##################

|phase_1| |error| |structure|

This rule checks for labels on concurrent procedure call statements.
Labels on procedure calls are optional and do not provide additional information.

**Violation**

.. code-block:: vhdl

   WR_EN_OUTPUT : WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   WR_EN(parameter);

procedure_call_003
##################

|phase_1| |error| |structure|

This rule checks the structure of procedure calls.

|configuring_multiline_procedure_call_statement_rules_link|

**Violation**

.. code-block:: vhdl

   connect_ports(port_1 => data, port_2 => enable, port_3 => overflow, port_4 => underflow);

**Fix**

.. code-block:: vhdl

   connect_ports(
     port_1 => data,
     port_2 => enable,
     port_3 => overflow,
     port_4 => underflow
   );

.. _procedure_call_whitespacing_rules:

procedure_call_100
##################

|phase_2| |error| |whitespace|

This rule checks for a single space between the following block elements:  label, label colon, **postponed** keyword and the *procedure* name.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   procedure_label   :    postponed   WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   procedure_label : postponed WR_EN(parameter);

procedure_call_101
##################

|phase_2| |error| |whitespace|

This rule checks for a single space after the **=>** operator in procedure calls.

|configuring_whitespace_rules_link|

**Violation**

.. code-block:: vhdl

   connect_ports(
     port_1 =>    data,
     port_2 =>enable,
     port_3 =>  overflow,
     port_4 => underflow
   );

**Fix**

.. code-block:: vhdl

   connect_ports(
     port_1 => data,
     port_2 => enable,
     port_3 => overflow,
     port_4 => underflow
   );

procedure_call_300
##################

|phase_4| |error| |indent|

This rule checks the indent of the procedure_call label.

**Violation**

.. code-block:: vhdl

   a <= b;

     procedure_label : WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   a <= b;

   procedure_label : WR_EN(parameter);

procedure_call_301
##################

|phase_4| |error| |indent|

This rule checks the indent of the **postponed** keyword if it exists..

**Violation**

.. code-block:: vhdl

   a <= b;

     postponed WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   a <= b;

   postponed WR_EN(parameter);

procedure_call_302
##################

|phase_4| |error| |indent|

This rule checks the indent of the *procedure* name.

**Violation**

.. code-block:: vhdl

   a <= b;

     WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   a <= b;

   WR_EN(parameter);

procedure_call_400
##################

|phase_5| |error| |alignment|

This rule checks the alignment of multiline procedure calls.

|configuring_multiline_indent_rules_link|

**Violation**

.. code-block:: vhdl

   connect_ports(port_1, port_2, port_3,
         port_4, port_5,
                      port_6, port_7);

**Fix**

.. code-block:: vhdl

   connect_ports(port_1, port_2, port_3,
                 port_4, port_5,
                 port_6, port_7);

procedure_call_401
##################

|phase_5| |error| |alignment|

This rule checks the alignment of :code:`=>` keywords in procedure calls.

|configuring_keyword_alignment_rules_link|

**Violation**

.. code-block:: vhdl

   connect_ports(
     port_1=> data,
     port_2 => enable,
     port_3    => overflow,
     port_4  => underflow
   );

**Fix**

.. code-block:: vhdl

   connect_ports(
     port_1 => data,
     port_2 => enable,
     port_3 => overflow,
     port_4 => underflow
   );

procedure_call_500
##################

|phase_6| |error| |case| |case_label|

This rule checks the label has proper case.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   PROCEDURE_CALL_LABEL : WR_EN(parameter);

**Fix**

.. code-block:: vhdl

   procedure_call_label : WR_EN(parameter);

procedure_call_501
##################

|phase_6| |error| |case| |case_keyword|

This rule checks the **postponed** keyword has proper case.

|configuring_uppercase_and_lowercase_rules_link|

**Violation**

.. code-block:: vhdl

   POSTPONED WR_EN(parameter)

**Fix**

.. code-block:: vhdl

   postponed WR_EN(parameter)
