indent(1): add a new option, -ta, to treat all *_t identifiers as types

Submitted by:	Hans Petter Selasky
Discussed with:	bde
MFC after:	10 days
This commit is contained in:
Andriy Gapon 2010-03-31 17:05:30 +00:00
parent 6953f51a9d
commit c58c7416c7
4 changed files with 19 additions and 0 deletions

View File

@ -157,6 +157,7 @@ struct pro {
{"sc", PRO_BOOL, true, ON, &star_comment_cont},
{"sob", PRO_BOOL, false, ON, &swallow_optional_blanklines},
{"st", PRO_SPECIAL, 0, STDIN, 0},
{"ta", PRO_BOOL, false, ON, &auto_typedefs},
{"troff", PRO_BOOL, false, ON, &troff},
{"ut", PRO_BOOL, true, ON, &use_tabs},
{"v", PRO_BOOL, false, ON, &verbose},

View File

@ -80,6 +80,7 @@
.Op Fl sob | Fl nsob
.Ek
.Op Fl \&st
.Op Fl \&ta
.Op Fl troff
.Op Fl ut | Fl nut
.Op Fl v | Fl \&nv
@ -377,6 +378,9 @@ Default:
Causes
.Nm
to take its input from stdin and put its output to stdout.
.It Fl ta
Automatically add all identifiers ending in "_t" to the list
of type keywords.
.It Fl T Ns Ar typename
Adds
.Ar typename

View File

@ -204,6 +204,8 @@ int function_brace_split; /* split function declaration and
* brace onto separate lines */
int use_tabs; /* set true to use tabs for spacing,
* false uses all spaces */
int auto_typedefs; /* set true to recognize identifiers
* ending in "_t" like typedefs */
/* -troff font state information */

View File

@ -249,6 +249,17 @@ lexi(void)
last_code = ident; /* Remember that this is the code we will
* return */
if (auto_typedefs) {
const char *q = s_token;
/* Check if we have an "_t" in the end */
if (q[0] && q[1] &&
(strcmp(q + strlen(q) - 2, "_t") == 0)) {
ps.its_a_keyword = true;
ps.last_u_d = true;
goto found_auto_typedef;
}
}
/*
* This loop will check if the token is a keyword.
*/
@ -285,6 +296,7 @@ lexi(void)
/* FALLTHROUGH */
case 4: /* one of the declaration keywords */
found_auto_typedef:
if (ps.p_l_follow) {
ps.cast_mask |= (1 << ps.p_l_follow) & ~ps.sizeof_mask;
break; /* inside parens: cast, param list or sizeof */