On Sun, Sep 24, 2000 at 08:24:44PM +0200, Blaz Zupan wrote:
> Does anybody have a .indent.pro file for indent(1) that enforces KNF style as
> specified in style(9)?
>From Bruce Evans, this is " a wrapper around indent(1) to print the
percentage changes that indent with the best (least bad) approximation to
KNF parameters that I know of would do."
---
#!/bin/sh
TMP=`mktemp /tmp/_knfom.XXXXXX`
TMPBAK=`mktemp /tmp/_knfom.XXXXXX`
trap 'rm -f $TMP $TMPBAK; exit 1' 1 2 3 13 15
trap 'rm -f $TMP $TMPBAK' 0
for i
do
cp "$i" $TMP
# XXX the typedef list hasn't been updated since 1993, except for the last
# two entries.
indent -npro \
-TBitSetTmp \
-TDBM \
-TDIR \
-TFix16_peh \
-TFix24_peh \
-TFix32_peh \
-TFix48_peh \
-TFix_peh \
-TGPT \
-TIntTmp \
-TLLattrib \
-TLLtoken \
-TPix \
-TProtoHook \
-TRatTmp \
-TSGTTY \
-TSeqNum \
-TStrTmp \
-TXCHAR \
-T_Fix \
-T__sFILE \
-T__sighandler_4_3_t \
-T__sighandler_t \
-T_code \
-T_dirdesc \
-T_ftsent \
-T_physadr \
-T_quad \
-T_uquad \
-T_vsIoAddr \
-T_vsStats \
-T_vs_box \
-T_vs_cursor \
-T_vs_event \
-Tbitstr_t \
-Tboolean_t \
-Tcaddr_t \
-Tcbool \
-Tcc_t \
-Tclock_t \
-Tclockframe \
-Tcomp_t \
-Tcomplex \
-Tdaddr_t \
-Tdb \
-Tdb_addr_t \
-Tdb_expr_t \
-Tdb_regs_t \
-Tdes_block \
-Tdev_pager_t \
-Tdev_t \
-Tfd_mask \
-Tfd_set \
-Tfhandle_t \
-Tfixpt_t \
-Tfpos_t \
-Tfsid_t \
-Tgid_t \
-Tino_t \
-Tint16 \
-Tint32 \
-Tjmp_buf \
-Tkey_t \
-Tlabel_t \
-Tllinsert \
-Tlock_data_t \
-Tlock_t \
-Tmode_t \
-Tn_long \
-Tn_short \
-Tn_time \
-Tnetobj \
-Tnew_handler_t \
-Tnfstype \
-Tnfsv2fh_t \
-Tnlink_t \
-Toff_t \
-Tone_arg_error_handler_t \
-Tpd_entry_t \
-Tpid_t \
-Tpmap_statistics_t \
-Tpmap_t \
-Tpt_entry_t \
-Tptrdiff_t \
-Tpv_entry \
-Tqaddr_t \
-Tqhdr \
-Tqueue_chain_t \
-Tqueue_entry_t \
-Tqueue_head_t \
-Tqueue_t \
-Tregexp \
-Tsegsz_t \
-TRefNum \
-Tsig_t \
-Tsigjmp_buf \
-Tsigset_t \
-Tsimple_lock_data_t \
-Tsimple_lock_t \
-Tsize_t \
-Tspeed_t \
-Tssize_t \
-Tsw_blk_t \
-Tsw_bm_t \
-Tsw_pager_t \
-Tswblk_t \
-Ttcflag_t \
-Ttcp_seq \
-Ttime_t \
-Ttimeout_func_t \
-Ttpr_t \
-Ttwo_arg_error_handler_t \
-Tu_char \
-Tu_int \
-Tu_int32 \
-Tu_long \
-Tu_short \
-Tuid_t \
-Tuint16 \
-Tuint32 \
-Tushort \
-Tva_list \
-Tvm_inherit_t \
-Tvm_map_entry_t \
-Tvm_map_object_t \
-Tvm_map_t \
-Tvm_object_hash_entry_t \
-Tvm_object_t \
-Tvm_offset_t \
-Tvm_page_t \
-Tvm_pager_t \
-Tvm_prot_t \
-Tvm_size_t \
-Tvm_statistics_data_t \
-Tvm_statistics_t \
-Tvn_pager_t \
-TvsIoAddrAddr \
-Twchar_t \
-Txdrproc_t \
-Tsy_call_t \
-Tvop_t \
-bad -bap -nbbb -nbc -br -nbs -c33 -cd33 -cdb -ce -ci4 -cli0 -d0 -di0 -ndj \
-ei -nfc1 -nfcb -i8 -ip -l79 -lc77 -nlp -npcs -psl -sc -nsob -nv \
$TMP $TMPBAK
(wc -l "$i" | tr '\012' ' '; diff $TMPBAK $TMP | grep -cv '^[1-9]') |
awk '{printf("%7.3f%% %s\n", 100 - 100 * $3 / 2 / ($1 + .1), $2)}'
done
---
-di0 is wrong for global declarations but right for local declarations.
indent -di8 would get the tabs for global declarations wrong anyway.
-nfcb is an extension to prevent formatting of big comments - otherwise
there is too much comment reformatting compared with code reformatting
(there still is).
These diffs implement -[n]fcb and attempt to implement no-space=after-sizeof
(not optional) and no-space-after 'struct foo *' (not optional). Without
these, indent unKNFizes even more perfectly KNF code.
The most serious bugs in indent are that it doesn't understand ANSI
function headers, and -lp doesn't actually work. I think these are
both fixed in gnu indent.
diff -c2 args.c~ args.c
*** args.c~ Sun Aug 29 11:15:27 1999
--- args.c Sun Aug 29 11:15:32 1999
***************
*** 111,114 ****
--- 111,115 ----
"fb", PRO_FONT, 0, 0, (int *) &bodyf,
"fc1", PRO_BOOL, true, ON, &format_col1_comments,
+ "fcb", PRO_BOOL, true, ON, &format_block_comments,
"fc", PRO_FONT, 0, 0, (int *) &scomf,
"fk", PRO_FONT, 0, 0, (int *) &keywordf,
***************
*** 132,135 ****
--- 133,137 ----
"nei", PRO_BOOL, true, OFF, &ps.else_if,
"nfc1", PRO_BOOL, true, OFF, &format_col1_comments,
+ "nfcb", PRO_BOOL, true, OFF, &format_block_comments,
"nip", PRO_BOOL, true, OFF, &ps.indent_parameters,
"nlp", PRO_BOOL, true, OFF, &lineup_to_parens,
diff -c2 indent.1~ indent.1
*** indent.1~ Sun Aug 29 11:45:30 1999
--- indent.1 Sun Aug 29 11:46:03 1999
***************
*** 64,67 ****
--- 64,68 ----
.Bk -words
.Op Fl fc1 | Fl nfc1
+ .Op Fl fcb | Fl nfcb
.Ek
.Op Fl i Ns Ar n
***************
*** 249,252 ****
--- 250,262 ----
used. The default is
.Fl fc1 .
+ .It Fl fcb , nfcb
+ Enables (disables) the formatting of block comments (ones that begin
+ with `/*\\n'). Often, block comments have been not so carefully hand
+ formatted by the programmer, but reformatting that would just change
+ the line breaks is not wanted. In such cases,
+ .Fl nfcb
+ should be used. Block comments are then handled like box comments.
+ The default is
+ .Fl fcb .
.It Fl i Ns Ar n
The number of spaces for one indentation level. The default is 8.
diff -c2 indent.c~ indent.c
*** indent.c~ Sun Aug 29 11:15:27 1999
--- indent.c Sun Aug 29 11:15:32 1999
***************
*** 166,169 ****
--- 166,170 ----
ps.unindent_displace = 0; /* -d0 */
ps.case_indent = 0; /* -cli0 */
+ format_block_comments = 1; /* -fcb */
format_col1_comments = 1; /* -fc1 */
procnames_start_line = 1; /* -psl */
***************
*** 534,538 ****
ps.last_u_d = true;
ps.cast_mask &= (1 << ps.p_l_follow) - 1;
! }
ps.sizeof_mask &= (1 << ps.p_l_follow) - 1;
if (--ps.p_l_follow < 0) {
--- 535,541 ----
ps.last_u_d = true;
ps.cast_mask &= (1 << ps.p_l_follow) - 1;
! ps.want_blank = false;
! } else
! ps.want_blank = true;
ps.sizeof_mask &= (1 << ps.p_l_follow) - 1;
if (--ps.p_l_follow < 0) {
***************
*** 544,548 ****
*e_code++ = token[0];
- ps.want_blank = true;
if (sp_sw && (ps.p_l_follow == 0)) { /* check for end of if
--- 547,550 ----
diff -c2 indent_globs.h~ indent_globs.h
*** indent_globs.h~ Wed Sep 8 17:15:09 1999
--- indent_globs.h Wed Sep 8 17:15:11 1999
***************
*** 156,159 ****
--- 156,161 ----
int proc_calls_space; /* If true, procedure calls look like:
* foo(bar) rather than foo (bar) */
+ int format_block_comments; /* true if comments beginning with
+ * `/*\n' are to be reformatted */
int format_col1_comments; /* If comments which start in column 1
* are to be magically reformatted
diff -c2 lexi.c~ lexi.c
*** lexi.c~ Sun Aug 29 11:15:27 1999
--- lexi.c Sun Aug 29 11:15:32 1999
***************
*** 59,63 ****
};
! struct templ specials[100] =
{
"switch", 1,
--- 59,63 ----
};
! struct templ specials[1000] =
{
"switch", 1,
***************
*** 89,92 ****
--- 89,94 ----
"do", 6,
"sizeof", 7,
+ "const", 9,
+ "volatile", 9,
0, 0
};
***************
*** 258,273 ****
case 3: /* a "struct" */
! if (ps.p_l_follow)
! break; /* inside parens: cast */
l_struct = true;
/*
! * Next time around, we will want to know that we have had a
! * 'struct'
*/
case 4: /* one of the declaration keywords */
if (ps.p_l_follow) {
ps.cast_mask |= 1 << ps.p_l_follow;
! break; /* inside parens: cast */
}
last_code = decl;
--- 260,284 ----
case 3: /* a "struct" */
! /*
! * Next time around, we may want to know that we have had a
! * 'struct'
! */
l_struct = true;
/*
! * Fall through to test for a cast, function prototype or
! * sizeof().
*/
case 4: /* one of the declaration keywords */
if (ps.p_l_follow) {
ps.cast_mask |= 1 << ps.p_l_follow;
!
! /*
! * Forget that we saw `struct' if we're in a sizeof().
! */
! if (ps.sizeof_mask)
! l_struct = false;
!
! break; /* inside parens: cast, prototype or sizeof() */
}
last_code = decl;
diff -c2 pr_comment.c~ pr_comment.c
*** pr_comment.c~ Sun Aug 29 11:15:27 1999
--- pr_comment.c Sun Aug 29 11:15:32 1999
***************
*** 112,119 ****
}
else {
! if (*buf_ptr == '-' || *buf_ptr == '*') {
! ps.box_com = true; /* a comment with a '-' or '*' immediately
* after the /* is assumed to be a boxed
! * comment */
break_delim = 0;
}
--- 112,124 ----
}
else {
! if (*buf_ptr == '-' || *buf_ptr == '*' ||
! (*buf_ptr == '\n' && !format_block_comments)) {
! ps.box_com = true; /* A comment with a '-' or '*' immediately
* after the /* is assumed to be a boxed
! * comment. A comment with a newline
! * immediately after the /* is assumed to
! * be a block comment and is treated as a
! * box comment unless format_block_comments
! * is nonzero (the default). */
break_delim = 0;
}
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message