[v2] doc/contributing/doc: add info about including code

Message ID 20210506164059.694490-1-conor.walsh@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series [v2] doc/contributing/doc: add info about including code |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/github-robot success github build: passed
ci/Intel-compilation fail Compilation issues
ci/intel-Testing success Testing PASS

Commit Message

Conor Walsh May 6, 2021, 4:40 p.m. UTC
Currently the documentation describes how to add code snippets to the
docs using code blocks. This can be problematic as the code snippets
in the docs may fall out of sync with the actual code it is referencing
within DPDK. This patch adds instructions to the contribution guide
about how to include code in the docs using literalinclude which will
dynamically get the code from source when the docs are generated. This
will help to ensure that the code within the docs is up to date and not
out of sync with the actual code.
Note: literalinclude was used in the past and was removed from DPDK as
it created an issue with PDF generation but this is not done anymore:
git.dpdk.org/dpdk/commit/?id=d3ce1dc637c1bbef9a407f10281b2bc0549256da

Signed-off-by: Conor Walsh <conor.walsh@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
Acked-by: David Marchand <david.marchand@redhat.com>

---

v2: indentation changes and moved to scissor syntax
---
 doc/guides/contributing/documentation.rst | 56 +++++++++++++++++++++++
 1 file changed, 56 insertions(+)
  

Comments

Burakov, Anatoly May 7, 2021, 9:54 a.m. UTC | #1
On 06-May-21 5:40 PM, Conor Walsh wrote:
> Currently the documentation describes how to add code snippets to the
> docs using code blocks. This can be problematic as the code snippets
> in the docs may fall out of sync with the actual code it is referencing
> within DPDK. This patch adds instructions to the contribution guide
> about how to include code in the docs using literalinclude which will
> dynamically get the code from source when the docs are generated. This
> will help to ensure that the code within the docs is up to date and not
> out of sync with the actual code.
> Note: literalinclude was used in the past and was removed from DPDK as
> it created an issue with PDF generation but this is not done anymore:
> git.dpdk.org/dpdk/commit/?id=d3ce1dc637c1bbef9a407f10281b2bc0549256da
> 
> Signed-off-by: Conor Walsh <conor.walsh@intel.com>
> Acked-by: John McNamara <john.mcnamara@intel.com>
> Acked-by: David Marchand <david.marchand@redhat.com>
> 
> ---
> 
> v2: indentation changes and moved to scissor syntax
> ---
>   doc/guides/contributing/documentation.rst | 56 +++++++++++++++++++++++
>   1 file changed, 56 insertions(+)
> 
> diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
> index a4e6be6aca..7a0df1dc47 100644
> --- a/doc/guides/contributing/documentation.rst
> +++ b/doc/guides/contributing/documentation.rst
> @@ -433,6 +433,62 @@ Code and Literal block sections
>            return 0;
>         }
>   
> +* Code snippets can also be included directly from the code using the ``literalinclude`` block.
> +  Using this block instead of a code block will ensure that the code snippets shown in the
> +  documentation are always up to date with the code.
> +
> +  The following will include a snippet from the skeleton sample app::
> +
> +      .. literalinclude:: ../../../examples/skeleton/basicfwd.c
> +         :language: c
> +         :start-after: Display the port MAC address.
> +         :end-before: Enable RX in promiscuous mode for the Ethernet device.
> +         :dedent: 1
> +
> +  This would be rendered as:
> +
> +  .. literalinclude:: ../../../examples/skeleton/basicfwd.c
> +     :language: c
> +     :start-after: Display the port MAC address.
> +     :end-before: Enable RX in promiscuous mode for the Ethernet device.
> +     :dedent: 1
> +
> +  Specifying ``:language:`` will enable syntax highlighting for the specified language.
> +  ``:dedent:`` is used in this example to remove 1 leading tab from each line of the snippet.
> +
> +* ``start-after`` and ``end-before`` can use any text within a given file,
> +  however it may be difficult to find unique text within your code to mark the
> +  start and end of your snippets. In these cases, it is recommended to include

Such lenient attitude still leaves room for accidental changes (e.g. 
typo fixes, whitespace reformatting, language fixes etc.). I would've 
preferred the scissor syntax to be mandatory for all comment snippets 
for documentation. However, risk is pretty low so i can live with that :)

> +  explicit tags in your code to denote these locations for documentation purposes.
> +  The accepted format for these comments is:
> +
> +     * Before the code snippet create a new comment, which is a sentence explaining
> +       what the code snippet contains. The comment is terminated with a scissors ``8<``.
> +     * After the code snippet create another new comment, which starts with a
> +       scissors ``>8``, then ``End of`` and the first comment repeated.
> +     * The scissors should be orientated as shown to make it clear what code is being snipped.
> +
> +  This can be done as follows:
> +
> +  .. code-block:: c
> +
> +    /* Example feature being documented. 8< */
> +    foo(bar);
> +    /* >8 End of example feature being documented. */
> +
> +  ``foo(bar);`` could then be included in the docs using::
> +
> +      .. literalinclude:: ../../../examples/sample_app/main.c
> +         :language: c
> +         :start-after: Example feature being documented. 8<
> +         :end-before: >8 End of example feature being documented.
> +
> +  If a multiline comment is needed before the snippet then the last line of the
> +  multiline comment should be in the same format as the first comment shown
> +  in the example.
> +
> +* More information about the ``literalinclude`` block can be found within the
> +  `Sphinx Documentation <https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html?highlight=literalinclude#directive-literalinclude>`_.
>   
>   * The default encoding for a literal block using the simplified ``::``
>     directive is ``none``.
> 

Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
  
