/ Hex Artifact Content
Login

Artifact 810e51703529a204fc4e1eb060e9ab663e3c06d2:


0000: 2f 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72  /*.** This progr
0010: 61 6d 20 63 68 65 63 6b 73 20 66 6f 72 20 66 6f  am checks for fo
0020: 72 6d 61 74 74 69 6e 67 20 70 72 6f 62 6c 65 6d  rmatting problem
0030: 73 20 69 6e 20 73 6f 75 72 63 65 20 63 6f 64 65  s in source code
0040: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 2a 20 20 41 6e  :.**.**    *  An
0050: 79 20 75 73 65 20 6f 66 20 74 61 62 20 63 68 61  y use of tab cha
0060: 72 61 63 74 65 72 73 0a 2a 2a 20 20 20 20 2a 20  racters.**    * 
0070: 20 57 68 69 74 65 20 73 70 61 63 65 20 61 74 20   White space at 
0080: 74 68 65 20 65 6e 64 20 6f 66 20 61 20 6c 69 6e  the end of a lin
0090: 65 0a 2a 2a 20 20 20 20 2a 20 20 42 6c 61 6e 6b  e.**    *  Blank
00a0: 20 6c 69 6e 65 73 20 61 74 20 74 68 65 20 65 6e   lines at the en
00b0: 64 20 6f 66 20 61 20 66 69 6c 65 0a 2a 2a 0a 2a  d of a file.**.*
00c0: 2a 20 41 6e 79 20 76 69 6f 6c 61 74 69 6f 6e 73  * Any violations
00d0: 20 61 72 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a   are reported..*
00e0: 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  /.#include <stdi
00f0: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
0100: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
0110: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 0a 23 64  e <string.h>..#d
0120: 65 66 69 6e 65 20 43 52 5f 4f 4b 20 20 20 20 20  efine CR_OK     
0130: 20 30 78 30 30 31 0a 23 64 65 66 69 6e 65 20 57   0x001.#define W
0140: 53 45 4f 4c 5f 4f 4b 20 20 20 30 78 30 30 32 0a  SEOL_OK   0x002.
0150: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 68 65  .static void che
0160: 63 6b 53 70 61 63 69 6e 67 28 63 6f 6e 73 74 20  ckSpacing(const 
0170: 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 75 6e 73  char *zFile, uns
0180: 69 67 6e 65 64 20 66 6c 61 67 73 29 7b 0a 20 20  igned flags){.  
0190: 46 49 4c 45 20 2a 69 6e 20 3d 20 66 6f 70 65 6e  FILE *in = fopen
01a0: 28 7a 46 69 6c 65 2c 20 22 72 62 22 29 3b 0a 20  (zFile, "rb");. 
01b0: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 73 65   int i;.  int se
01c0: 65 6e 53 70 61 63 65 3b 0a 20 20 69 6e 74 20 73  enSpace;.  int s
01d0: 65 65 6e 54 61 62 3b 0a 20 20 69 6e 74 20 6c 6e  eenTab;.  int ln
01e0: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6c 61 73 74   = 0;.  int last
01f0: 4e 6f 6e 73 70 61 63 65 20 3d 20 30 3b 0a 20 20  Nonspace = 0;.  
0200: 63 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30 30 5d  char zLine[2000]
0210: 3b 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 7b  ;.  if( in==0 ){
0220: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 63 61 6e  .    printf("can
0230: 6e 6f 74 20 6f 70 65 6e 20 25 73 5c 6e 22 2c 20  not open %s\n", 
0240: 7a 46 69 6c 65 29 3b 0a 20 20 20 20 72 65 74 75  zFile);.    retu
0250: 72 6e 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28  rn;.  }.  while(
0260: 20 66 67 65 74 73 28 7a 4c 69 6e 65 2c 20 73 69   fgets(zLine, si
0270: 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 69 6e 29  zeof(zLine), in)
0280: 20 29 7b 0a 20 20 20 20 73 65 65 6e 53 70 61 63   ){.    seenSpac
0290: 65 20 3d 20 30 3b 0a 20 20 20 20 73 65 65 6e 54  e = 0;.    seenT
02a0: 61 62 20 3d 20 30 3b 0a 20 20 20 20 6c 6e 2b 2b  ab = 0;.    ln++
02b0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
02c0: 4c 69 6e 65 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20  Line[i]; i++){. 
02d0: 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 69       if( zLine[i
02e0: 5d 3d 3d 27 5c 74 27 20 26 26 20 73 65 65 6e 54  ]=='\t' && seenT
02f0: 61 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ab==0 ){.       
0300: 20 70 72 69 6e 74 66 28 22 25 73 3a 25 64 3a 20   printf("%s:%d: 
0310: 74 61 62 20 28 5c 5c 74 29 20 63 68 61 72 61 63  tab (\\t) charac
0320: 74 65 72 5c 6e 22 2c 20 7a 46 69 6c 65 2c 20 6c  ter\n", zFile, l
0330: 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e  n);.        seen
0340: 54 61 62 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  Tab = 1;.      }
0350: 65 6c 73 65 20 69 66 28 20 7a 4c 69 6e 65 5b 69  else if( zLine[i
0360: 5d 3d 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20 20  ]=='\r' ){.     
0370: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
0380: 43 52 5f 4f 4b 29 3d 3d 30 20 29 7b 0a 20 20 20  CR_OK)==0 ){.   
0390: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
03a0: 73 3a 25 64 3a 20 63 61 72 72 69 61 67 65 2d 72  s:%d: carriage-r
03b0: 65 74 75 72 6e 20 28 5c 5c 72 29 20 63 68 61 72  eturn (\\r) char
03c0: 61 63 74 65 72 5c 6e 22 2c 20 7a 46 69 6c 65 2c  acter\n", zFile,
03d0: 20 6c 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   ln);.        }.
03e0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
03f0: 7a 4c 69 6e 65 5b 69 5d 3d 3d 27 20 27 20 29 7b  zLine[i]==' ' ){
0400: 0a 20 20 20 20 20 20 20 20 73 65 65 6e 53 70 61  .        seenSpa
0410: 63 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  ce = 1;.      }e
0420: 6c 73 65 20 69 66 28 20 7a 4c 69 6e 65 5b 69 5d  lse if( zLine[i]
0430: 21 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20  !='\n' ){.      
0440: 20 20 6c 61 73 74 4e 6f 6e 73 70 61 63 65 20 3d    lastNonspace =
0450: 20 6c 6e 3b 0a 20 20 20 20 20 20 20 20 73 65 65   ln;.        see
0460: 6e 53 70 61 63 65 20 3d 20 30 3b 0a 20 20 20 20  nSpace = 0;.    
0470: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
0480: 28 20 73 65 65 6e 53 70 61 63 65 20 26 26 20 28  ( seenSpace && (
0490: 66 6c 61 67 73 20 26 20 57 53 45 4f 4c 5f 4f 4b  flags & WSEOL_OK
04a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72  )==0 ){.      pr
04b0: 69 6e 74 66 28 22 25 73 3a 25 64 3a 20 77 68 69  intf("%s:%d: whi
04c0: 74 65 73 70 61 63 65 20 61 74 20 65 6e 64 2d 6f  tespace at end-o
04d0: 66 2d 6c 69 6e 65 5c 6e 22 2c 20 7a 46 69 6c 65  f-line\n", zFile
04e0: 2c 20 6c 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  , ln);.    }.  }
04f0: 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20  .  fclose(in);. 
0500: 20 69 66 28 20 6c 61 73 74 4e 6f 6e 73 70 61 63   if( lastNonspac
0510: 65 3c 6c 6e 20 29 7b 0a 20 20 20 20 70 72 69 6e  e<ln ){.    prin
0520: 74 66 28 22 25 73 3a 25 64 3a 20 62 6c 61 6e 6b  tf("%s:%d: blank
0530: 20 6c 69 6e 65 73 20 61 74 20 65 6e 64 20 6f 66   lines at end of
0540: 20 66 69 6c 65 20 28 25 64 29 5c 6e 22 2c 0a 20   file (%d)\n",. 
0550: 20 20 20 20 20 20 20 7a 46 69 6c 65 2c 20 6c 6e         zFile, ln
0560: 2c 20 6c 6e 20 2d 20 6c 61 73 74 4e 6f 6e 73 70  , ln - lastNonsp
0570: 61 63 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 69 6e 74  ace);.  }.}..int
0580: 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20   main(int argc, 
0590: 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 20 20  char **argv){.  
05a0: 69 6e 74 20 69 3b 0a 20 20 75 6e 73 69 67 6e 65  int i;.  unsigne
05b0: 64 20 66 6c 61 67 73 20 3d 20 57 53 45 4f 4c 5f  d flags = WSEOL_
05c0: 4f 4b 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69  OK;.  for(i=1; i
05d0: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
05e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
05f0: 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66   argv[i];.    if
0600: 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20  ( z[0]=='-' ){. 
0610: 20 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d       while( z[0]
0620: 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20  =='-' ) z++;.   
0630: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
0640: 22 63 72 6f 6b 22 29 3d 3d 30 20 29 7b 0a 20 20  "crok")==0 ){.  
0650: 20 20 20 20 20 20 66 6c 61 67 73 20 7c 3d 20 43        flags |= C
0660: 52 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  R_OK;.      }els
0670: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 20  e if( strcmp(z, 
0680: 22 77 73 65 6f 6c 22 29 3d 3d 30 20 29 7b 0a 20  "wseol")==0 ){. 
0690: 20 20 20 20 20 20 20 66 6c 61 67 73 20 26 3d 20         flags &= 
06a0: 7e 57 53 45 4f 4c 5f 4f 4b 3b 0a 20 20 20 20 20  ~WSEOL_OK;.     
06b0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
06c0: 70 28 7a 2c 20 22 68 65 6c 70 22 29 3d 3d 30 20  p(z, "help")==0 
06d0: 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
06e0: 66 28 22 55 73 61 67 65 3a 20 25 73 20 5b 6f 70  f("Usage: %s [op
06f0: 74 69 6f 6e 73 5d 20 46 49 4c 45 20 2e 2e 2e 5c  tions] FILE ...\
0700: 6e 22 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20  n", argv[0]);.  
0710: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 20 20        printf("  
0720: 2d 2d 63 72 6f 6b 20 20 20 20 20 20 44 6f 20 6e  --crok      Do n
0730: 6f 74 20 72 65 70 6f 72 74 20 6f 6e 20 63 61 72  ot report on car
0740: 72 69 61 67 65 2d 72 65 74 75 72 6e 73 5c 6e 22  riage-returns\n"
0750: 29 3b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  );.        print
0760: 66 28 22 20 20 2d 2d 77 73 65 6f 6c 20 20 20 20  f("  --wseol    
0770: 20 43 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   Complain about 
0780: 77 68 69 74 65 73 70 61 63 65 20 61 74 20 65 6e  whitespace at en
0790: 64 2d 6f 66 2d 6c 69 6e 65 5c 6e 22 29 3b 0a 20  d-of-line\n");. 
07a0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 20         printf(" 
07b0: 20 2d 2d 68 65 6c 70 20 20 20 20 20 20 54 68 69   --help      Thi
07c0: 73 20 6d 65 73 73 61 67 65 5c 6e 22 29 3b 0a 20  s message\n");. 
07d0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
07e0: 20 20 20 20 70 72 69 6e 74 66 28 22 75 6e 6b 6e      printf("unkn
07f0: 6f 77 6e 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  own command-line
0800: 20 6f 70 74 69 6f 6e 3a 20 5b 25 73 5d 5c 6e 22   option: [%s]\n"
0810: 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  , argv[i]);.    
0820: 20 20 20 20 70 72 69 6e 74 66 28 22 75 73 65 20      printf("use 
0830: 2d 2d 68 65 6c 70 20 66 6f 72 20 61 64 64 69 74  --help for addit
0840: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
0850: 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n\n");.      }. 
0860: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
0870: 63 68 65 63 6b 53 70 61 63 69 6e 67 28 61 72 67  checkSpacing(arg
0880: 76 5b 69 5d 2c 20 66 6c 61 67 73 29 3b 0a 20 20  v[i], flags);.  
0890: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
08a0: 20 30 3b 0a 7d 0a                                 0;.}.