blob: f987478f62064eab4600a463266bccba4af84ee0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001/* vim: set cin ts=4 sw=4 : */
2
3Test for 'cindent'
4
5STARTTEST
6:so small.vim
Bram Moolenaar8c8de832008-06-24 22:58:06 +00007:set nocompatible viminfo+=nviminfo modeline
Bram Moolenaar071d4272004-06-13 20:20:40 +00008:edit " read modeline
9/start of AUTO
10=/end of AUTO
11ENDTEST
12
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000013/* start of AUTO matically checked vim: set ts=4 : */
Bram Moolenaar071d4272004-06-13 20:20:40 +000014{
15 if (test)
16 cmd1;
17 cmd2;
18}
19
20{
21 if (test)
22 cmd1;
23 else
24 cmd2;
25}
26
27{
28 if (test)
29 {
30 cmd1;
31 cmd2;
32 }
33}
34
35{
36 if (test)
37 {
38 cmd1;
39 else
40 }
41}
42
43{
44 while (this)
45 if (test)
46 cmd1;
47 cmd2;
48}
49
50{
51 while (this)
52 if (test)
53 cmd1;
54 else
55 cmd2;
56}
57
58{
59 if (test)
60 {
61 cmd;
62 }
63
64 if (test)
65 cmd;
66}
67
68{
69 if (test) {
70 cmd;
71 }
72
73 if (test) cmd;
74}
75
76{
77 cmd1;
78 for (blah)
79 while (this)
80 if (test)
81 cmd2;
82 cmd3;
83}
84
85{
86 cmd1;
87 for (blah)
88 while (this)
89 if (test)
90 cmd2;
91 cmd3;
92
93 if (test)
94 {
95 cmd1;
96 cmd2;
97 cmd3;
98 }
99}
100
101
102/* Test for 'cindent' do/while mixed with if/else: */
103
104{
105 do
106 if (asdf)
107 asdfasd;
108 while (cond);
109
110 do
111 if (asdf)
112 while (asdf)
113 asdf;
114 while (asdf);
115}
116
117/* Test for 'cindent' with two ) on a continuation line */
118{
119 if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
120 aal;sdkjf ( ;asldfkja;sldfk
121 al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
122 line up here;
123}
124
125
126/* C++ tests: */
127
128// foo() these three lines should remain in column 0
129// {
130// }
131
132/* Test for continuation and unterminated lines: */
133{
134 i = 99 + 14325 +
135 21345 +
136 21345 +
137 21345 + ( 21345 +
138 21345) +
139 2345 +
140 1234;
141 c = 1;
142}
143
144/*
145 testje for indent with empty line
146
147 here */
148
149{
150 if (testing &&
151 not a joke ||
152 line up here)
153 hay;
154 if (testing &&
155 (not a joke || testing
156 )line up here)
157 hay;
158 if (testing &&
159 (not a joke || testing
160 line up here))
161 hay;
162}
163
164
165{
166 switch (c)
167 {
168 case xx:
169 do
170 if (asdf)
171 do
172 asdfasdf;
173 while (asdf);
174 else
175 asdfasdf;
176 while (cond);
177 case yy:
178 case xx:
179 case zz:
180 testing;
181 }
182}
183
184{
185 if (cond) {
186 foo;
187 }
188 else
189 {
190 bar;
191 }
192}
193
194{
195 if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
196 alsdkfj (asldk;fj
197 awith cino=(0 ;lf this one goes to below the paren with ==
198 ;laksjfd ;lsakdjf ;alskdf asd)
199 asdfasdf;)))
200 asdfasdf;
201}
202
203 int
204func(a, b)
205 int a;
206 int c;
207{
208 if (c1 && (c2 ||
209 c3))
210 foo;
211 if (c1 &&
212 (c2 || c3)
213 )
214}
215
216{
217 while (asd)
218 {
219 if (asdf)
220 if (test)
221 if (that)
222 {
223 if (asdf)
224 do
225 cdasd;
226 while (as
227 df);
228 }
229 else
230 if (asdf)
231 asdf;
232 else
233 asdf;
234 asdf;
235 }
236}
237
238{
239 s = "/*"; b = ';'
240 s = "/*"; b = ';';
241 a = b;
242}
243
244{
245 switch (a)
246 {
247 case a:
248 switch (t)
249 {
250 case 1:
251 cmd;
252 break;
253 case 2:
254 cmd;
255 break;
256 }
257 cmd;
258 break;
259 case b:
260 {
261 int i;
262 cmd;
263 }
264 break;
265 case c: {
266 int i;
267 cmd;
268 }
269 case d: if (cond &&
270 test) { /* this line doesn't work right */
271 int i;
272 cmd;
273 }
274 break;
275 }
276}
277
278{
279 if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
280 (bp_to->b_p_initialized ||
281 (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
282 return;
283label :
284 asdf = asdf ?
285 asdf : asdf;
286 asdf = asdf ?
287 asdf: asdf;
288}
289
290/* Special Comments : This function has the added complexity (compared */
291/* : to addtolist) of having to check for a detail */
292/* : texture and add that to the list first. */
293
294char *(array[100]) = {
295 "testje",
296 "foo",
297 "bar",
298}
299
300enum soppie
301{
302 yes = 0,
303 no,
304 maybe
305};
306
307typedef enum soppie
308{
309 yes = 0,
310 no,
311 maybe
312};
313
314{
315 int a,
316 b;
317}
318
319{
320 struct Type
321 {
322 int i;
323 char *str;
324 } var[] =
325 {
326 0, "zero",
327 1, "one",
328 2, "two",
329 3, "three"
330 };
331
332 float matrix[3][3] =
333 {
334 {
335 0,
336 1,
337 2
338 },
339 {
340 3,
341 4,
342 5
343 },
344 {
345 6,
346 7,
347 8
348 }
349 };
350}
351
352{
353 /* blah ( blah */
354 /* where does this go? */
355
356 /* blah ( blah */
357 cmd;
358
359 func(arg1,
360 /* comment */
361 arg2);
362 a;
363 {
364 b;
365 {
366 c; /* Hey, NOW it indents?! */
367 }
368 }
369
370 {
371 func(arg1,
372 arg2,
373 arg3);
374 /* Hey, what am I doing here? Is this coz of the ","? */
375 }
376}
377
378main ()
379{
380 if (cond)
381 {
382 a = b;
383 }
384 if (cond) {
385 a = c;
386 }
387 if (cond)
388 a = d;
389 return;
390}
391
392{
393 case 2: if (asdf &&
394 asdfasdf)
395 aasdf;
396 a = 9;
397 case 3: if (asdf)
398 aasdf;
399 a = 9;
400 case 4: x = 1;
401 y = 2;
402
403label: if (asdf)
404 here;
405
406label: if (asdf &&
407 asdfasdf)
408 {
409 }
410
411label: if (asdf &&
412 asdfasdf) {
413 there;
414 }
415
416label: if (asdf &&
417 asdfasdf)
418 there;
419}
420
421{
422 /*
423 hello with ":set comments= cino=c5"
424 */
425
426 /*
427 hello with ":set comments= cino="
428 */
429}
430
431
432{
433 if (a < b) {
434 a = a + 1;
435 } else
436 a = a + 2;
437
438 if (a)
439 do {
440 testing;
441 } while (asdfasdf);
442 a = b + 1;
443 asdfasdf
444}
445
446class bob
447{
448 int foo() {return 1;}
449 int bar;
450}
451
452main()
453{
454while(1)
455if (foo)
456{
457bar;
458}
459else {
460asdf;
461}
462misplacedline;
463}
464
465{
466 if (clipboard.state == SELECT_DONE
467 && ((row == clipboard.start.lnum
468 && col >= clipboard.start.col)
469 || row > clipboard.start.lnum))
470}
471
472{
473if (1) {i += 4;}
474where_am_i;
475return 0;
476}
477
478{
479{
480} // sdf(asdf
481if (asdf)
482asd;
483}
484
485{
486label1:
487label2:
488}
489
490{
491int fooRet = foo(pBar1, false /*fKB*/,
492 true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
493f() {
494for ( i = 0;
495 i < m;
496 /* c */ i++ ) {
497a = b;
498}
499}
500}
501
502{
503 f1(/*comment*/);
504 f2();
505}
506
507{
508do {
509if (foo) {
510} else
511;
512} while (foo);
513foo(); // was wrong
514}
515
516int x; // no extra indent because of the ;
517void func()
518{
519}
520
521char *tab[] = {"aaa",
522 "};", /* }; */ NULL}
523 int indented;
524{}
525
526char *a[] = {"aaa", "bbb",
527 "ccc", NULL};
528// here
529
530char *tab[] = {"aaa",
531 "xx", /* xx */}; /* asdf */
532int not_indented;
533
534{
535 do {
536 switch (bla)
537 {
538 case 1: if (foo)
539 bar;
540 }
541 } while (boo);
542 wrong;
543}
544
545int foo,
546 bar;
547int foo;
548
549#if defined(foo) \
550 && defined(bar)
551char * xx = "asdf\
552 foo\
553 bor";
554int x;
555
556char *foo = "asdf\
557 asdf\
558 asdf",
559 *bar;
560
561void f()
562{
563#if defined(foo) \
564 && defined(bar)
565char *foo = "asdf\
566 asdf\
567 asdf",
568 *bar;
569 {
570 int i;
571char *foo = "asdf\
572 asdf\
573 asdf",
574 *bar;
575 }
576#endif
577}
578#endif
579
580int y; // comment
581 // comment
582
583 // comment
584
585{
586 Constructor(int a,
587 int b ) : BaseClass(a)
588 {
589 }
590}
591
592void foo()
593{
594 char one,
595 two;
596 struct bla piet,
597 jan;
598 enum foo kees,
599 jannie;
600 static unsigned sdf,
601 krap;
602 unsigned int piet,
603 jan;
604 int
605 kees,
606 jan;
607}
608
609{
610 t(int f,
611 int d); // )
612 d();
613}
614
615Constructor::Constructor(int a,
616 int b
617 ) :
618 BaseClass(a,
619 b,
620 c),
621 mMember(b),
622{
623}
624
625Constructor::Constructor(int a,
626 int b ) :
627 BaseClass(a)
628{
629}
630
631Constructor::Constructor(int a,
632 int b ) /*x*/ : /*x*/ BaseClass(a),
633 member(b)
634{
635}
636
637class CAbc :
638 public BaseClass1,
639 protected BaseClass2
640{
641 int Test() { return FALSE; }
642 int Test1() { return TRUE; }
643
644 CAbc(int a, int b ) :
645 BaseClass(a)
646 {
647 switch(xxx)
648 {
649 case abc:
650 asdf();
651 break;
652
653 case 999:
654 baer();
655 break;
656 }
657 }
658
659public: // <-- this was incoreectly indented before!!
660 void testfall();
661protected:
662 void testfall();
663};
664
665class CAbc : public BaseClass1,
666 protected BaseClass2
667{
668};
669
670static struct
671{
672 int a;
673 int b;
674} variable[COUNT] =
675{
676 {
677 123,
678 456
679 },
680 {
681 123,
682 456
683 }
684};
685
686static struct
687{
688 int a;
689 int b;
690} variable[COUNT] =
691{
692 { 123, 456 },
693 { 123, 456 }
694};
695
696void asdf() /* ind_maxparen may cause trouble here */
697{
698 if ((0
699 && 1
700 && 1
701 && 1
702 && 1
703 && 1
704 && 1
705 && 1
706 && 1
707 && 1
708 && 1
709 && 1
710 && 1
711 && 1
712 && 1
713 && 1
714 && 1
715 && 1
716 && 1
717 && 1
718 && 1
719 && 1
720 && 1
721 && 1
722 && 1
723 && 1)) break;
724}
725
Bram Moolenaar18144c82006-04-12 21:52:12 +0000726foo()
727{
728 a = cond ? foo() : asdf
729 + asdf;
730
731 a = cond ?
732 foo() : asdf
733 + asdf;
734}
735
736int main(void)
737{
738 if (a)
739 if (b)
740 2;
741 else 3;
742 next_line_of_code();
743}
744
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000745barry()
746{
747 Foo::Foo (int one,
748 int two)
749 : something(4)
750 {}
751}
752
753barry()
754{
755 Foo::Foo (int one, int two)
756 : something(4)
757 {}
758}
759
760Constructor::Constructor(int a,
761 int b
762 ) :
763 BaseClass(a,
764 b,
765 c),
766 mMember(b)
767{
768}
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000769 int main ()
770 {
771 if (lala)
772 do
773 ++(*lolo);
774 while (lili
775 && lele);
776 lulu;
777 }
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000778
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000779int main ()
780{
781switch (c)
782{
783case 'c': if (cond)
784{
785}
786}
787}
788
789main()
790{
791 (void) MyFancyFuasdfadsfnction(
792 argument);
793}
794
795main()
796{
797 char foo[] = "/*";
798 /* as
799 df */
800 hello
801}
Bram Moolenaared38b0a2011-05-25 15:16:18 +0200802
803/* valid namespaces with normal indent */
804namespace
805{
806{
807 111111111111;
808}
809}
810namespace /* test */
811{
812 11111111111111111;
813}
814namespace // test
815{
816 111111111111111111;
817}
818namespace
819{
820 111111111111111111;
821}
822namespace test
823{
824 111111111111111111;
825}
826namespace{
827 111111111111111111;
828}
829namespace test{
830 111111111111111111;
831}
832namespace {
833 111111111111111111;
834}
835namespace test {
836 111111111111111111;
837namespace test2 {
838 22222222222222222;
839}
840}
841
842/* invalid namespaces use block indent */
843namespace test test2 {
844 111111111111111111111;
845}
846namespace11111111111 {
847 111111111111;
848}
849namespace() {
850 1111111111111;
851}
852namespace()
853{
854 111111111111111111;
855}
856namespace test test2
857{
858 1111111111111111111;
859}
860namespace111111111
861{
862 111111111111111111;
863}
864
Bram Moolenaar071d4272004-06-13 20:20:40 +0000865/* end of AUTO */
866
867STARTTEST
868:set tw=0 wm=60 columns=80 noai fo=croq
869/serious/e
870a about life, the universe, and the rest
871ENDTEST
872
873{
874
875/* this is
876 * a real serious important big
877 * comment
878 */
879 /* insert " about life, the universe, and the rest" after "serious" */
880}
881
882STARTTEST
883:set nocin
884/comments
885joabout life/happens
886jothere/below
887oline/this
888Ohello
889ENDTEST
890
891{
892 /*
893 * Testing for comments, without 'cin' set
894 */
895
896/*
897* what happens here?
898*/
899
900 /*
901 the end of the comment, try inserting a line below */
902
903 /* how about
904 this one */
905}
906
907STARTTEST
908:set cin
909/vec2
910==
911ENDTEST
912
913{
914 var = this + that + vec[0] * vec[0]
915 + vec[1] * vec[1]
916 + vec2[2] * vec[2];
917}
918
919STARTTEST
920:set cin
921:set cino=}4
922/testing1
923k2==/testing2
924k2==
925ENDTEST
926
927{
928 asdf asdflkajds f;
929 if (tes & ting) {
930 asdf asdf asdf ;
931 asdfa sdf asdf;
932 }
933 testing1;
934 if (tes & ting)
935 {
936 asdf asdf asdf ;
937 asdfa sdf asdf;
938 }
939 testing2;
940}
941
942STARTTEST
943:set cin
944:set cino=(0,)20
945/main
946=][
947ENDTEST
948
949main ( int first_par, /*
950 * Comment for
951 * first par
952 */
953 int second_par /*
954 * Comment for
955 * second par
956 */
957 )
958{
959 func( first_par, /*
960 * Comment for
961 * first par
962 */
963 second_par /*
964 * Comment for
965 * second par
966 */
967 );
968
969}
970
971STARTTEST
972:set cin
973:set cino=
974]]=][
975ENDTEST
976
977{
978 do
979 {
980 if ()
981 {
982 if ()
983 asdf;
984 else
985 asdf;
986 }
987 } while ();
988 cmd; /* this should go under the } */
989}
990
991STARTTEST
992]]=][
993ENDTEST
994
995void f()
996{
997 if ( k() ) {
998 l();
999
1000 } else { /* Start (two words) end */
1001 m();
1002 }
1003
1004 n();
1005}
1006
1007STARTTEST
1008:set cino={s,e-s
1009]]=][
1010ENDTEST
1011
1012void f()
1013{
1014 if ( k() )
1015 {
1016 l();
1017 } else { /* Start (two words) end */
1018 m();
1019 }
1020 n(); /* should be under the if () */
1021}
1022
1023STARTTEST
1024:set cino={s,fs
1025]]=/ foo
1026ENDTEST
1027
1028void bar(void)
1029{
1030 static array[2][2] =
1031 {
1032 { 1, 2 },
1033 { 3, 4 },
1034 }
1035
1036 while (a)
1037 {
1038 foo(&a);
1039 }
1040
1041 {
1042 int a;
1043 {
1044 a = a + 1;
1045 }
1046 }
1047 b = a;
1048 }
1049
1050void func(void)
1051 {
1052 a = 1;
1053 {
1054 b = 2;
1055 }
1056 c = 3;
1057 d = 4;
1058 }
1059/* foo */
1060
1061STARTTEST
1062:set cino=
1063/while
1064ohere
1065ENDTEST
1066
1067a()
1068{
1069 do {
1070 a = a +
1071 a;
1072 } while ( a ); /* add text under this line */
1073 if ( a )
1074 a;
1075}
1076
1077STARTTEST
1078:set cino= com=
1079/comment
1080olabel2: b(); label3 /* post */: /* pre */ label4: f(/*com*/); if (/*com*/) cmd();
1081ENDTEST
1082
1083a()
1084{
1085label1:
1086 /* hmm */
1087 // comment
1088}
1089
1090STARTTEST
1091:set comments& comments^=s:/*,m:**,ex:*/
1092/simple
1093=5j
1094ENDTEST
1095
1096/*
1097 * A simple comment
1098 */
1099
1100/*
1101 ** A different comment
1102 */
1103
1104STARTTEST
1105:set cino=c0
1106:set comments& comments-=s1:/* comments^=s0:/*
11072kdd]]=][
1108ENDTEST
1109
1110void f()
1111{
1112
1113 /*********
1114 A comment.
1115*********/
1116}
1117
1118STARTTEST
1119:set cino=c0,C1
1120:set comments& comments-=s1:/* comments^=s0:/*
11212kdd]]=][
1122ENDTEST
1123
1124void f()
1125{
1126
1127 /*********
1128 A comment.
1129*********/
1130}
1131
1132STARTTEST
1133:set cino=
1134]]=][
1135ENDTEST
1136
1137void f()
1138{
1139 c = c1 &&
1140 (
1141 c2 ||
1142 c3
1143 ) && c4;
1144}
1145
1146STARTTEST
1147:set cino=(s
11482kdd]]=][
1149ENDTEST
1150
1151void f()
1152{
1153 c = c1 &&
1154 (
1155 c2 ||
1156 c3
1157 ) && c4;
1158}
1159
1160STARTTEST
1161:set cino=(s,U1
11622kdd]]=][
1163ENDTEST
1164
1165void f()
1166{
1167 c = c1 &&
1168 (
1169 c2 ||
1170 c3
1171 ) && c4;
1172}
1173
1174STARTTEST
1175:set cino=(0
11762kdd]]=][
1177ENDTEST
1178
1179void f()
1180{
1181 if ( c1
1182 && ( c2
1183 || c3))
1184 foo;
1185}
1186
1187STARTTEST
1188:set cino=(0,w1
11892kdd]]=][
1190ENDTEST
1191
1192void f()
1193{
1194 if ( c1
1195 && ( c2
1196 || c3))
1197 foo;
1198}
1199
1200STARTTEST
1201:set cino=(s
12022kdd]]=][
1203ENDTEST
1204
1205void f()
1206{
1207 c = c1 && (
1208 c2 ||
1209 c3
1210 ) && c4;
1211 if (
1212 c1 && c2
1213 )
1214 foo;
1215}
1216
1217STARTTEST
1218:set cino=(s,m1
12192kdd]]=][
1220ENDTEST
1221
1222void f()
1223{
1224 c = c1 && (
1225 c2 ||
1226 c3
1227 ) && c4;
1228 if (
1229 c1 && c2
1230 )
1231 foo;
1232}
1233
1234STARTTEST
1235:set cino=b1
12362kdd]]=][
1237ENDTEST
1238
1239void f()
1240{
1241 switch (x)
1242 {
1243 case 1:
1244 a = b;
1245 break;
1246 default:
1247 a = 0;
1248 break;
1249 }
1250}
1251
1252STARTTEST
1253:set cino=(0,W5
12542kdd]]=][
1255ENDTEST
1256
1257void f()
1258{
1259 invokeme(
1260 argu,
1261 ment);
1262 invokeme(
1263 argu,
1264 ment
1265 );
1266 invokeme(argu,
1267 ment
1268 );
1269}
1270
1271STARTTEST
1272:set cino=/6
12732kdd]]=][
1274ENDTEST
1275
1276void f()
1277{
1278 statement;
1279 // comment 1
1280 // comment 2
1281}
1282
1283STARTTEST
1284:set cino=
12852kdd]]/comment 1/+1
1286==
1287ENDTEST
1288
1289void f()
1290{
1291 statement;
1292 // comment 1
1293 // comment 2
1294}
1295
1296STARTTEST
1297:set cino=g0
12982kdd]]=][
1299ENDTEST
1300
1301class CAbc
1302{
1303 int Test() { return FALSE; }
1304
1305public: // comment
1306 void testfall();
1307protected:
1308 void testfall();
1309};
1310
1311STARTTEST
Bram Moolenaare79d1532011-10-04 18:03:47 +02001312:set cino=(0,gs,hs
13132kdd]]=][
1314ENDTEST
1315
1316class Foo : public Bar
1317{
1318public:
1319virtual void method1(void) = 0;
1320virtual void method2(int arg1,
1321int arg2,
1322int arg3) = 0;
1323};
1324
1325STARTTEST
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00001326:set cino=+20
13272kdd]]=][
1328ENDTEST
1329
1330 void
1331foo()
1332{
1333 if (a)
1334 {
1335 } else
1336 asdf;
1337}
1338
1339STARTTEST
Bram Moolenaar071d4272004-06-13 20:20:40 +00001340:set cino=(0,W2s
13412kdd]]=][
1342ENDTEST
1343
1344{
1345 averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
1346 asdasdf,
1347 func(asdf,
1348 asdfadsf),
1349 asdfasdf
1350 );
1351
1352 /* those are ugly, but consequent */
1353
1354 func()->asd(asdasdf,
1355 averylongfunctionname(
1356 abc,
1357 dec)->averylongfunctionname(
1358 asdfadsf,
1359 asdfasdf,
1360 asdfasdf,
1361 ),
1362 func(asdfadf,
1363 asdfasdf
1364 ),
1365 asdasdf
1366 );
1367
1368 averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
1369 abc,
1370 dec)->asdfasdfasdf(
1371 asdfadsf,
1372 asdfasdf,
1373 asdfasdf,
1374 ),
1375 func(asdfadf,
1376 asdfasdf),
1377 asdasdf
1378 );
1379}
1380
1381STARTTEST
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00001382:set cino=M1
13832kdd]]=][
1384ENDTEST
1385
1386int main ()
1387{
1388 if (cond1 &&
1389 cond2
1390 )
1391 foo;
1392}
1393
1394STARTTEST
Bram Moolenaar8d2d71d2011-04-28 13:02:09 +02001395:set cino=(0,ts
13962kdd=][
1397ENDTEST
1398
1399void func(int a
1400#if defined(FOO)
1401 , int b
1402 , int c
1403#endif
1404 )
1405{
1406}
1407
1408STARTTEST
1409:set cino=(0
14102kdd=][
1411ENDTEST
1412
1413void
1414func(int a
1415#if defined(FOO)
1416 , int b
1417 , int c
1418#endif
1419 )
1420{
1421}
1422
1423STARTTEST
Bram Moolenaar4ae06c12011-05-10 11:39:19 +02001424:set cino&
Bram Moolenaar496f9512011-05-19 16:35:09 +020014252kdd=4][
Bram Moolenaar4ae06c12011-05-10 11:39:19 +02001426ENDTEST
1427
1428void func(void)
1429{
1430 if(x==y)
1431 if(y==z)
1432 foo=1;
1433 else { bar=1;
1434 baz=2;
1435 }
1436 printf("Foo!\n");
1437}
1438
Bram Moolenaar496f9512011-05-19 16:35:09 +02001439void func1(void)
1440{
1441 char* tab[] = {"foo", "bar",
1442 "baz", "quux",
1443 "this line used", "to be indented incorrectly"};
1444 foo();
1445}
1446
1447void func2(void)
1448{
1449 int tab[] =
1450 {1, 2,
1451 3, 4,
1452 5, 6};
1453
1454 printf("This line used to be indented incorrectly.\n");
1455}
1456
1457void func3(void)
1458{
1459 int tab[] = {
1460 1, 2,
1461 3, 4,
1462 5, 6};
1463
1464printf("Don't you dare indent this line incorrectly!\n);
1465}
1466
Bram Moolenaar4ae06c12011-05-10 11:39:19 +02001467STARTTEST
Bram Moolenaaraede6ce2011-05-10 11:56:30 +02001468:set cino&
Bram Moolenaar50f42ca2011-07-15 14:12:30 +02001469:set cino+=l1
14702kdd=][
1471ENDTEST
1472
1473void func(void)
1474{
1475 int tab[] =
1476 {
1477 1, 2, 3,
1478 4, 5, 6};
1479
1480 printf("Indent this line correctly!\n");
1481
1482 switch (foo)
1483 {
1484 case bar:
1485 printf("bar");
1486 break;
1487 case baz: {
1488 printf("baz");
1489 break;
1490 }
1491 case quux:
1492printf("But don't break the indentation of this instruction\n");
1493break;
1494 }
1495}
1496
1497STARTTEST
1498:set cino&
Bram Moolenaaraede6ce2011-05-10 11:56:30 +020014992kdd=][
1500ENDTEST
1501
1502void func(void)
1503{
1504 cout << "a"
1505 << "b"
1506 << ") :"
1507 << "c";
1508}
1509
1510STARTTEST
Bram Moolenaara4271d52011-05-10 13:38:27 +02001511:set com=s1:/*,m:*,ex:*/
1512]]3jofoo();
1513ENDTEST
1514
1515void func(void)
1516{
1517 /*
1518 * This is a comment.
1519 */
1520}
1521
1522STARTTEST
Bram Moolenaar334adf02011-05-25 13:34:04 +02001523:set cino&
15242kdd=][
1525ENDTEST
1526
1527void func(void)
1528{
1529 for (int i = 0; i < 10; ++i)
1530 if (i & 1) {
1531 foo(1);
1532 } else
1533 foo(0);
1534baz();
1535}
1536
1537STARTTEST
Bram Moolenaared38b0a2011-05-25 15:16:18 +02001538:set cino=N-s
Bram Moolenaar6ec154b2011-06-12 21:51:08 +02001539/^NAMESPACESTART
Bram Moolenaared38b0a2011-05-25 15:16:18 +02001540=/^NAMESPACEEND
1541ENDTEST
1542
Bram Moolenaar6ec154b2011-06-12 21:51:08 +02001543NAMESPACESTART
Bram Moolenaared38b0a2011-05-25 15:16:18 +02001544/* valid namespaces with normal indent */
1545namespace
1546{
1547 {
1548 111111111111;
1549}
1550}
1551namespace /* test */
1552{
1553 11111111111111111;
1554}
1555namespace // test
1556{
1557 111111111111111111;
1558}
1559namespace
1560{
1561 111111111111111111;
1562}
1563namespace test
1564{
1565 111111111111111111;
1566}
1567namespace{
1568 111111111111111111;
1569}
1570namespace test{
1571 111111111111111111;
1572}
1573namespace {
1574 111111111111111111;
1575}
1576namespace test {
1577 111111111111111111;
1578namespace test2 {
1579 22222222222222222;
1580}
1581}
1582
1583/* invalid namespaces use block indent */
1584namespace test test2 {
1585 111111111111111111111;
1586}
1587namespace11111111111 {
1588 111111111111;
1589}
1590namespace() {
1591 1111111111111;
1592}
1593namespace()
1594{
1595 111111111111111111;
1596}
1597namespace test test2
1598{
1599 1111111111111111111;
1600}
1601namespace111111111
1602{
1603 111111111111111111;
1604}
1605NAMESPACEEND
1606
1607
1608STARTTEST
Bram Moolenaar76f7fd32011-07-20 15:09:43 +02001609:set cino=j1,J1
Bram Moolenaar6ec154b2011-06-12 21:51:08 +02001610/^JSSTART
1611=/^JSEND
1612ENDTEST
1613
1614JSSTART
1615var bar = {
1616foo: {
1617that: this,
1618some: ok,
1619},
1620"bar":{
1621a : 2,
1622b: "123abc",
1623x: 4,
1624"y": 5
1625}
1626}
1627JSEND
1628
1629STARTTEST
Bram Moolenaar76f7fd32011-07-20 15:09:43 +02001630:set cino=j1,J1
1631/^JSSTART
1632=/^JSEND
1633ENDTEST
1634
1635JSSTART
1636var foo = [
16371, // indent 8 more
16382,
16393
1640]; // indent 8 less
1641JSEND
1642
1643STARTTEST
1644:set cino=j1,J1
1645/^JSSTART
1646=/^JSEND
1647ENDTEST
1648
1649JSSTART
1650function bar() {
1651var foo = [
16521,
16532,
16543
1655]; // indent 16 less
1656}
1657JSEND
1658
1659STARTTEST
1660:set cino=j1,J1
1661/^JSSTART
1662=/^JSEND
1663ENDTEST
1664
1665JSSTART
1666(function($){
1667
1668var class_name='myclass';
1669
1670function private_method() {
1671}
1672
1673var public_method={
1674method: function(options,args){
1675private_method();
1676}
1677}
1678
1679function init(options) {
1680
1681$(this).data(class_name+'_public',$.extend({},{
1682foo: 'bar',
1683bar: 2, // indent 8 more
1684foobar: [ // indent 8 more
16851, // indent 8 more
16862, // indent 16 more
16873 // indent 16 more
1688],
1689callback: function(){ // indent 8 more
1690return true; // indent 8 more
1691} // indent 8 more
1692}, options||{}));
1693}
1694
1695$.fn[class_name]=function() {
1696
1697var _arguments=arguments;
1698return this.each(function(){
1699
1700var options=$(this).data(class_name+'_public');
1701if (!options) {
1702init.apply(this,_arguments);
1703
1704} else {
1705var method=public_method[_arguments[0]];
1706
1707if (typeof(method)!='function') {
1708console.log(class_name+' has no method "'+_arguments[0]+'"');
1709return false;
1710}
1711_arguments[0]=options;
1712method.apply(this,_arguments);
1713}
1714});
1715}
1716
1717})(jQuery);
1718JSEND
1719
1720STARTTEST
1721:set cino=j1,J1
1722/^JSSTART
1723=/^JSEND
1724ENDTEST
1725
1726JSSTART
1727function init(options) {
1728$(this).data(class_name+'_public',$.extend({},{
1729foo: 'bar',
1730bar: 2,
1731foobar: [
17321, // indent 8 more
17332, // indent 8 more
17343 // indent 8 more
1735],
1736callback: function(){
1737return true;
1738}
1739}, options||{}));
1740}
1741JSEND
1742
1743STARTTEST
1744:set cino=j1,J1
1745/^JSSTART
1746=/^JSEND
1747ENDTEST
1748
1749JSSTART
1750(function($){
1751function init(options) {
1752$(this).data(class_name+'_public',$.extend({},{
1753foo: 'bar',
1754bar: 2, // indent 8 more
1755foobar: [ // indent 8 more
17561, // indent 8 more
17572, // indent 16 more
17583 // indent 16 more
1759],
1760callback: function(){ // indent 8 more
1761return true; // indent 8 more
1762} // indent 8 more
1763}, options||{}));
1764}
1765})(jQuery);
1766JSEND
1767
1768STARTTEST
Bram Moolenaar071d4272004-06-13 20:20:40 +00001769:g/^STARTTEST/.,/^ENDTEST/d
1770:1;/start of AUTO/,$wq! test.out
1771ENDTEST