Thomas Monjalon May 7, 2021, 1:15 p.m. UTC | #2
07/05/2021 11:54, Burakov, Anatoly:
> On 06-May-21 5:40 PM, Conor Walsh wrote:
> > +* ``start-after`` and ``end-before`` can use any text within a given file,
> > +  however it may be difficult to find unique text within your code to mark the
> > +  start and end of your snippets. In these cases, it is recommended to include
> 
> Such lenient attitude still leaves room for accidental changes (e.g. 
> typo fixes, whitespace reformatting, language fixes etc.). I would've 
> preferred the scissor syntax to be mandatory for all comment snippets 
> for documentation. However, risk is pretty low so i can live with that :)

Compiling the documentation is part of any reasonnable test,
so the risk is very low.

> > +  explicit tags in your code to denote these locations for documentation purposes.
> > +  The accepted format for these comments is:
  
Thomas Monjalon May 19, 2021, 9:36 p.m. UTC | #3
06/05/2021 18:40, Conor Walsh:
> Currently the documentation describes how to add code snippets to the
> docs using code blocks. This can be problematic as the code snippets
> in the docs may fall out of sync with the actual code it is referencing
> within DPDK. This patch adds instructions to the contribution guide
> about how to include code in the docs using literalinclude which will
> dynamically get the code from source when the docs are generated. This
> will help to ensure that the code within the docs is up to date and not
> out of sync with the actual code.
> Note: literalinclude was used in the past and was removed from DPDK as
> it created an issue with PDF generation but this is not done anymore:
> git.dpdk.org/dpdk/commit/?id=d3ce1dc637c1bbef9a407f10281b2bc0549256da
> 
> Signed-off-by: Conor Walsh <conor.walsh@intel.com>
> Acked-by: John McNamara <john.mcnamara@intel.com>
> Acked-by: David Marchand <david.marchand@redhat.com>

Acked-by: Thomas Monjalon <thomas@monjalon.net>

Applied, thanks.
  

Patch

diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
index a4e6be6aca..7a0df1dc47 100644
--- a/doc/guides/contributing/documentation.rst
+++ b/doc/guides/contributing/documentation.rst
@@ -433,6 +433,62 @@  Code and Literal block sections
          return 0;
       }
 
+* Code snippets can also be included directly from the code using the ``literalinclude`` block.
+  Using this block instead of a code block will ensure that the code snippets shown in the
+  documentation are always up to date with the code.
+
+  The following will include a snippet from the skeleton sample app::
+
+      .. literalinclude:: ../../../examples/skeleton/basicfwd.c
+         :language: c
+         :start-after: Display the port MAC address.
+         :end-before: Enable RX in promiscuous mode for the Ethernet device.
+         :dedent: 1
+
+  This would be rendered as:
+
+  .. literalinclude:: ../../../examples/skeleton/basicfwd.c
+     :language: c
+     :start-after: Display the port MAC address.
+     :end-before: Enable RX in promiscuous mode for the Ethernet device.
+     :dedent: 1
+
+  Specifying ``:language:`` will enable syntax highlighting for the specified language.
+  ``:dedent:`` is used in this example to remove 1 leading tab from each line of the snippet.
+
+* ``start-after`` and ``end-before`` can use any text within a given file,
+  however it may be difficult to find unique text within your code to mark the
+  start and end of your snippets. In these cases, it is recommended to include
+  explicit tags in your code to denote these locations for documentation purposes.
+  The accepted format for these comments is:
+
+     * Before the code snippet create a new comment, which is a sentence explaining
+       what the code snippet contains. The comment is terminated with a scissors ``8<``.
+     * After the code snippet create another new comment, which starts with a
+       scissors ``>8``, then ``End of`` and the first comment repeated.
+     * The scissors should be orientated as shown to make it clear what code is being snipped.
+
+  This can be done as follows:
+
+  .. code-block:: c
+
+    /* Example feature being documented. 8< */
+    foo(bar);
+    /* >8 End of example feature being documented. */
+
+  ``foo(bar);`` could then be included in the docs using::
+
+      .. literalinclude:: ../../../examples/sample_app/main.c
+         :language: c
+         :start-after: Example feature being documented. 8<
+         :end-before: >8 End of example feature being documented.
+
+  If a multiline comment is needed before the snippet then the last line of the
+  multiline comment should be in the same format as the first comment shown
+  in the example.
+
+* More information about the ``literalinclude`` block can be found within the
+  `Sphinx Documentation <https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html?highlight=literalinclude#directive-literalinclude>`_.
 
 * The default encoding for a literal block using the simplified ``::``
   directive is ``none``.