[PATCH 3/4] style: fix includes

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
* src/fixits.c: Follow our usual pattern.
* src/scan-code.l, src/scan-gram.l, src/scan-skel.l: Prefer "" to
include src/ headers.
* README-hacking.md: Document the pattern.
---
 README-hacking.md    | 24 ++++++++++++++++++++++++
 src/AnnotationList.h |  1 +
 src/fixits.c         | 20 ++++++++++----------
 src/print-xml.h      |  2 --
 src/scan-code.l      | 14 +++++++-------
 src/scan-gram.l      | 16 ++++++++--------
 src/scan-skel.l      | 10 +++++-----
 7 files changed, 55 insertions(+), 32 deletions(-)

diff --git a/README-hacking.md b/README-hacking.md
index af14dbf0..d596c7e3 100644
--- a/README-hacking.md
+++ b/README-hacking.md
@@ -62,6 +62,30 @@ Don't reinvent the wheel: we use gnulib, which features many components.
 Actually, Bison has legacy code that we should replace with gnulib modules
 (e.g., many ad hoc implementations of lists).
 
+#### Includes
+The `#include` directives follow an order:
+- first section for *.c files is `<config.h>`.  Don't include it in header
+  files
+- then, for *.c files, the corresponding *.h file
+- then possibly the `"system.h"` header
+- then the system headers.
+  Consider headers from `lib/` like system headers (i.e., `#include
+  <verify.h>`, not `#include "verify.h"`).
+- then headers from src/ with double quotes (`#include "getargs.h"`).
+
+Keep headers sort alphabetically in each section.
+
+See also the [Header
+files](https://www.gnu.org/software/gnulib/manual/html_node/Header-files.html)
+and the [Implementation
+files](https://www.gnu.org/software/gnulib/manual/html_node/Implementation-files.html#Implementation-files)
+nodes of the gnulib documentation.
+
+Some source files are in the build tree (e.g., `src/scan-gram.c` made from
+`src/scan-gram.l`).  For them to find the headers from `src/`, we actually
+use `#include "src/getargs.h"` instead of `#include "getargs.h"`---that
+saves us from additional `-I` flags.
+
 ### Skeletons
 We try to use the "typical" coding style for each language.
 
diff --git a/src/AnnotationList.h b/src/AnnotationList.h
index d5258a57..a9f808c5 100644
--- a/src/AnnotationList.h
+++ b/src/AnnotationList.h
@@ -21,6 +21,7 @@
 # define ANNOTATION_LIST_H_
 
 # include <bitsetv.h>
+
 # include "Sbitset.h"
 # include "InadequacyList.h"
 # include "state.h"
diff --git a/src/fixits.c b/src/fixits.c
index 2c900254..701d2ad4 100644
--- a/src/fixits.c
+++ b/src/fixits.c
@@ -21,19 +21,19 @@
 
 #include "fixits.h"
 
-#include "system.h"
+#include <error.h>
+#include <get-errno.h>
+#include <gl_array_list.h>
+#include <gl_xlist.h>
+#include <progname.h>
+#include <quote.h>
+#include <quotearg.h>
+#include <vasnprintf.h>
 
-#include "error.h"
-#include "get-errno.h"
-#include "getargs.h"
-#include "gl_array_list.h"
-#include "gl_xlist.h"
-#include "progname.h"
-#include "quote.h"
-#include "quotearg.h"
-#include "vasnprintf.h"
+#include "system.h"
 
 #include "files.h"
+#include "getargs.h"
 
 typedef struct
 {
diff --git a/src/print-xml.h b/src/print-xml.h
index c057780b..51d3c15c 100644
--- a/src/print-xml.h
+++ b/src/print-xml.h
@@ -21,8 +21,6 @@
 #ifndef PRINT_XML_H_
 # define PRINT_XML_H_
 
-# include <config.h>
-
 # include <stdio.h>
 
 void xml_indent (FILE *out, int level);
diff --git a/src/scan-code.l b/src/scan-code.l
index 8259bfd3..1aaecd4e 100644
--- a/src/scan-code.l
+++ b/src/scan-code.l
@@ -25,15 +25,15 @@
 #include <get-errno.h>
 #include <quote.h>
 
-#include <src/complain.h>
-#include <src/getargs.h>
-#include <src/muscle-tab.h>
-#include <src/reader.h>
-#include <src/scan-code.h>
-#include <src/symlist.h>
+#include "src/complain.h"
+#include "src/getargs.h"
+#include "src/muscle-tab.h"
+#include "src/reader.h"
+#include "src/scan-code.h"
+#include "src/symlist.h"
 
 #define FLEX_PREFIX(Id) code_ ## Id
-#include <src/flex-scanner.h>
+#include "src/flex-scanner.h"
 
 /* Work around a bug in flex 2.5.31.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
diff --git a/src/scan-gram.l b/src/scan-gram.l
index 763432d8..e3d96f24 100644
--- a/src/scan-gram.l
+++ b/src/scan-gram.l
@@ -28,16 +28,16 @@
 #include <quote.h>
 #include <quotearg.h>
 
-#include <src/complain.h>
-#include <src/files.h>
-#include <src/getargs.h>
-#include <src/gram.h>
-#include <src/reader.h>
-#include <src/scan-gram.h>
-#include <src/uniqstr.h>
+#include "src/complain.h"
+#include "src/files.h"
+#include "src/getargs.h"
+#include "src/gram.h"
+#include "src/reader.h"
+#include "src/scan-gram.h"
+#include "src/uniqstr.h"
 
 #define FLEX_PREFIX(Id) gram_ ## Id
-#include <src/flex-scanner.h>
+#include "src/flex-scanner.h"
 
 /* Work around a bug in flex 2.5.31.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
diff --git a/src/scan-skel.l b/src/scan-skel.l
index 703c56f5..d7e334d5 100644
--- a/src/scan-skel.l
+++ b/src/scan-skel.l
@@ -26,13 +26,13 @@
 #include <path-join.h>
 #include <quotearg.h>
 
-#include <src/complain.h>
-#include <src/files.h>
-#include <src/getargs.h>
-#include <src/scan-skel.h>
+#include "src/complain.h"
+#include "src/files.h"
+#include "src/getargs.h"
+#include "src/scan-skel.h"
 
 #define FLEX_PREFIX(Id) skel_ ## Id
-#include <src/flex-scanner.h>
+#include "src/flex-scanner.h"
 
 /* Work around a bug in flex 2.5.31.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
-- 
2.26.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.