• D
    Document bracket whitespace rules & add syntax-check rule · a3e95abe
    Daniel P. Berrange 提交于
    This documents the following whitespace rules
    
          if(foo)   // Bad
          if (foo)  // Good
    
          int foo (int wizz)  // Bad
          int foo(int wizz)   // Good
    
          bar = foo (wizz);  // Bad
          bar = foo(wizz);   // Good
    
          typedef int (*foo) (int wizz);  // Bad
          typedef int (*foo)(int wizz);   // Good
    
          int foo( int wizz );  // Bad
          int foo(int wizz);    // Good
    
    There is a syntax-check rule extension to validate all these rules.
    Checking for 'function (...args...)' is quite difficult since it
    needs to ignore valid usage with keywords like 'if (...test...)'
    and while/for/switch. It must also ignore source comments and
    quoted strings.
    
    It is not possible todo this with a simple regex in the normal
    syntax-check style. So a short Perl script is created instead
    to analyse the source. In practice this works well enough. The
    only thing it can't cope with is multi-line quoted strings of
    the form
    
     "start of string\
    more lines\
    more line\
    the end"
    
    but this can and should be written as
    
     "start of string"
     "more lines"
     "more line"
     "the end"
    
    with this simple change, the bracket checking script does not
    have any false positives across libvirt source, provided it
    is only run against .c files. It is not practical to run it
    against .h files, since those use whitespace extensively to
    get alignment (though this is somewhat inconsistent and could
    arguably be fixed).
    
    The only limitation is that it cannot detect a violation where
    the first arg starts with a '*', eg
    
       foo(*wizz);
    
    since this generates too many false positives on function
    typedefs which can't be supressed efficiently.
    Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
    a3e95abe
HACKING 24.6 KB