You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/03/09 16:00:40 UTC
[incubator-nuttx] 06/07: Some more fine tuning Handle #define
different than other preprocessor lines Ignore backslash at the end of a
comment right of a preprocessor line
This is an automated email from the ASF dual-hosted git repository.
gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 745e0a4ca9de577405a8ab2a6a4294b3225e4ef3
Author: Johanne Schock <jo...@nivus.com>
AuthorDate: Mon Mar 9 12:53:21 2020 +0100
Some more fine tuning
Handle #define different than other preprocessor lines
Ignore backslash at the end of a comment right of a preprocessor line
---
tools/nxstyle.c | 121 +++++++++++++++++++++++++++++++++-----------------------
1 file changed, 72 insertions(+), 49 deletions(-)
diff --git a/tools/nxstyle.c b/tools/nxstyle.c
index d704df3..71ca4c2 100644
--- a/tools/nxstyle.c
+++ b/tools/nxstyle.c
@@ -112,6 +112,13 @@ enum section_s
PUBLIC_FUNCTION_PROTOTYPES
};
+enum pptype_e
+{
+ PPLINE_NONE = 0,
+ PPLINE_DEFINE,
+ PPLINE_OTHER
+};
+
struct file_section_s
{
const char *name; /* File section name */
@@ -503,10 +510,13 @@ int main(int argc, char **argv, char **envp)
bool bstring; /* True: Within a string */
bool bquote; /* True: Backslash quoted character next */
bool bblank; /* Used to verify block comment terminator */
- bool ppline; /* True: The next line the continuation of a pre-processor command */
bool bexternc; /* True: Within 'extern "C"' */
- int rhcomment; /* Indentation of Comment to the right of code */
- int prevrhcmt; /* Indentation of previous Comment to the right of code */
+ enum pptype_e ppline; /* > 0: The next line the continuation of a
+ * pre-processor command */
+ int rhcomment; /* Indentation of Comment to the right of code
+ * (-1 -> don't check position) */
+ int prevrhcmt; /* Indentation of previous Comment to the right
+ * of code (-1 -> don't check position) */
int lineno; /* Current line number */
int indent; /* Indentation level */
int ncomment; /* Comment nesting level on this line */
@@ -618,27 +628,29 @@ int main(int argc, char **argv, char **envp)
g_maxline = get_line_width(instream) + excess;
rewind(instream);
- btabs = false; /* True: TAB characters found on the line */
- bcrs = false; /* True: Carriage return found on the line */
- bfunctions = false; /* True: In private or public functions */
- bswitch = false; /* True: Within a switch statement */
- bstring = false; /* True: Within a string */
- ppline = false; /* True: Continuation of a pre-processor line */
- bexternc = false; /* True: Within 'extern "C"' */
- rhcomment = 0; /* Indentation of Comment to the right of code */
- prevrhcmt = 0; /* Indentation of previous Comment to the right
- * of code */
- lineno = 0; /* Current line number */
- ncomment = 0; /* Comment nesting level on this line */
- bnest = 0; /* Brace nesting level on this line */
- dnest = 0; /* Data declaration nesting level on this line */
- pnest = 0; /* Parenthesis nesting level on this line */
- comment_lineno = -1; /* Line on which the last comment was closed */
- blank_lineno = -1; /* Line number of the last blank line */
- noblank_lineno = -1; /* A blank line is not needed after this line */
- lbrace_lineno = -1; /* Line number of last left brace */
- rbrace_lineno = -1; /* Last line containing a right brace */
- externc_lineno = -1; /* Last line where 'extern "C"' declared */
+ btabs = false; /* True: TAB characters found on the line */
+ bcrs = false; /* True: Carriage return found on the line */
+ bfunctions = false; /* True: In private or public functions */
+ bswitch = false; /* True: Within a switch statement */
+ bstring = false; /* True: Within a string */
+ bexternc = false; /* True: Within 'extern "C"' */
+ ppline = PPLINE_NONE; /* > 0: The next line the continuation of a
+ * pre-processor command */
+ rhcomment = 0; /* Indentation of Comment to the right of code
+ * (-1 -> don't check position) */
+ prevrhcmt = 0; /* Indentation of previous Comment to the right
+ * of code (-1 -> don't check position) */
+ lineno = 0; /* Current line number */
+ ncomment = 0; /* Comment nesting level on this line */
+ bnest = 0; /* Brace nesting level on this line */
+ dnest = 0; /* Data declaration nesting level on this line */
+ pnest = 0; /* Parenthesis nesting level on this line */
+ comment_lineno = -1; /* Line on which the last comment was closed */
+ blank_lineno = -1; /* Line number of the last blank line */
+ noblank_lineno = -1; /* A blank line is not needed after this line */
+ lbrace_lineno = -1; /* Line number of last left brace */
+ rbrace_lineno = -1; /* Last line containing a right brace */
+ externc_lineno = -1; /* Last line where 'extern "C"' declared */
/* Process each line in the input stream */
@@ -827,7 +839,7 @@ int main(int argc, char **argv, char **envp)
* lines as indicated by ppline)
*/
- if (line[indent] == '#' || ppline)
+ if (line[indent] == '#' || ppline != PPLINE_NONE)
{
int len;
int ii;
@@ -840,7 +852,7 @@ int main(int argc, char **argv, char **envp)
* line.
*/
- if (!ppline)
+ if (ppline == PPLINE_NONE)
{
/* Skip to the pre-processor command following the '#' */
@@ -856,8 +868,12 @@ int main(int argc, char **argv, char **envp)
* the pre-processor definitions section.
*/
+ ppline = PPLINE_OTHER;
+
if (strncmp(&line[ii], "define", 6) == 0)
{
+ ppline = PPLINE_DEFINE;
+
if (g_section != PRE_PROCESSOR_DEFINITIONS)
{
/* A complication is the header files always have
@@ -913,44 +929,51 @@ int main(int argc, char **argv, char **envp)
len--;
}
- ppline = (line[len] == '\\');
-
/* Propagate rhcomment over preprocessor lines Issue #120 */
rhcomment = prevrhcmt;
- if (!ppline)
+ lptr = strstr(line, "/*");
+ if (lptr != NULL)
{
- lptr = strstr(line, "/*");
- if (lptr != NULL)
+ n = lptr - &line[0];
+ if (line[n + 2] == '\n')
{
- n = lptr - &line[0];
- if (line[n + 2] == '\n')
- {
- ERROR("C comment opening on separate line", lineno, n);
- }
- else if (!isspace((int)line[n + 2]) && line[n + 2] != '*')
- {
- ERROR("Missing space after opening C comment", lineno, n);
- }
+ ERROR("C comment opening on separate line", lineno, n);
+ }
+ else if (!isspace((int)line[n + 2]) && line[n + 2] != '*')
+ {
+ ERROR("Missing space after opening C comment", lineno, n);
+ }
- if (strstr(lptr, "*/") == NULL)
- {
- /* Increment the count of nested comments */
+ if (strstr(lptr, "*/") == NULL)
+ {
+ /* Increment the count of nested comments */
- ncomment++;
- }
+ ncomment++;
+ }
+ if (ppline == PPLINE_DEFINE)
+ {
rhcomment = n;
-
- if (!strncmp(&line[ii], "define", 6)
- && prevrhcmt != 0 && n != prevrhcmt)
+ if (prevrhcmt > 0 && n != prevrhcmt)
{
rhcomment = prevrhcmt;
WARN("Wrong column position of comment right of code",
lineno, n);
}
}
+ else
+ {
+ /* Signal rhcomment, but ignore position */
+
+ rhcomment = -1;
+ }
+ }
+
+ if (line[len] != '\\' || ncomment > 0)
+ {
+ ppline = PPLINE_NONE;
}
continue;
@@ -1413,7 +1436,7 @@ int main(int argc, char **argv, char **envp)
else
{
rhcomment = n;
- if (n != prevrhcmt)
+ if (prevrhcmt > 0 && n != prevrhcmt)
{
rhcomment = prevrhcmt;
WARN("Wrong column position of comment right of code",