#include <vector>
#include <functional>
namespace emacs_initlist_indentation_bug {
struct ABC {
int a; // OK, text-book indentation
int b; //
int c; //
};
struct DEF {
int d, //
e, // indented from "int" + 2
f; //
};
struct GHI {
int //
g, // indented from "int" +0
h, // indented from "int" + 2
i; //
};
int f1 ( int a, // Indentation OK in function declaration context
int b, //
int c //
) // Notice how the ")" is indented
{
if(a>0){
return a+ // while out-of-topic, this probably pinpoints
b+ // what's going on internally
c; //
} else if(a<0) {
return (a+ // these are well aligned
b+ //
c); //
} else {
return
(a+ // these are well aligned
b+ //
c); //
}
}
void f2 (const ABC& abc)
{
f1(abc.a, // Indentation OK in function call context
abc.b, //
abc.c); //
}
void f3 (int a, int b, int c)
{
f1( f1( a+1, // Indentation OK, text-book example, perfect!
b+1, //
c+1 ), //
f1( a+2, //
b+2, //
c+2 ), //
f1( a+3, //
b+3, //
c+3 ) //
); //
}
void f4 (int a, int b, int c)
{
f2({a+1, // note "{" on same line as "("
b+1, // indented after "{" + 2
c+1} //
); // Bad! ")" indented underneath "(" instead of argument (ie. "{")
f2(
{a+2, // note "{" on different line as "("
b+2, // indented after "{" + 3 !!!
c+2} //
); // OK, ")" indented underneath "{"
// Below are some typical indentation I'm getting these days.
// The only difference is in the newline on first line (and numerics)
std::vector<ABC> abcList1({{a+1, //
b+1, //
c+1}, //
{a+2, //
b+2, //
c+2}, //
{a+3, //
b+3, //
c+3} //
} //
); //
std::vector<ABC> abcList2( // Source of alignment for closing ")" below
{{a+4, //
b+4, //
c+4}, //
{a+5, //
b+5, //
c+5}, //
{a+6, //
b+6, //
c+6} //
} //
); /* Somehow, this one aligns with first line's comment position!! */
}
void f5 ()
{
int foo = 0;
std::vector< std::function<int(int)> >
lambda_initlist_bug({ //
[foo](int x) //
{ // BAD, too indented by 2 positions
return x+x; //
}, //
[foo](int y) //
{ // BAD, too indented by 2 positions
return y+y; //
}, //
[foo](int z) //
{ // BAD, too indented by 2 positions
return z+z; //
} //
}
);
lambda_initlist_bug.push_back( //
[](int p) // OK, text-book indentation
{ //
return p+p; //
} //
); /* Aligned with first comment! */
for(auto f_lambda : lambda_initlist_bug){
f_lambda( 123 );
}
}
}