← Back to team overview

widelands-dev team mailing list archive

Re: [Merge] lp:~widelands-dev/widelands/clang-codecheck into lp:widelands

 

Review: Approve

We could add a codecheck that runs clang-format and complains if the output is different to what clang format produces. But that might be brittle as clang-format is slightly changing between versions IMHO.


One nit, otherwise lgtm.

Diff comments:

> 
> === removed file 'cmake/codecheck/rules/missing_padding'
> --- cmake/codecheck/rules/missing_padding	2014-07-16 08:23:42 +0000
> +++ cmake/codecheck/rules/missing_padding	1970-01-01 00:00:00 +0000
> @@ -1,378 +0,0 @@
> -#!/usr/bin/env python -tt

keep this one and just allow Type*/Type& ?

> -# encoding: utf-8
> -#
> -
> -"""
> -Checking for forbidden padding.
> -TypeName* and TypeName& are okay, as are TypeName * and TypeName &.
> -"""
> -
> -error_msg="Missing padding for operator. Needs a space before and after."
> -
> -import re
> -
> -# It is easier to search for invalids than for 'NOT' invalids
> -regexp = re.compile(r"""(?x)
> -([^\s](?:(?:&&)|(?:\|\|)))|
> -((?:(?:&&)|(?:\|\|))[^\s])|
> -([^\s>(&*:!{+\-[.](?<!operator)[*&][^*\s>)},])|          # Type*, Type&, operator
> -([+\-*/|^&!<]?={1,2}[^\s=])|   # '+= a', 'a== a', 'a!= a'
> -([^\s=!+-/^*/&|^<>r%][+\-*/^&|!<>%]?={1,2})|   # ' +=a', ' ==a', ' !=a', doesn't match 'r=' for operator=
> -
> -([^-<]>[^\s=&>*(:,);])|    # 'a >b'
> -
> -([^\s][/^\%](?!=))|    # '/ a'
> -([/^\%][^=\s])|
> -([^\s\-eE([{]-[^\s=\->])|    # -> and -= and unary -, also 8e-1
> -([^\s+]\+[^\s=+])      # +=
> -"""
> -)
> -
> -def match_function( lines, fn ):
> -    errors = []
> -    for lineno,line in enumerate(lines):
> -        line = line.strip()
> -        if not len(line) or line[0] == '#':
> -            continue
> -
> -        lineno += 1
> -
> -        if regexp.search(line):
> -            errors.append( (fn, lineno, error_msg) )
> -
> -    return errors
> -
> -strip_comments_and_strings = True
> -
> -evaluate_matches = match_function
> -
> -forbidden = [
> -    " a== b",
> -    " a ==b",
> -    " a !=b",
> -    " a!= b",
> -    "a>= b",
> -    "a >=b",
> -    "b<= a",
> -    "b <=a",
> -    #"b< a",  could also be std::vector<a
> -    #"b <a", could also be std::vector<hai>
> -    #"b> a", could also be std::vector<hallo> hi;
> -    "b >a",
> -
> -    ' a&& b',
> -    ' a &&b',
> -    ' a|| b',
> -    ' a ||b',
> -
> -    'char a = a^ a;',
> -    'char a = a ^a;',
> -
> -    # Eriks tests
> -    ## missing_padding.cc
> -    'char a=a;',
> -    'char a = a^a;',
> -    'char a = a%a;',
> -    'char a = a/a;',
> -    'char a = a*a;',
> -    'char a = a+a;',
> -    'char a = a-a;',
> -    'char A =A;',
> -    'char A = A^A;',
> -    'char A = A%A;',
> -    'char A = A/A;',
> -    'char A = A*A;',
> -    'char A = A+A;',
> -    'char A = A-A;',
> -
> -    'char b=b;',
> -    'char b = b^b;',
> -    'char b = b%b;',
> -    'char b = b/b;',
> -    'char b = b*b;',
> -    'char b = b+b;',
> -    'char b = b-b;',
> -    'char B =B;',
> -    'char B = B^B;',
> -    'char B = B%B;',
> -    'char B = B/B;',
> -    'char B = B*B;',
> -    'char B = B+B;',
> -    'char B = B-B;',
> -
> -    'char _ =_;',
> -    'char _ = _^_;',
> -    'char _ = _%_;',
> -    'char _ = _/_;',
> -    'char _ = _*_;',
> -    'char _ = _+_;',
> -    'char _ = _-_;',
> -
> -    'char x0 =010;',
> -    'char x0 = 010^010;',
> -    'char x0 = 010%010;',
> -    'char x0 = 010/010;',
> -    'char x0 = 010*010;',
> -    'char x0 = 010+010;',
> -    'char x0 = 010-010;',
> -
> -    'char x1 =1;',
> -    'char x1 = 1^1;',
> -    'char x1 = 1%1;',
> -    'char x1 = 1/1;',
> -    'char x1 = 1*1;',
> -    'char x1 = 1+1;',
> -    'char x1 = 1-1;',
> -
> -    'char const * str ="";',
> -
> -    'char ch =' ';',
> -
> -    'a^= a;',
> -    'a ^=a;',
> -    'a^=a;',
> -    'a/g= a;',
> -    'a /g=a;',
> -    'a/g=a;',
> -    'a*= a;',
> -    'a *=a;',
> -    'a*=a;',
> -    'a-= a;',
> -    'a -=a;',
> -    'a-=a;',
> -    'a+= a;',
> -    'a +=a;',
> -    'a+=a;',
> -    'a%=a;',
> -    'a%= a;',
> -    'a %=a;',
> -
> -    'A^= A;',
> -    'A ^=A;',
> -    'A^=A;',
> -    'A/g= A;',
> -    'A /g=A;',
> -    'A/g=A;',
> -    'A*= A;',
> -    'A *=A;',
> -    'A*=A;',
> -    'A-= A;',
> -    'A -=A;',
> -    'A-=A;',
> -    'A+= A;',
> -    'A +=A;',
> -    'A+=A;',
> -
> -    '_^= _;',
> -    '_ ^=_;',
> -    '_^=_;',
> -    '_/g= _;',
> -    '_ /g=_;',
> -    '_/g=_;',
> -    '_*= _;',
> -    '_ *=_;',
> -    '_*=_;',
> -    '_-= _;',
> -    '_ -=_;',
> -    '_-=_;',
> -    '_+= _;',
> -    '_ +=_;',
> -    '_+=_;',
> -
> -]
> -
> -allowed = [
> -    "char** argv",
> -    "AnimationGfx(const IImageLoader&, AnimationData const * data);",
> -    "RoutingNode* a;",
> -    "Blahtype& b;",
> -    "std::vector<RoutingNode*> & nodes",
> -
> -    'type_a& aa = aa;',
> -    'type_A& AA = AA;',
> -    'type_b& bb = bb;',
> -    'type_B& BB = BB;',
> -    'type_c& cc = cc;',
> -    'type_C& CC = AA;',
> -    'type_d& dd = dd;',
> -    'type_D& DD = DD;',
> -    'type_e& ee = ee;',
> -    'type_E& EE = EE;',
> -    'type_f& ff = ff;',
> -    'type_F& FF = FF;',
> -    'type_g& gg = gg;',
> -    'type_G& GG = GG;',
> -    'type_h& hh = hh;',
> -    'type_H& HH = HH;',
> -    'type_i& ii = ii;',
> -    'type_I& II = II;',
> -    'type_j& jj = jj;',
> -    'type_J& JJ = JJ;',
> -    'type_k& kk = kk;',
> -    'type_K& KK = KK;',
> -    'type_l& ll = ll;',
> -    'type_L& LL = LL;',
> -    'type_m& mm = mm;',
> -    'type_M& MM = MM;',
> -    'type_n& nn = nn;',
> -    'type_N& NN = NN;',
> -    'type_o& oo = oo;',
> -    'type_O& OO = OO;',
> -    'type_p& pp = pp;',
> -    'type_P& PP = PP;',
> -    'type_q& qq = qq;',
> -    'type_Q& QQ = QQ;',
> -    'type_r& rr = rr;',
> -    'type_R& RR = RR;',
> -    'type_s& ss = ss;',
> -    'type_S& SS = SS;',
> -    'type_t& tt = tt;',
> -    'type_T& TT = TT;',
> -    'type_u& uu = uu;',
> -    'type_U& UU = UU;',
> -    'type_v& vv = vv;',
> -    'type_V& VV = VV;',
> -    'type_w& ww = ww;',
> -    'type_W& WW = WW;',
> -    'type_x& xx = xx;',
> -    'type_X& XX = XX;',
> -    'type_y& yy = yy;',
> -    'type_Y& YY = YY;',
> -    'type_z& zz = zz;',
> -    'type_Z& ZZ = ZZ;',
> -    'type_a* aaa;',
> -    'type_b* bbb;',
> -    'type_c* ccc;',
> -    'type_d* ddd;',
> -    'type_e* eee;',
> -    'type_f* fff;',
> -    'type_g* ggg;',
> -    'type_h* hhh;',
> -    'type_i* iii;',
> -    'type_j* jjj;',
> -    'type_k* kkk;',
> -    'type_l* lll;',
> -    'type_m* mmm;',
> -    'type_n* nnn;',
> -    'type_o* ooo;',
> -    'type_p* ppp;',
> -    'type_q* qqq;',
> -    'type_r* rrr;',
> -    'type_s* sss;',
> -    'type_t* ttt;',
> -    'type_u* uuu;',
> -    'type_v* vvv;',
> -    'type_w* www;',
> -    'type_x* xxx;',
> -    'type_y* yyy;',
> -    'type_z* zzz;',
> -    'type_A* AAA;',
> -    'type_B* BBB;',
> -    'type_C* CCC;',
> -    'type_D* DDD;',
> -    'type_E* EEE;',
> -    'type_F* FFF;',
> -    'type_G* GGG;',
> -    'type_H* HHH;',
> -    'type_I* III;',
> -    'type_J* JJJ;',
> -    'type_K* KKK;',
> -    'type_L* LLL;',
> -    'type_M* MMM;',
> -    'type_N* NNN;',
> -    'type_O* OOO;',
> -    'type_P* PPP;',
> -    'type_Q* QQQ;',
> -    'type_R* RRR;',
> -    'type_S* SSS;',
> -    'type_T* TTT;',
> -    'type_U* UUU;',
> -    'type_V* VVV;',
> -    'type_W* WWW;',
> -    'type_X* XXX;',
> -    'type_Y* YYY;',
> -    'type_Z* ZZZ;',
> -    "RoutingNode* a;",
> -    "Blahtype& b;",
> -    "RoutingNode * a;",
> -    "Blahtype & b;",
> -    "/** Some comment **/",
> -    "std::vector<RoutingNode *> & nodes",
> -    "if (a && b)",
> -    "\tOpen.push(&start);",
> -    "\t\t*reinterpret_cast<std::vector<RoutingNode *>*>(&m_flags);",
> -    "std::vector<RoutingNode *>& nodes",
> -        "/* warehouses can determine max idle priority*/",
> -        "blah // I *wanna* do that",
> -    "&*m_stack.rbegin()",
> -
> -    "(std::set<std::string>, j.current->second, i)",
> -
> -    # > <
> -    "r = (palette[i].r * shade) >> 8;",
> -    "std::vector<High>",
> -    "std::vector<State>::iterator it = m_stack.end();",
> -
> -    "v->get_string()", # pointers are fine
> -
> -    # Allow includes
> -    "#include <sys/types.h>",
> -
> -
> -    # Ignore strings & comments
> -    "\tif (*i.current == '%') {",
> -    "if (calc_linewidth(font, cur_word) > (max_width /*/ 2*/)) {",
> -
> -
> -    # * Pointer to pointer
> -    "func(int **r);",
> -    "void (a::*b)",
> -    "if (!*ppgrid) {",
> -    "void MiniMap::toggle(Layers button) {*m_view.m_flags ^= button;}",
> -    "m_loaded_obj[&object] = false;",
> -    "m_loaded_obj[*object] = false;",
> -    "(_callback_argument_this.*_callback_function)();",
> -    "friend struct Table<void *>;",
> -
> -    # Unary minus
> -    "-1",
> -    "func(-1);",
> -    "8.46126929e-5",
> -    "-8.46126929e-5",
> -
> -    # Operator=
> -    "int someclass::operator= (int)",
> -    "int someclass::operator* (int)",
> -    "int someclass::operator== (int)",
> -
> -    # increment, decrement
> -    "incr++;",
> -    "++incr;",
> -    "--decr;",
> -    "decr--;",
> -    "++*digit_to_increment;",
> -
> -    # +=, -=
> -    "result += it",
> -    "result -= it",
> -
> -    # Logical
> -    "a && b",
> -    "a || b",
> -
> -    # compares
> -    "a == b",
> -    "a != b",
> -    "a >= b",
> -    "b <= a",
> -    "b < a",
> -    "b > a",
> -    "AreaWatcher(const Player_Area<>);",
> -    "void func (Player_Area<Area>);",
> -
> -    'a %= a;',
> -
> -    'Texture const &  /* f_r_texture */',
> -    'int32_t estimate(Map & /* map */, FCoords /* pos */) const {return 0;}',
> -
> -]


-- 
https://code.launchpad.net/~widelands-dev/widelands/clang-codecheck/+merge/284586
Your team Widelands Developers is subscribed to branch lp:~widelands-dev/widelands/clang-codecheck.


References