1" Test for cinoptions and cindent 2" 3 4func Test_cino_hash() 5 " Test that curbuf->b_ind_hash_comment is correctly reset 6 new 7 setlocal cindent cinoptions=#1 8 setlocal cinoptions= 9 call setline(1, ["#include <iostream>"]) 10 call cursor(1, 1) 11 norm! o#include 12 "call feedkeys("o#include\<esc>", 't') 13 call assert_equal(["#include <iostream>", "#include"], getline(1,2)) 14 bwipe! 15endfunc 16 17func Test_cino_extern_c() 18 " Test for cino-E 19 20 let without_ind =<< trim [CODE] 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 int func_a(void); 25 #ifdef __cplusplus 26 } 27 #endif 28 [CODE] 29 30 let with_ind =<< trim [CODE] 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 int func_a(void); 35 #ifdef __cplusplus 36 } 37 #endif 38 [CODE] 39 new 40 setlocal cindent cinoptions=E0 41 call setline(1, without_ind) 42 call feedkeys("gg=G", 'tx') 43 call assert_equal(with_ind, getline(1, '$')) 44 45 setlocal cinoptions=E-s 46 call setline(1, with_ind) 47 call feedkeys("gg=G", 'tx') 48 call assert_equal(without_ind, getline(1, '$')) 49 50 setlocal cinoptions=Es 51 let tests = [ 52 \ ['recognized', ['extern "C" {'], "\t\t;"], 53 \ ['recognized', ['extern "C++" {'], "\t\t;"], 54 \ ['recognized', ['extern /* com */ "C"{'], "\t\t;"], 55 \ ['recognized', ['extern"C"{'], "\t\t;"], 56 \ ['recognized', ['extern "C"', '{'], "\t\t;"], 57 \ ['not recognized', ['extern {'], "\t;"], 58 \ ['not recognized', ['extern /*"C"*/{'], "\t;"], 59 \ ['not recognized', ['extern "C" //{'], ";"], 60 \ ['not recognized', ['extern "C" /*{*/'], ";"], 61 \ ] 62 63 for pair in tests 64 let lines = pair[1] 65 call setline(1, lines) 66 call feedkeys(len(lines) . "Go;", 'tx') 67 call assert_equal(pair[2], getline(len(lines) + 1), 'Failed for "' . string(lines) . '"') 68 endfor 69 70 bwipe! 71endfunc 72 73func Test_cindent_rawstring() 74 new 75 setl cindent 76 call feedkeys("i" . 77 \ "int main() {\<CR>" . 78 \ "R\"(\<CR>" . 79 \ ")\";\<CR>" . 80 \ "statement;\<Esc>", "x") 81 call assert_equal("\tstatement;", getline(line('.'))) 82 bw! 83endfunc 84 85func Test_cindent_expr() 86 new 87 func! MyIndentFunction() 88 return v:lnum == 1 ? shiftwidth() : 0 89 endfunc 90 setl expandtab sw=8 indentkeys+=; indentexpr=MyIndentFunction() 91 let testinput =<< trim [CODE] 92 var_a = something() 93 b = something() 94 [CODE] 95 call setline(1, testinput) 96 call cursor(1, 1) 97 call feedkeys("^\<c-v>j$A;\<esc>", 'tnix') 98 let expected =<< [CODE] 99 var_a = something(); 100b = something(); 101[CODE] 102 call assert_equal(expected, getline(1, '$')) 103 104 %d 105 let testinput =<< [CODE] 106 var_a = something() 107 b = something() 108[CODE] 109 call setline(1, testinput) 110 call cursor(1, 1) 111 call feedkeys("^\<c-v>j$A;\<esc>", 'tnix') 112 let expected =<< [CODE] 113 var_a = something(); 114 b = something() 115[CODE] 116 call assert_equal(expected, getline(1, '$')) 117 bw! 118endfunc 119 120func Test_cindent_func() 121 new 122 setlocal cindent 123 call setline(1, ['int main(void)', '{', 'return 0;', '}']) 124 call assert_equal(-1, cindent(0)) 125 call assert_equal(&sw, 3->cindent()) 126 call assert_equal(-1, cindent(line('$')+1)) 127 bwipe! 128endfunc 129 130func Test_cindent_1() 131 new 132 setl cindent ts=4 sw=4 133 setl cino& sts& 134 135 let code =<< trim [CODE] 136 /* start of AUTO matically checked vim: set ts=4 : */ 137 { 138 if (test) 139 cmd1; 140 cmd2; 141 } 142 143 { 144 if (test) 145 cmd1; 146 else 147 cmd2; 148 } 149 150 { 151 if (test) 152 { 153 cmd1; 154 cmd2; 155 } 156 } 157 158 { 159 if (test) 160 { 161 cmd1; 162 else 163 } 164 } 165 166 { 167 while (this) 168 if (test) 169 cmd1; 170 cmd2; 171 } 172 173 { 174 while (this) 175 if (test) 176 cmd1; 177 else 178 cmd2; 179 } 180 181 { 182 if (test) 183 { 184 cmd; 185 } 186 187 if (test) 188 cmd; 189 } 190 191 { 192 if (test) { 193 cmd; 194 } 195 196 if (test) cmd; 197 } 198 199 { 200 cmd1; 201 for (blah) 202 while (this) 203 if (test) 204 cmd2; 205 cmd3; 206 } 207 208 { 209 cmd1; 210 for (blah) 211 while (this) 212 if (test) 213 cmd2; 214 cmd3; 215 216 if (test) 217 { 218 cmd1; 219 cmd2; 220 cmd3; 221 } 222 } 223 224 225 /* Test for 'cindent' do/while mixed with if/else: */ 226 227 { 228 do 229 if (asdf) 230 asdfasd; 231 while (cond); 232 233 do 234 if (asdf) 235 while (asdf) 236 asdf; 237 while (asdf); 238 } 239 240 /* Test for 'cindent' with two ) on a continuation line */ 241 { 242 if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d 243 aal;sdkjf ( ;asldfkja;sldfk 244 al;sdjfka ;slkdf ) sa;ldkjfsa dlk;) 245 line up here; 246 } 247 248 249 /* C++ tests: */ 250 251 // foo() these three lines should remain in column 0 252 // { 253 // } 254 255 /* Test for continuation and unterminated lines: */ 256 { 257 i = 99 + 14325 + 258 21345 + 259 21345 + 260 21345 + ( 21345 + 261 21345) + 262 2345 + 263 1234; 264 c = 1; 265 } 266 267 /* 268 testje for indent with empty line 269 270 here */ 271 272 { 273 if (testing && 274 not a joke || 275 line up here) 276 hay; 277 if (testing && 278 (not a joke || testing 279 )line up here) 280 hay; 281 if (testing && 282 (not a joke || testing 283 line up here)) 284 hay; 285 } 286 287 288 { 289 switch (c) 290 { 291 case xx: 292 do 293 if (asdf) 294 do 295 asdfasdf; 296 while (asdf); 297 else 298 asdfasdf; 299 while (cond); 300 case yy: 301 case xx: 302 case zz: 303 testing; 304 } 305 } 306 307 { 308 if (cond) { 309 foo; 310 } 311 else 312 { 313 bar; 314 } 315 } 316 317 { 318 if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf 319 alsdkfj (asldk;fj 320 awith cino=(0 ;lf this one goes to below the paren with == 321 ;laksjfd ;lsakdjf ;alskdf asd) 322 asdfasdf;))) 323 asdfasdf; 324 } 325 326 int 327 func(a, b) 328 int a; 329 int c; 330 { 331 if (c1 && (c2 || 332 c3)) 333 foo; 334 if (c1 && 335 (c2 || c3) 336 ) 337 } 338 339 { 340 while (asd) 341 { 342 if (asdf) 343 if (test) 344 if (that) 345 { 346 if (asdf) 347 do 348 cdasd; 349 while (as 350 df); 351 } 352 else 353 if (asdf) 354 asdf; 355 else 356 asdf; 357 asdf; 358 } 359 } 360 361 { 362 s = "/*"; b = ';' 363 s = "/*"; b = ';'; 364 a = b; 365 } 366 367 { 368 switch (a) 369 { 370 case a: 371 switch (t) 372 { 373 case 1: 374 cmd; 375 break; 376 case 2: 377 cmd; 378 break; 379 } 380 cmd; 381 break; 382 case b: 383 { 384 int i; 385 cmd; 386 } 387 break; 388 case c: { 389 int i; 390 cmd; 391 } 392 case d: if (cond && 393 test) { /* this line doesn't work right */ 394 int i; 395 cmd; 396 } 397 break; 398 } 399 } 400 401 { 402 if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) && 403 (bp_to->b_p_initialized || 404 (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL))) 405 return; 406 label : 407 asdf = asdf ? 408 asdf : asdf; 409 asdf = asdf ? 410 asdf: asdf; 411 } 412 413 /* Special Comments : This function has the added complexity (compared */ 414 /* : to addtolist) of having to check for a detail */ 415 /* : texture and add that to the list first. */ 416 417 char *(array[100]) = { 418 "testje", 419 "foo", 420 "bar", 421 } 422 423 enum soppie 424 { 425 yes = 0, 426 no, 427 maybe 428 }; 429 430 typedef enum soppie 431 { 432 yes = 0, 433 no, 434 maybe 435 }; 436 437 static enum 438 { 439 yes = 0, 440 no, 441 maybe 442 } soppie; 443 444 public static enum 445 { 446 yes = 0, 447 no, 448 maybe 449 } soppie; 450 451 static private enum 452 { 453 yes = 0, 454 no, 455 maybe 456 } soppie; 457 458 { 459 int a, 460 b; 461 } 462 463 { 464 struct Type 465 { 466 int i; 467 char *str; 468 } var[] = 469 { 470 0, "zero", 471 1, "one", 472 2, "two", 473 3, "three" 474 }; 475 476 float matrix[3][3] = 477 { 478 { 479 0, 480 1, 481 2 482 }, 483 { 484 3, 485 4, 486 5 487 }, 488 { 489 6, 490 7, 491 8 492 } 493 }; 494 } 495 496 { 497 /* blah ( blah */ 498 /* where does this go? */ 499 500 /* blah ( blah */ 501 cmd; 502 503 func(arg1, 504 /* comment */ 505 arg2); 506 a; 507 { 508 b; 509 { 510 c; /* Hey, NOW it indents?! */ 511 } 512 } 513 514 { 515 func(arg1, 516 arg2, 517 arg3); 518 /* Hey, what am I doing here? Is this coz of the ","? */ 519 } 520 } 521 522 main () 523 { 524 if (cond) 525 { 526 a = b; 527 } 528 if (cond) { 529 a = c; 530 } 531 if (cond) 532 a = d; 533 return; 534 } 535 536 { 537 case 2: if (asdf && 538 asdfasdf) 539 aasdf; 540 a = 9; 541 case 3: if (asdf) 542 aasdf; 543 a = 9; 544 case 4: x = 1; 545 y = 2; 546 547 label: if (asdf) 548 here; 549 550 label: if (asdf && 551 asdfasdf) 552 { 553 } 554 555 label: if (asdf && 556 asdfasdf) { 557 there; 558 } 559 560 label: if (asdf && 561 asdfasdf) 562 there; 563 } 564 565 { 566 /* 567 hello with ":set comments= cino=c5" 568 */ 569 570 /* 571 hello with ":set comments= cino=" 572 */ 573 } 574 575 576 { 577 if (a < b) { 578 a = a + 1; 579 } else 580 a = a + 2; 581 582 if (a) 583 do { 584 testing; 585 } while (asdfasdf); 586 a = b + 1; 587 asdfasdf 588 } 589 590 { 591 for ( int i = 0; 592 i < 10; i++ ) 593 { 594 } 595 i = 0; 596 } 597 598 class bob 599 { 600 int foo() {return 1;} 601 int bar; 602 } 603 604 main() 605 { 606 while(1) 607 if (foo) 608 { 609 bar; 610 } 611 else { 612 asdf; 613 } 614 misplacedline; 615 } 616 617 { 618 if (clipboard.state == SELECT_DONE 619 && ((row == clipboard.start.lnum 620 && col >= clipboard.start.col) 621 || row > clipboard.start.lnum)) 622 } 623 624 { 625 if (1) {i += 4;} 626 where_am_i; 627 return 0; 628 } 629 630 { 631 { 632 } // sdf(asdf 633 if (asdf) 634 asd; 635 } 636 637 { 638 label1: 639 label2: 640 } 641 642 { 643 int fooRet = foo(pBar1, false /*fKB*/, 644 true /*fPTB*/, 3 /*nT*/, false /*fDF*/); 645 f() { 646 for ( i = 0; 647 i < m; 648 /* c */ i++ ) { 649 a = b; 650 } 651 } 652 } 653 654 { 655 f1(/*comment*/); 656 f2(); 657 } 658 659 { 660 do { 661 if (foo) { 662 } else 663 ; 664 } while (foo); 665 foo(); // was wrong 666 } 667 668 int x; // no extra indent because of the ; 669 void func() 670 { 671 } 672 673 char *tab[] = {"aaa", 674 "};", /* }; */ NULL} 675 int indented; 676 {} 677 678 char *a[] = {"aaa", "bbb", 679 "ccc", NULL}; 680 // here 681 682 char *tab[] = {"aaa", 683 "xx", /* xx */}; /* asdf */ 684 int not_indented; 685 686 { 687 do { 688 switch (bla) 689 { 690 case 1: if (foo) 691 bar; 692 } 693 } while (boo); 694 wrong; 695 } 696 697 int foo, 698 bar; 699 int foo; 700 701 #if defined(foo) \ 702 && defined(bar) 703 char * xx = "asdf\ 704 foo\ 705 bor"; 706 int x; 707 708 char *foo = "asdf\ 709 asdf\ 710 asdf", 711 *bar; 712 713 void f() 714 { 715 #if defined(foo) \ 716 && defined(bar) 717 char *foo = "asdf\ 718 asdf\ 719 asdf", 720 *bar; 721 { 722 int i; 723 char *foo = "asdf\ 724 asdf\ 725 asdf", 726 *bar; 727 } 728 #endif 729 } 730 #endif 731 732 int y; // comment 733 // comment 734 735 // comment 736 737 { 738 Constructor(int a, 739 int b ) : BaseClass(a) 740 { 741 } 742 } 743 744 void foo() 745 { 746 char one, 747 two; 748 struct bla piet, 749 jan; 750 enum foo kees, 751 jannie; 752 static unsigned sdf, 753 krap; 754 unsigned int piet, 755 jan; 756 int 757 kees, 758 jan; 759 } 760 761 { 762 t(int f, 763 int d); // ) 764 d(); 765 } 766 767 Constructor::Constructor(int a, 768 int b 769 ) : 770 BaseClass(a, 771 b, 772 c), 773 mMember(b), 774 { 775 } 776 777 Constructor::Constructor(int a, 778 int b ) : 779 BaseClass(a) 780 { 781 } 782 783 Constructor::Constructor(int a, 784 int b ) /*x*/ : /*x*/ BaseClass(a), 785 member(b) 786 { 787 } 788 789 A::A(int a, int b) 790 : aa(a), 791 bb(b), 792 cc(c) 793 { 794 } 795 796 class CAbc : 797 public BaseClass1, 798 protected BaseClass2 799 { 800 int Test() { return FALSE; } 801 int Test1() { return TRUE; } 802 803 CAbc(int a, int b ) : 804 BaseClass(a) 805 { 806 switch(xxx) 807 { 808 case abc: 809 asdf(); 810 break; 811 812 case 999: 813 baer(); 814 break; 815 } 816 } 817 818 public: // <-- this was incorrectly indented before!! 819 void testfall(); 820 protected: 821 void testfall(); 822 }; 823 824 class CAbc : public BaseClass1, 825 protected BaseClass2 826 { 827 }; 828 829 static struct 830 { 831 int a; 832 int b; 833 } variable[COUNT] = 834 { 835 { 836 123, 837 456 838 }, 839 { 840 123, 841 456 842 } 843 }; 844 845 static struct 846 { 847 int a; 848 int b; 849 } variable[COUNT] = 850 { 851 { 123, 456 }, 852 { 123, 456 } 853 }; 854 855 void asdf() /* ind_maxparen may cause trouble here */ 856 { 857 if ((0 858 && 1 859 && 1 860 && 1 861 && 1 862 && 1 863 && 1 864 && 1 865 && 1 866 && 1 867 && 1 868 && 1 869 && 1 870 && 1 871 && 1 872 && 1 873 && 1 874 && 1 875 && 1 876 && 1 877 && 1 878 && 1 879 && 1 880 && 1 881 && 1 882 && 1)) break; 883 } 884 885 foo() 886 { 887 a = cond ? foo() : asdf 888 + asdf; 889 890 a = cond ? 891 foo() : asdf 892 + asdf; 893 } 894 895 int main(void) 896 { 897 if (a) 898 if (b) 899 2; 900 else 3; 901 next_line_of_code(); 902 } 903 904 barry() 905 { 906 Foo::Foo (int one, 907 int two) 908 : something(4) 909 {} 910 } 911 912 barry() 913 { 914 Foo::Foo (int one, int two) 915 : something(4) 916 {} 917 } 918 919 Constructor::Constructor(int a, 920 int b 921 ) : 922 BaseClass(a, 923 b, 924 c), 925 mMember(b) 926 { 927 } 928 int main () 929 { 930 if (lala) 931 do 932 ++(*lolo); 933 while (lili 934 && lele); 935 lulu; 936 } 937 938 int main () 939 { 940 switch (c) 941 { 942 case 'c': if (cond) 943 { 944 } 945 } 946 } 947 948 main() 949 { 950 (void) MyFancyFuasdfadsfnction( 951 argument); 952 } 953 954 main() 955 { 956 char foo[] = "/*"; 957 /* as 958 df */ 959 hello 960 } 961 962 /* valid namespaces with normal indent */ 963 namespace 964 { 965 { 966 111111111111; 967 } 968 } 969 namespace /* test */ 970 { 971 11111111111111111; 972 } 973 namespace // test 974 { 975 111111111111111111; 976 } 977 namespace 978 { 979 111111111111111111; 980 } 981 namespace test 982 { 983 111111111111111111; 984 } 985 namespace{ 986 111111111111111111; 987 } 988 namespace test{ 989 111111111111111111; 990 } 991 namespace { 992 111111111111111111; 993 } 994 namespace test { 995 111111111111111111; 996 namespace test2 { 997 22222222222222222; 998 } 999 } 1000 1001 /* invalid namespaces use block indent */ 1002 namespace test test2 { 1003 111111111111111111111; 1004 } 1005 namespace11111111111 { 1006 111111111111; 1007 } 1008 namespace() { 1009 1111111111111; 1010 } 1011 namespace() 1012 { 1013 111111111111111111; 1014 } 1015 namespace test test2 1016 { 1017 1111111111111111111; 1018 } 1019 namespace111111111 1020 { 1021 111111111111111111; 1022 } 1023 1024 void getstring() { 1025 /* Raw strings */ 1026 const char* s = R"( 1027 test { 1028 # comment 1029 field: 123 1030 } 1031 )"; 1032 } 1033 1034 void getstring() { 1035 const char* s = R"foo( 1036 test { 1037 # comment 1038 field: 123 1039 } 1040 )foo"; 1041 } 1042 1043 { 1044 int a[4] = { 1045 [0] = 0, 1046 [1] = 1, 1047 [2] = 2, 1048 [3] = 3, 1049 }; 1050 } 1051 1052 { 1053 a = b[2] 1054 + 3; 1055 } 1056 1057 { 1058 if (1) 1059 /* aaaaa 1060 * bbbbb 1061 */ 1062 a = 1; 1063 } 1064 1065 void func() 1066 { 1067 switch (foo) 1068 { 1069 case (bar): 1070 if (baz()) 1071 quux(); 1072 break; 1073 case (shmoo): 1074 if (!bar) 1075 { 1076 } 1077 case (foo1): 1078 switch (bar) 1079 { 1080 case baz: 1081 baz_f(); 1082 break; 1083 } 1084 break; 1085 default: 1086 baz(); 1087 baz(); 1088 break; 1089 } 1090 } 1091 1092 /* end of AUTO */ 1093 [CODE] 1094 1095 call append(0, code) 1096 normal gg 1097 call search('start of AUTO') 1098 exe "normal =/end of AUTO\<CR>" 1099 1100 let expected =<< trim [CODE] 1101 /* start of AUTO matically checked vim: set ts=4 : */ 1102 { 1103 if (test) 1104 cmd1; 1105 cmd2; 1106 } 1107 1108 { 1109 if (test) 1110 cmd1; 1111 else 1112 cmd2; 1113 } 1114 1115 { 1116 if (test) 1117 { 1118 cmd1; 1119 cmd2; 1120 } 1121 } 1122 1123 { 1124 if (test) 1125 { 1126 cmd1; 1127 else 1128 } 1129 } 1130 1131 { 1132 while (this) 1133 if (test) 1134 cmd1; 1135 cmd2; 1136 } 1137 1138 { 1139 while (this) 1140 if (test) 1141 cmd1; 1142 else 1143 cmd2; 1144 } 1145 1146 { 1147 if (test) 1148 { 1149 cmd; 1150 } 1151 1152 if (test) 1153 cmd; 1154 } 1155 1156 { 1157 if (test) { 1158 cmd; 1159 } 1160 1161 if (test) cmd; 1162 } 1163 1164 { 1165 cmd1; 1166 for (blah) 1167 while (this) 1168 if (test) 1169 cmd2; 1170 cmd3; 1171 } 1172 1173 { 1174 cmd1; 1175 for (blah) 1176 while (this) 1177 if (test) 1178 cmd2; 1179 cmd3; 1180 1181 if (test) 1182 { 1183 cmd1; 1184 cmd2; 1185 cmd3; 1186 } 1187 } 1188 1189 1190 /* Test for 'cindent' do/while mixed with if/else: */ 1191 1192 { 1193 do 1194 if (asdf) 1195 asdfasd; 1196 while (cond); 1197 1198 do 1199 if (asdf) 1200 while (asdf) 1201 asdf; 1202 while (asdf); 1203 } 1204 1205 /* Test for 'cindent' with two ) on a continuation line */ 1206 { 1207 if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d 1208 aal;sdkjf ( ;asldfkja;sldfk 1209 al;sdjfka ;slkdf ) sa;ldkjfsa dlk;) 1210 line up here; 1211 } 1212 1213 1214 /* C++ tests: */ 1215 1216 // foo() these three lines should remain in column 0 1217 // { 1218 // } 1219 1220 /* Test for continuation and unterminated lines: */ 1221 { 1222 i = 99 + 14325 + 1223 21345 + 1224 21345 + 1225 21345 + ( 21345 + 1226 21345) + 1227 2345 + 1228 1234; 1229 c = 1; 1230 } 1231 1232 /* 1233 testje for indent with empty line 1234 1235 here */ 1236 1237 { 1238 if (testing && 1239 not a joke || 1240 line up here) 1241 hay; 1242 if (testing && 1243 (not a joke || testing 1244 )line up here) 1245 hay; 1246 if (testing && 1247 (not a joke || testing 1248 line up here)) 1249 hay; 1250 } 1251 1252 1253 { 1254 switch (c) 1255 { 1256 case xx: 1257 do 1258 if (asdf) 1259 do 1260 asdfasdf; 1261 while (asdf); 1262 else 1263 asdfasdf; 1264 while (cond); 1265 case yy: 1266 case xx: 1267 case zz: 1268 testing; 1269 } 1270 } 1271 1272 { 1273 if (cond) { 1274 foo; 1275 } 1276 else 1277 { 1278 bar; 1279 } 1280 } 1281 1282 { 1283 if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf 1284 alsdkfj (asldk;fj 1285 awith cino=(0 ;lf this one goes to below the paren with == 1286 ;laksjfd ;lsakdjf ;alskdf asd) 1287 asdfasdf;))) 1288 asdfasdf; 1289 } 1290 1291 int 1292 func(a, b) 1293 int a; 1294 int c; 1295 { 1296 if (c1 && (c2 || 1297 c3)) 1298 foo; 1299 if (c1 && 1300 (c2 || c3) 1301 ) 1302 } 1303 1304 { 1305 while (asd) 1306 { 1307 if (asdf) 1308 if (test) 1309 if (that) 1310 { 1311 if (asdf) 1312 do 1313 cdasd; 1314 while (as 1315 df); 1316 } 1317 else 1318 if (asdf) 1319 asdf; 1320 else 1321 asdf; 1322 asdf; 1323 } 1324 } 1325 1326 { 1327 s = "/*"; b = ';' 1328 s = "/*"; b = ';'; 1329 a = b; 1330 } 1331 1332 { 1333 switch (a) 1334 { 1335 case a: 1336 switch (t) 1337 { 1338 case 1: 1339 cmd; 1340 break; 1341 case 2: 1342 cmd; 1343 break; 1344 } 1345 cmd; 1346 break; 1347 case b: 1348 { 1349 int i; 1350 cmd; 1351 } 1352 break; 1353 case c: { 1354 int i; 1355 cmd; 1356 } 1357 case d: if (cond && 1358 test) { /* this line doesn't work right */ 1359 int i; 1360 cmd; 1361 } 1362 break; 1363 } 1364 } 1365 1366 { 1367 if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) && 1368 (bp_to->b_p_initialized || 1369 (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL))) 1370 return; 1371 label : 1372 asdf = asdf ? 1373 asdf : asdf; 1374 asdf = asdf ? 1375 asdf: asdf; 1376 } 1377 1378 /* Special Comments : This function has the added complexity (compared */ 1379 /* : to addtolist) of having to check for a detail */ 1380 /* : texture and add that to the list first. */ 1381 1382 char *(array[100]) = { 1383 "testje", 1384 "foo", 1385 "bar", 1386 } 1387 1388 enum soppie 1389 { 1390 yes = 0, 1391 no, 1392 maybe 1393 }; 1394 1395 typedef enum soppie 1396 { 1397 yes = 0, 1398 no, 1399 maybe 1400 }; 1401 1402 static enum 1403 { 1404 yes = 0, 1405 no, 1406 maybe 1407 } soppie; 1408 1409 public static enum 1410 { 1411 yes = 0, 1412 no, 1413 maybe 1414 } soppie; 1415 1416 static private enum 1417 { 1418 yes = 0, 1419 no, 1420 maybe 1421 } soppie; 1422 1423 { 1424 int a, 1425 b; 1426 } 1427 1428 { 1429 struct Type 1430 { 1431 int i; 1432 char *str; 1433 } var[] = 1434 { 1435 0, "zero", 1436 1, "one", 1437 2, "two", 1438 3, "three" 1439 }; 1440 1441 float matrix[3][3] = 1442 { 1443 { 1444 0, 1445 1, 1446 2 1447 }, 1448 { 1449 3, 1450 4, 1451 5 1452 }, 1453 { 1454 6, 1455 7, 1456 8 1457 } 1458 }; 1459 } 1460 1461 { 1462 /* blah ( blah */ 1463 /* where does this go? */ 1464 1465 /* blah ( blah */ 1466 cmd; 1467 1468 func(arg1, 1469 /* comment */ 1470 arg2); 1471 a; 1472 { 1473 b; 1474 { 1475 c; /* Hey, NOW it indents?! */ 1476 } 1477 } 1478 1479 { 1480 func(arg1, 1481 arg2, 1482 arg3); 1483 /* Hey, what am I doing here? Is this coz of the ","? */ 1484 } 1485 } 1486 1487 main () 1488 { 1489 if (cond) 1490 { 1491 a = b; 1492 } 1493 if (cond) { 1494 a = c; 1495 } 1496 if (cond) 1497 a = d; 1498 return; 1499 } 1500 1501 { 1502 case 2: if (asdf && 1503 asdfasdf) 1504 aasdf; 1505 a = 9; 1506 case 3: if (asdf) 1507 aasdf; 1508 a = 9; 1509 case 4: x = 1; 1510 y = 2; 1511 1512 label: if (asdf) 1513 here; 1514 1515 label: if (asdf && 1516 asdfasdf) 1517 { 1518 } 1519 1520 label: if (asdf && 1521 asdfasdf) { 1522 there; 1523 } 1524 1525 label: if (asdf && 1526 asdfasdf) 1527 there; 1528 } 1529 1530 { 1531 /* 1532 hello with ":set comments= cino=c5" 1533 */ 1534 1535 /* 1536 hello with ":set comments= cino=" 1537 */ 1538 } 1539 1540 1541 { 1542 if (a < b) { 1543 a = a + 1; 1544 } else 1545 a = a + 2; 1546 1547 if (a) 1548 do { 1549 testing; 1550 } while (asdfasdf); 1551 a = b + 1; 1552 asdfasdf 1553 } 1554 1555 { 1556 for ( int i = 0; 1557 i < 10; i++ ) 1558 { 1559 } 1560 i = 0; 1561 } 1562 1563 class bob 1564 { 1565 int foo() {return 1;} 1566 int bar; 1567 } 1568 1569 main() 1570 { 1571 while(1) 1572 if (foo) 1573 { 1574 bar; 1575 } 1576 else { 1577 asdf; 1578 } 1579 misplacedline; 1580 } 1581 1582 { 1583 if (clipboard.state == SELECT_DONE 1584 && ((row == clipboard.start.lnum 1585 && col >= clipboard.start.col) 1586 || row > clipboard.start.lnum)) 1587 } 1588 1589 { 1590 if (1) {i += 4;} 1591 where_am_i; 1592 return 0; 1593 } 1594 1595 { 1596 { 1597 } // sdf(asdf 1598 if (asdf) 1599 asd; 1600 } 1601 1602 { 1603 label1: 1604 label2: 1605 } 1606 1607 { 1608 int fooRet = foo(pBar1, false /*fKB*/, 1609 true /*fPTB*/, 3 /*nT*/, false /*fDF*/); 1610 f() { 1611 for ( i = 0; 1612 i < m; 1613 /* c */ i++ ) { 1614 a = b; 1615 } 1616 } 1617 } 1618 1619 { 1620 f1(/*comment*/); 1621 f2(); 1622 } 1623 1624 { 1625 do { 1626 if (foo) { 1627 } else 1628 ; 1629 } while (foo); 1630 foo(); // was wrong 1631 } 1632 1633 int x; // no extra indent because of the ; 1634 void func() 1635 { 1636 } 1637 1638 char *tab[] = {"aaa", 1639 "};", /* }; */ NULL} 1640 int indented; 1641 {} 1642 1643 char *a[] = {"aaa", "bbb", 1644 "ccc", NULL}; 1645 // here 1646 1647 char *tab[] = {"aaa", 1648 "xx", /* xx */}; /* asdf */ 1649 int not_indented; 1650 1651 { 1652 do { 1653 switch (bla) 1654 { 1655 case 1: if (foo) 1656 bar; 1657 } 1658 } while (boo); 1659 wrong; 1660 } 1661 1662 int foo, 1663 bar; 1664 int foo; 1665 1666 #if defined(foo) \ 1667 && defined(bar) 1668 char * xx = "asdf\ 1669 foo\ 1670 bor"; 1671 int x; 1672 1673 char *foo = "asdf\ 1674 asdf\ 1675 asdf", 1676 *bar; 1677 1678 void f() 1679 { 1680 #if defined(foo) \ 1681 && defined(bar) 1682 char *foo = "asdf\ 1683 asdf\ 1684 asdf", 1685 *bar; 1686 { 1687 int i; 1688 char *foo = "asdf\ 1689 asdf\ 1690 asdf", 1691 *bar; 1692 } 1693 #endif 1694 } 1695 #endif 1696 1697 int y; // comment 1698 // comment 1699 1700 // comment 1701 1702 { 1703 Constructor(int a, 1704 int b ) : BaseClass(a) 1705 { 1706 } 1707 } 1708 1709 void foo() 1710 { 1711 char one, 1712 two; 1713 struct bla piet, 1714 jan; 1715 enum foo kees, 1716 jannie; 1717 static unsigned sdf, 1718 krap; 1719 unsigned int piet, 1720 jan; 1721 int 1722 kees, 1723 jan; 1724 } 1725 1726 { 1727 t(int f, 1728 int d); // ) 1729 d(); 1730 } 1731 1732 Constructor::Constructor(int a, 1733 int b 1734 ) : 1735 BaseClass(a, 1736 b, 1737 c), 1738 mMember(b), 1739 { 1740 } 1741 1742 Constructor::Constructor(int a, 1743 int b ) : 1744 BaseClass(a) 1745 { 1746 } 1747 1748 Constructor::Constructor(int a, 1749 int b ) /*x*/ : /*x*/ BaseClass(a), 1750 member(b) 1751 { 1752 } 1753 1754 A::A(int a, int b) 1755 : aa(a), 1756 bb(b), 1757 cc(c) 1758 { 1759 } 1760 1761 class CAbc : 1762 public BaseClass1, 1763 protected BaseClass2 1764 { 1765 int Test() { return FALSE; } 1766 int Test1() { return TRUE; } 1767 1768 CAbc(int a, int b ) : 1769 BaseClass(a) 1770 { 1771 switch(xxx) 1772 { 1773 case abc: 1774 asdf(); 1775 break; 1776 1777 case 999: 1778 baer(); 1779 break; 1780 } 1781 } 1782 1783 public: // <-- this was incorrectly indented before!! 1784 void testfall(); 1785 protected: 1786 void testfall(); 1787 }; 1788 1789 class CAbc : public BaseClass1, 1790 protected BaseClass2 1791 { 1792 }; 1793 1794 static struct 1795 { 1796 int a; 1797 int b; 1798 } variable[COUNT] = 1799 { 1800 { 1801 123, 1802 456 1803 }, 1804 { 1805 123, 1806 456 1807 } 1808 }; 1809 1810 static struct 1811 { 1812 int a; 1813 int b; 1814 } variable[COUNT] = 1815 { 1816 { 123, 456 }, 1817 { 123, 456 } 1818 }; 1819 1820 void asdf() /* ind_maxparen may cause trouble here */ 1821 { 1822 if ((0 1823 && 1 1824 && 1 1825 && 1 1826 && 1 1827 && 1 1828 && 1 1829 && 1 1830 && 1 1831 && 1 1832 && 1 1833 && 1 1834 && 1 1835 && 1 1836 && 1 1837 && 1 1838 && 1 1839 && 1 1840 && 1 1841 && 1 1842 && 1 1843 && 1 1844 && 1 1845 && 1 1846 && 1 1847 && 1)) break; 1848 } 1849 1850 foo() 1851 { 1852 a = cond ? foo() : asdf 1853 + asdf; 1854 1855 a = cond ? 1856 foo() : asdf 1857 + asdf; 1858 } 1859 1860 int main(void) 1861 { 1862 if (a) 1863 if (b) 1864 2; 1865 else 3; 1866 next_line_of_code(); 1867 } 1868 1869 barry() 1870 { 1871 Foo::Foo (int one, 1872 int two) 1873 : something(4) 1874 {} 1875 } 1876 1877 barry() 1878 { 1879 Foo::Foo (int one, int two) 1880 : something(4) 1881 {} 1882 } 1883 1884 Constructor::Constructor(int a, 1885 int b 1886 ) : 1887 BaseClass(a, 1888 b, 1889 c), 1890 mMember(b) 1891 { 1892 } 1893 int main () 1894 { 1895 if (lala) 1896 do 1897 ++(*lolo); 1898 while (lili 1899 && lele); 1900 lulu; 1901 } 1902 1903 int main () 1904 { 1905 switch (c) 1906 { 1907 case 'c': if (cond) 1908 { 1909 } 1910 } 1911 } 1912 1913 main() 1914 { 1915 (void) MyFancyFuasdfadsfnction( 1916 argument); 1917 } 1918 1919 main() 1920 { 1921 char foo[] = "/*"; 1922 /* as 1923 df */ 1924 hello 1925 } 1926 1927 /* valid namespaces with normal indent */ 1928 namespace 1929 { 1930 { 1931 111111111111; 1932 } 1933 } 1934 namespace /* test */ 1935 { 1936 11111111111111111; 1937 } 1938 namespace // test 1939 { 1940 111111111111111111; 1941 } 1942 namespace 1943 { 1944 111111111111111111; 1945 } 1946 namespace test 1947 { 1948 111111111111111111; 1949 } 1950 namespace{ 1951 111111111111111111; 1952 } 1953 namespace test{ 1954 111111111111111111; 1955 } 1956 namespace { 1957 111111111111111111; 1958 } 1959 namespace test { 1960 111111111111111111; 1961 namespace test2 { 1962 22222222222222222; 1963 } 1964 } 1965 1966 /* invalid namespaces use block indent */ 1967 namespace test test2 { 1968 111111111111111111111; 1969 } 1970 namespace11111111111 { 1971 111111111111; 1972 } 1973 namespace() { 1974 1111111111111; 1975 } 1976 namespace() 1977 { 1978 111111111111111111; 1979 } 1980 namespace test test2 1981 { 1982 1111111111111111111; 1983 } 1984 namespace111111111 1985 { 1986 111111111111111111; 1987 } 1988 1989 void getstring() { 1990 /* Raw strings */ 1991 const char* s = R"( 1992 test { 1993 # comment 1994 field: 123 1995 } 1996 )"; 1997 } 1998 1999 void getstring() { 2000 const char* s = R"foo( 2001 test { 2002 # comment 2003 field: 123 2004 } 2005 )foo"; 2006 } 2007 2008 { 2009 int a[4] = { 2010 [0] = 0, 2011 [1] = 1, 2012 [2] = 2, 2013 [3] = 3, 2014 }; 2015 } 2016 2017 { 2018 a = b[2] 2019 + 3; 2020 } 2021 2022 { 2023 if (1) 2024 /* aaaaa 2025 * bbbbb 2026 */ 2027 a = 1; 2028 } 2029 2030 void func() 2031 { 2032 switch (foo) 2033 { 2034 case (bar): 2035 if (baz()) 2036 quux(); 2037 break; 2038 case (shmoo): 2039 if (!bar) 2040 { 2041 } 2042 case (foo1): 2043 switch (bar) 2044 { 2045 case baz: 2046 baz_f(); 2047 break; 2048 } 2049 break; 2050 default: 2051 baz(); 2052 baz(); 2053 break; 2054 } 2055 } 2056 2057 /* end of AUTO */ 2058 2059 [CODE] 2060 2061 call assert_equal(expected, getline(1, '$')) 2062 enew! | close 2063endfunc 2064 2065func Test_cindent_2() 2066 new 2067 setl cindent ts=4 sw=4 2068 setl tw=0 noai fo=croq 2069 let &wm = &columns - 20 2070 2071 let code =<< trim [CODE] 2072 { 2073 2074 /* this is 2075 * a real serious important big 2076 * comment 2077 */ 2078 /* insert " about life, the universe, and the rest" after "serious" */ 2079 } 2080 [CODE] 2081 2082 call append(0, code) 2083 normal gg 2084 call search('serious', 'e') 2085 normal a about life, the universe, and the rest 2086 2087 let expected =<< trim [CODE] 2088 { 2089 2090 /* this is 2091 * a real serious 2092 * about life, the 2093 * universe, and the 2094 * rest important big 2095 * comment 2096 */ 2097 /* insert " about life, the universe, and the rest" after "serious" */ 2098 } 2099 2100 [CODE] 2101 2102 call assert_equal(expected, getline(1, '$')) 2103 set wm& 2104 enew! | close 2105endfunc 2106 2107func Test_cindent_3() 2108 new 2109 setl nocindent ts=4 sw=4 2110 2111 let code =<< trim [CODE] 2112 { 2113 /* 2114 * Testing for comments, without 'cin' set 2115 */ 2116 2117 /* 2118 * what happens here? 2119 */ 2120 2121 /* 2122 the end of the comment, try inserting a line below */ 2123 2124 /* how about 2125 this one */ 2126 } 2127 [CODE] 2128 2129 call append(0, code) 2130 normal gg 2131 call search('comments') 2132 normal joabout life 2133 call search('happens') 2134 normal jothere 2135 call search('below') 2136 normal oline 2137 call search('this') 2138 normal Ohello 2139 2140 let expected =<< trim [CODE] 2141 { 2142 /* 2143 * Testing for comments, without 'cin' set 2144 */ 2145 about life 2146 2147 /* 2148 * what happens here? 2149 */ 2150 there 2151 2152 /* 2153 the end of the comment, try inserting a line below */ 2154 line 2155 2156 /* how about 2157 hello 2158 this one */ 2159 } 2160 2161 [CODE] 2162 2163 call assert_equal(expected, getline(1, '$')) 2164 enew! | close 2165endfunc 2166 2167func Test_cindent_4() 2168 new 2169 setl cindent ts=4 sw=4 2170 2171 let code =<< trim [CODE] 2172 { 2173 var = this + that + vec[0] * vec[0] 2174 + vec[1] * vec[1] 2175 + vec2[2] * vec[2]; 2176 } 2177 [CODE] 2178 2179 call append(0, code) 2180 normal gg 2181 call search('vec2') 2182 normal == 2183 2184 let expected =<< trim [CODE] 2185 { 2186 var = this + that + vec[0] * vec[0] 2187 + vec[1] * vec[1] 2188 + vec2[2] * vec[2]; 2189 } 2190 2191 [CODE] 2192 2193 call assert_equal(expected, getline(1, '$')) 2194 enew! | close 2195endfunc 2196 2197func Test_cindent_5() 2198 new 2199 setl cindent ts=4 sw=4 2200 setl cino=}4 2201 2202 let code =<< trim [CODE] 2203 { 2204 asdf asdflkajds f; 2205 if (tes & ting) { 2206 asdf asdf asdf ; 2207 asdfa sdf asdf; 2208 } 2209 testing1; 2210 if (tes & ting) 2211 { 2212 asdf asdf asdf ; 2213 asdfa sdf asdf; 2214 } 2215 testing2; 2216 } 2217 [CODE] 2218 2219 call append(0, code) 2220 normal gg 2221 call search('testing1') 2222 exe "normal k2==/testing2\<CR>" 2223 normal k2== 2224 2225 let expected =<< trim [CODE] 2226 { 2227 asdf asdflkajds f; 2228 if (tes & ting) { 2229 asdf asdf asdf ; 2230 asdfa sdf asdf; 2231 } 2232 testing1; 2233 if (tes & ting) 2234 { 2235 asdf asdf asdf ; 2236 asdfa sdf asdf; 2237 } 2238 testing2; 2239 } 2240 2241 [CODE] 2242 2243 call assert_equal(expected, getline(1, '$')) 2244 enew! | close 2245endfunc 2246 2247func Test_cindent_6() 2248 new 2249 setl cindent ts=4 sw=4 2250 setl cino=(0,)20 2251 2252 let code =<< trim [CODE] 2253 main ( int first_par, /* 2254 * Comment for 2255 * first par 2256 */ 2257 int second_par /* 2258 * Comment for 2259 * second par 2260 */ 2261 ) 2262 { 2263 func( first_par, /* 2264 * Comment for 2265 * first par 2266 */ 2267 second_par /* 2268 * Comment for 2269 * second par 2270 */ 2271 ); 2272 2273 } 2274 [CODE] 2275 2276 call append(0, code) 2277 normal gg 2278 call search('main') 2279 normal =][ 2280 2281 let expected =<< trim [CODE] 2282 main ( int first_par, /* 2283 * Comment for 2284 * first par 2285 */ 2286 int second_par /* 2287 * Comment for 2288 * second par 2289 */ 2290 ) 2291 { 2292 func( first_par, /* 2293 * Comment for 2294 * first par 2295 */ 2296 second_par /* 2297 * Comment for 2298 * second par 2299 */ 2300 ); 2301 2302 } 2303 2304 [CODE] 2305 2306 call assert_equal(expected, getline(1, '$')) 2307 enew! | close 2308endfunc 2309 2310func Test_cindent_7() 2311 new 2312 setl cindent ts=4 sw=4 2313 setl cino=es,n0s 2314 2315 let code =<< trim [CODE] 2316 main(void) 2317 { 2318 /* Make sure that cino=X0s is not parsed like cino=Xs. */ 2319 if (cond) 2320 foo(); 2321 else 2322 { 2323 bar(); 2324 } 2325 } 2326 [CODE] 2327 2328 call append(0, code) 2329 normal gg 2330 call search('main') 2331 normal =][ 2332 2333 let expected =<< trim [CODE] 2334 main(void) 2335 { 2336 /* Make sure that cino=X0s is not parsed like cino=Xs. */ 2337 if (cond) 2338 foo(); 2339 else 2340 { 2341 bar(); 2342 } 2343 } 2344 2345 [CODE] 2346 2347 call assert_equal(expected, getline(1, '$')) 2348 enew! | close 2349endfunc 2350 2351func Test_cindent_8() 2352 new 2353 setl cindent ts=4 sw=4 2354 setl cino= 2355 2356 let code =<< trim [CODE] 2357 2358 { 2359 do 2360 { 2361 if () 2362 { 2363 if () 2364 asdf; 2365 else 2366 asdf; 2367 } 2368 } while (); 2369 cmd; /* this should go under the } */ 2370 } 2371 [CODE] 2372 2373 call append(0, code) 2374 normal gg 2375 normal ]]=][ 2376 2377 let expected =<< trim [CODE] 2378 2379 { 2380 do 2381 { 2382 if () 2383 { 2384 if () 2385 asdf; 2386 else 2387 asdf; 2388 } 2389 } while (); 2390 cmd; /* this should go under the } */ 2391 } 2392 2393 [CODE] 2394 2395 call assert_equal(expected, getline(1, '$')) 2396 enew! | close 2397endfunc 2398 2399func Test_cindent_9() 2400 new 2401 setl cindent ts=4 sw=4 2402 2403 let code =<< trim [CODE] 2404 2405 void f() 2406 { 2407 if ( k() ) { 2408 l(); 2409 2410 } else { /* Start (two words) end */ 2411 m(); 2412 } 2413 2414 n(); 2415 } 2416 [CODE] 2417 2418 call append(0, code) 2419 normal gg 2420 normal ]]=][ 2421 2422 let expected =<< trim [CODE] 2423 2424 void f() 2425 { 2426 if ( k() ) { 2427 l(); 2428 2429 } else { /* Start (two words) end */ 2430 m(); 2431 } 2432 2433 n(); 2434 } 2435 2436 [CODE] 2437 2438 call assert_equal(expected, getline(1, '$')) 2439 enew! | close 2440endfunc 2441 2442func Test_cindent_10() 2443 new 2444 setl cindent ts=4 sw=4 2445 setl cino={s,e-s 2446 2447 let code =<< trim [CODE] 2448 2449 void f() 2450 { 2451 if ( k() ) 2452 { 2453 l(); 2454 } else { /* Start (two words) end */ 2455 m(); 2456 } 2457 n(); /* should be under the if () */ 2458 } 2459 [CODE] 2460 2461 call append(0, code) 2462 normal gg 2463 normal ]]=][ 2464 2465 let expected =<< trim [CODE] 2466 2467 void f() 2468 { 2469 if ( k() ) 2470 { 2471 l(); 2472 } else { /* Start (two words) end */ 2473 m(); 2474 } 2475 n(); /* should be under the if () */ 2476 } 2477 2478 [CODE] 2479 2480 call assert_equal(expected, getline(1, '$')) 2481 enew! | close 2482endfunc 2483 2484func Test_cindent_11() 2485 new 2486 setl cindent ts=4 sw=4 2487 setl cino={s,fs 2488 2489 let code =<< trim [CODE] 2490 void bar(void) 2491 { 2492 static array[2][2] = 2493 { 2494 { 1, 2 }, 2495 { 3, 4 }, 2496 } 2497 2498 while (a) 2499 { 2500 foo(&a); 2501 } 2502 2503 { 2504 int a; 2505 { 2506 a = a + 1; 2507 } 2508 } 2509 b = a; 2510 } 2511 2512 void func(void) 2513 { 2514 a = 1; 2515 { 2516 b = 2; 2517 } 2518 c = 3; 2519 d = 4; 2520 } 2521 /* foo */ 2522 [CODE] 2523 2524 call append(0, code) 2525 normal gg 2526 exe "normal ]]=/ foo\<CR>" 2527 2528 let expected =<< trim [CODE] 2529 void bar(void) 2530 { 2531 static array[2][2] = 2532 { 2533 { 1, 2 }, 2534 { 3, 4 }, 2535 } 2536 2537 while (a) 2538 { 2539 foo(&a); 2540 } 2541 2542 { 2543 int a; 2544 { 2545 a = a + 1; 2546 } 2547 } 2548 b = a; 2549 } 2550 2551 void func(void) 2552 { 2553 a = 1; 2554 { 2555 b = 2; 2556 } 2557 c = 3; 2558 d = 4; 2559 } 2560 /* foo */ 2561 2562 [CODE] 2563 2564 call assert_equal(expected, getline(1, '$')) 2565 enew! | close 2566endfunc 2567 2568func Test_cindent_12() 2569 new 2570 setl cindent ts=4 sw=4 2571 setl cino= 2572 2573 let code =<< trim [CODE] 2574 a() 2575 { 2576 do { 2577 a = a + 2578 a; 2579 } while ( a ); /* add text under this line */ 2580 if ( a ) 2581 a; 2582 } 2583 [CODE] 2584 2585 call append(0, code) 2586 normal gg 2587 call search('while') 2588 normal ohere 2589 2590 let expected =<< trim [CODE] 2591 a() 2592 { 2593 do { 2594 a = a + 2595 a; 2596 } while ( a ); /* add text under this line */ 2597 here 2598 if ( a ) 2599 a; 2600 } 2601 2602 [CODE] 2603 2604 call assert_equal(expected, getline(1, '$')) 2605 enew! | close 2606endfunc 2607 2608func Test_cindent_13() 2609 new 2610 setl cindent ts=4 sw=4 2611 setl cino= com= 2612 2613 let code =<< trim [CODE] 2614 a() 2615 { 2616 label1: 2617 /* hmm */ 2618 // comment 2619 } 2620 [CODE] 2621 2622 call append(0, code) 2623 normal gg 2624 call search('comment') 2625 exe "normal olabel2: b();\rlabel3 /* post */:\r/* pre */ label4:\r" . 2626 \ "f(/*com*/);\rif (/*com*/)\rcmd();" 2627 2628 let expected =<< trim [CODE] 2629 a() 2630 { 2631 label1: 2632 /* hmm */ 2633 // comment 2634 label2: b(); 2635 label3 /* post */: 2636 /* pre */ label4: 2637 f(/*com*/); 2638 if (/*com*/) 2639 cmd(); 2640 } 2641 2642 [CODE] 2643 2644 call assert_equal(expected, getline(1, '$')) 2645 enew! | close 2646endfunc 2647 2648func Test_cindent_14() 2649 new 2650 setl cindent ts=4 sw=4 2651 setl comments& comments^=s:/*,m:**,ex:*/ 2652 2653 let code =<< trim [CODE] 2654 /* 2655 * A simple comment 2656 */ 2657 2658 /* 2659 ** A different comment 2660 */ 2661 [CODE] 2662 2663 call append(0, code) 2664 normal gg 2665 call search('simple') 2666 normal =5j 2667 2668 let expected =<< trim [CODE] 2669 /* 2670 * A simple comment 2671 */ 2672 2673 /* 2674 ** A different comment 2675 */ 2676 2677 [CODE] 2678 2679 call assert_equal(expected, getline(1, '$')) 2680 enew! | close 2681endfunc 2682 2683func Test_cindent_15() 2684 new 2685 setl cindent ts=4 sw=4 2686 setl cino=c0 2687 setl comments& comments-=s1:/* comments^=s0:/* 2688 2689 let code =<< trim [CODE] 2690 void f() 2691 { 2692 2693 /********* 2694 A comment. 2695 *********/ 2696 } 2697 [CODE] 2698 2699 call append(0, code) 2700 normal gg 2701 normal ]]=][ 2702 2703 let expected =<< trim [CODE] 2704 void f() 2705 { 2706 2707 /********* 2708 A comment. 2709 *********/ 2710 } 2711 2712 [CODE] 2713 2714 call assert_equal(expected, getline(1, '$')) 2715 enew! | close 2716endfunc 2717 2718func Test_cindent_16() 2719 new 2720 setl cindent ts=4 sw=4 2721 setl cino=c0,C1 2722 setl comments& comments-=s1:/* comments^=s0:/* 2723 2724 let code =<< trim [CODE] 2725 void f() 2726 { 2727 2728 /********* 2729 A comment. 2730 *********/ 2731 } 2732 [CODE] 2733 2734 call append(0, code) 2735 normal gg 2736 normal ]]=][ 2737 2738 let expected =<< trim [CODE] 2739 void f() 2740 { 2741 2742 /********* 2743 A comment. 2744 *********/ 2745 } 2746 2747 [CODE] 2748 2749 call assert_equal(expected, getline(1, '$')) 2750 enew! | close 2751endfunc 2752 2753func Test_cindent_17() 2754 new 2755 setl cindent ts=4 sw=4 2756 setl cino= 2757 2758 let code =<< trim [CODE] 2759 void f() 2760 { 2761 c = c1 && 2762 ( 2763 c2 || 2764 c3 2765 ) && c4; 2766 } 2767 [CODE] 2768 2769 call append(0, code) 2770 normal gg 2771 normal ]]=][ 2772 2773 let expected =<< trim [CODE] 2774 void f() 2775 { 2776 c = c1 && 2777 ( 2778 c2 || 2779 c3 2780 ) && c4; 2781 } 2782 2783 [CODE] 2784 2785 call assert_equal(expected, getline(1, '$')) 2786 enew! | close 2787endfunc 2788 2789func Test_cindent_18() 2790 new 2791 setl cindent ts=4 sw=4 2792 setl cino=(s 2793 2794 let code =<< trim [CODE] 2795 void f() 2796 { 2797 c = c1 && 2798 ( 2799 c2 || 2800 c3 2801 ) && c4; 2802 } 2803 [CODE] 2804 2805 call append(0, code) 2806 normal gg 2807 normal ]]=][ 2808 2809 let expected =<< trim [CODE] 2810 void f() 2811 { 2812 c = c1 && 2813 ( 2814 c2 || 2815 c3 2816 ) && c4; 2817 } 2818 2819 [CODE] 2820 2821 call assert_equal(expected, getline(1, '$')) 2822 enew! | close 2823endfunc 2824 2825func Test_cindent_19() 2826 new 2827 setl cindent ts=4 sw=4 2828 set cino=(s,U1 2829 2830 let code =<< trim [CODE] 2831 void f() 2832 { 2833 c = c1 && 2834 ( 2835 c2 || 2836 c3 2837 ) && c4; 2838 } 2839 [CODE] 2840 2841 call append(0, code) 2842 normal gg 2843 normal ]]=][ 2844 2845 let expected =<< trim [CODE] 2846 void f() 2847 { 2848 c = c1 && 2849 ( 2850 c2 || 2851 c3 2852 ) && c4; 2853 } 2854 2855 [CODE] 2856 2857 call assert_equal(expected, getline(1, '$')) 2858 enew! | close 2859endfunc 2860 2861func Test_cindent_20() 2862 new 2863 setl cindent ts=4 sw=4 2864 setl cino=(0 2865 2866 let code =<< trim [CODE] 2867 void f() 2868 { 2869 if ( c1 2870 && ( c2 2871 || c3)) 2872 foo; 2873 } 2874 [CODE] 2875 2876 call append(0, code) 2877 normal gg 2878 normal ]]=][ 2879 2880 let expected =<< trim [CODE] 2881 void f() 2882 { 2883 if ( c1 2884 && ( c2 2885 || c3)) 2886 foo; 2887 } 2888 2889 [CODE] 2890 2891 call assert_equal(expected, getline(1, '$')) 2892 enew! | close 2893endfunc 2894 2895func Test_cindent_21() 2896 new 2897 setl cindent ts=4 sw=4 2898 setl cino=(0,w1 2899 2900 let code =<< trim [CODE] 2901 void f() 2902 { 2903 if ( c1 2904 && ( c2 2905 || c3)) 2906 foo; 2907 } 2908 [CODE] 2909 2910 call append(0, code) 2911 normal gg 2912 normal ]]=][ 2913 2914 let expected =<< trim [CODE] 2915 void f() 2916 { 2917 if ( c1 2918 && ( c2 2919 || c3)) 2920 foo; 2921 } 2922 2923 [CODE] 2924 2925 call assert_equal(expected, getline(1, '$')) 2926 enew! | close 2927endfunc 2928 2929func Test_cindent_22() 2930 new 2931 setl cindent ts=4 sw=4 2932 setl cino=(s 2933 2934 let code =<< trim [CODE] 2935 void f() 2936 { 2937 c = c1 && ( 2938 c2 || 2939 c3 2940 ) && c4; 2941 if ( 2942 c1 && c2 2943 ) 2944 foo; 2945 } 2946 [CODE] 2947 2948 call append(0, code) 2949 normal gg 2950 normal ]]=][ 2951 2952 let expected =<< trim [CODE] 2953 void f() 2954 { 2955 c = c1 && ( 2956 c2 || 2957 c3 2958 ) && c4; 2959 if ( 2960 c1 && c2 2961 ) 2962 foo; 2963 } 2964 2965 [CODE] 2966 2967 call assert_equal(expected, getline(1, '$')) 2968 enew! | close 2969endfunc 2970 2971func Test_cindent_23() 2972 new 2973 setl cindent ts=4 sw=4 2974 setl cino=(s,m1 2975 2976 let code =<< trim [CODE] 2977 void f() 2978 { 2979 c = c1 && ( 2980 c2 || 2981 c3 2982 ) && c4; 2983 if ( 2984 c1 && c2 2985 ) 2986 foo; 2987 } 2988 [CODE] 2989 2990 call append(0, code) 2991 normal gg 2992 normal ]]=][ 2993 2994 let expected =<< trim [CODE] 2995 void f() 2996 { 2997 c = c1 && ( 2998 c2 || 2999 c3 3000 ) && c4; 3001 if ( 3002 c1 && c2 3003 ) 3004 foo; 3005 } 3006 3007 [CODE] 3008 3009 call assert_equal(expected, getline(1, '$')) 3010 enew! | close 3011endfunc 3012 3013func Test_cindent_24() 3014 new 3015 setl cindent ts=4 sw=4 3016 setl cino=b1 3017 3018 let code =<< trim [CODE] 3019 void f() 3020 { 3021 switch (x) 3022 { 3023 case 1: 3024 a = b; 3025 break; 3026 default: 3027 a = 0; 3028 break; 3029 } 3030 } 3031 [CODE] 3032 3033 call append(0, code) 3034 normal gg 3035 normal ]]=][ 3036 3037 let expected =<< trim [CODE] 3038 void f() 3039 { 3040 switch (x) 3041 { 3042 case 1: 3043 a = b; 3044 break; 3045 default: 3046 a = 0; 3047 break; 3048 } 3049 } 3050 3051 [CODE] 3052 3053 call assert_equal(expected, getline(1, '$')) 3054 enew! | close 3055endfunc 3056 3057func Test_cindent_25() 3058 new 3059 setl cindent ts=4 sw=4 3060 setl cino=(0,W5 3061 3062 let code =<< trim [CODE] 3063 void f() 3064 { 3065 invokeme( 3066 argu, 3067 ment); 3068 invokeme( 3069 argu, 3070 ment 3071 ); 3072 invokeme(argu, 3073 ment 3074 ); 3075 } 3076 [CODE] 3077 3078 call append(0, code) 3079 normal gg 3080 normal ]]=][ 3081 3082 let expected =<< trim [CODE] 3083 void f() 3084 { 3085 invokeme( 3086 argu, 3087 ment); 3088 invokeme( 3089 argu, 3090 ment 3091 ); 3092 invokeme(argu, 3093 ment 3094 ); 3095 } 3096 3097 [CODE] 3098 3099 call assert_equal(expected, getline(1, '$')) 3100 enew! | close 3101endfunc 3102 3103func Test_cindent_26() 3104 new 3105 setl cindent ts=4 sw=4 3106 setl cino=/6 3107 3108 let code =<< trim [CODE] 3109 void f() 3110 { 3111 statement; 3112 // comment 1 3113 // comment 2 3114 } 3115 [CODE] 3116 3117 call append(0, code) 3118 normal gg 3119 normal ]]=][ 3120 3121 let expected =<< trim [CODE] 3122 void f() 3123 { 3124 statement; 3125 // comment 1 3126 // comment 2 3127 } 3128 3129 [CODE] 3130 3131 call assert_equal(expected, getline(1, '$')) 3132 enew! | close 3133endfunc 3134 3135func Test_cindent_27() 3136 new 3137 setl cindent ts=4 sw=4 3138 setl cino= 3139 3140 let code =<< trim [CODE] 3141 void f() 3142 { 3143 statement; 3144 // comment 1 3145 // comment 2 3146 } 3147 [CODE] 3148 3149 call append(0, code) 3150 normal gg 3151 exe "normal ]]/comment 1/+1\<CR>==" 3152 3153 let expected =<< trim [CODE] 3154 void f() 3155 { 3156 statement; 3157 // comment 1 3158 // comment 2 3159 } 3160 3161 [CODE] 3162 3163 call assert_equal(expected, getline(1, '$')) 3164 enew! | close 3165endfunc 3166 3167func Test_cindent_28() 3168 new 3169 setl cindent ts=4 sw=4 3170 setl cino=g0 3171 3172 let code =<< trim [CODE] 3173 class CAbc 3174 { 3175 int Test() { return FALSE; } 3176 3177 public: // comment 3178 void testfall(); 3179 protected: 3180 void testfall(); 3181 }; 3182 [CODE] 3183 3184 call append(0, code) 3185 normal gg 3186 normal ]]=][ 3187 3188 let expected =<< trim [CODE] 3189 class CAbc 3190 { 3191 int Test() { return FALSE; } 3192 3193 public: // comment 3194 void testfall(); 3195 protected: 3196 void testfall(); 3197 }; 3198 3199 [CODE] 3200 3201 call assert_equal(expected, getline(1, '$')) 3202 enew! | close 3203endfunc 3204 3205func Test_cindent_29() 3206 new 3207 setl cindent ts=4 sw=4 3208 setl cino=(0,gs,hs 3209 3210 let code =<< trim [CODE] 3211 class Foo : public Bar 3212 { 3213 public: 3214 virtual void method1(void) = 0; 3215 virtual void method2(int arg1, 3216 int arg2, 3217 int arg3) = 0; 3218 }; 3219 [CODE] 3220 3221 call append(0, code) 3222 normal gg 3223 normal ]]=][ 3224 3225 let expected =<< trim [CODE] 3226 class Foo : public Bar 3227 { 3228 public: 3229 virtual void method1(void) = 0; 3230 virtual void method2(int arg1, 3231 int arg2, 3232 int arg3) = 0; 3233 }; 3234 3235 [CODE] 3236 3237 call assert_equal(expected, getline(1, '$')) 3238 enew! | close 3239endfunc 3240 3241func Test_cindent_30() 3242 new 3243 setl cindent ts=4 sw=4 3244 setl cino=+20 3245 3246 let code =<< [CODE] 3247 void 3248foo() 3249{ 3250 if (a) 3251 { 3252 } else 3253 asdf; 3254} 3255[CODE] 3256 3257 call append(0, code) 3258 normal gg 3259 normal ]]=][ 3260 3261 let expected =<< [CODE] 3262 void 3263foo() 3264{ 3265 if (a) 3266 { 3267 } else 3268 asdf; 3269} 3270 3271[CODE] 3272 3273 call assert_equal(expected, getline(1, '$')) 3274 enew! | close 3275endfunc 3276 3277func Test_cindent_31() 3278 new 3279 setl cindent ts=4 sw=4 3280 setl cino=(0,W2s 3281 3282 let code =<< trim [CODE] 3283 3284 { 3285 averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd( 3286 asdasdf, 3287 func(asdf, 3288 asdfadsf), 3289 asdfasdf 3290 ); 3291 3292 /* those are ugly, but consequent */ 3293 3294 func()->asd(asdasdf, 3295 averylongfunctionname( 3296 abc, 3297 dec)->averylongfunctionname( 3298 asdfadsf, 3299 asdfasdf, 3300 asdfasdf, 3301 ), 3302 func(asdfadf, 3303 asdfasdf 3304 ), 3305 asdasdf 3306 ); 3307 3308 averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf( 3309 abc, 3310 dec)->asdfasdfasdf( 3311 asdfadsf, 3312 asdfasdf, 3313 asdfasdf, 3314 ), 3315 func(asdfadf, 3316 asdfasdf), 3317 asdasdf 3318 ); 3319 } 3320 [CODE] 3321 3322 call append(0, code) 3323 normal gg 3324 normal ]]=][ 3325 3326 let expected =<< trim [CODE] 3327 3328 { 3329 averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd( 3330 asdasdf, 3331 func(asdf, 3332 asdfadsf), 3333 asdfasdf 3334 ); 3335 3336 /* those are ugly, but consequent */ 3337 3338 func()->asd(asdasdf, 3339 averylongfunctionname( 3340 abc, 3341 dec)->averylongfunctionname( 3342 asdfadsf, 3343 asdfasdf, 3344 asdfasdf, 3345 ), 3346 func(asdfadf, 3347 asdfasdf 3348 ), 3349 asdasdf 3350 ); 3351 3352 averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf( 3353 abc, 3354 dec)->asdfasdfasdf( 3355 asdfadsf, 3356 asdfasdf, 3357 asdfasdf, 3358 ), 3359 func(asdfadf, 3360 asdfasdf), 3361 asdasdf 3362 ); 3363 } 3364 3365 [CODE] 3366 3367 call assert_equal(expected, getline(1, '$')) 3368 enew! | close 3369endfunc 3370 3371func Test_cindent_32() 3372 new 3373 setl cindent ts=4 sw=4 3374 setl cino=M1 3375 3376 let code =<< trim [CODE] 3377 int main () 3378 { 3379 if (cond1 && 3380 cond2 3381 ) 3382 foo; 3383 } 3384 [CODE] 3385 3386 call append(0, code) 3387 normal gg 3388 normal ]]=][ 3389 3390 let expected =<< trim [CODE] 3391 int main () 3392 { 3393 if (cond1 && 3394 cond2 3395 ) 3396 foo; 3397 } 3398 3399 [CODE] 3400 3401 call assert_equal(expected, getline(1, '$')) 3402 enew! | close 3403endfunc 3404 3405func Test_cindent_33() 3406 new 3407 setl cindent ts=4 sw=4 3408 setl cino=(0,ts 3409 3410 let code =<< trim [CODE] 3411 void func(int a 3412 #if defined(FOO) 3413 , int b 3414 , int c 3415 #endif 3416 ) 3417 { 3418 } 3419 [CODE] 3420 3421 call append(0, code) 3422 normal gg 3423 normal 2j=][ 3424 3425 let expected =<< trim [CODE] 3426 void func(int a 3427 #if defined(FOO) 3428 , int b 3429 , int c 3430 #endif 3431 ) 3432 { 3433 } 3434 3435 [CODE] 3436 3437 call assert_equal(expected, getline(1, '$')) 3438 enew! | close 3439endfunc 3440 3441func Test_cindent_34() 3442 new 3443 setl cindent ts=4 sw=4 3444 setl cino=(0 3445 3446 let code =<< trim [CODE] 3447 3448 void 3449 func(int a 3450 #if defined(FOO) 3451 , int b 3452 , int c 3453 #endif 3454 ) 3455 { 3456 } 3457 [CODE] 3458 3459 call append(0, code) 3460 normal gg 3461 normal =][ 3462 3463 let expected =<< trim [CODE] 3464 3465 void 3466 func(int a 3467 #if defined(FOO) 3468 , int b 3469 , int c 3470 #endif 3471 ) 3472 { 3473 } 3474 3475 [CODE] 3476 3477 call assert_equal(expected, getline(1, '$')) 3478 enew! | close 3479endfunc 3480 3481func Test_cindent_35() 3482 new 3483 setl cindent ts=4 sw=4 3484 setl cino& 3485 3486 let code =<< trim [CODE] 3487 void func(void) 3488 { 3489 if(x==y) 3490 if(y==z) 3491 foo=1; 3492 else { bar=1; 3493 baz=2; 3494 } 3495 printf("Foo!\n"); 3496 } 3497 3498 void func1(void) 3499 { 3500 char* tab[] = {"foo", "bar", 3501 "baz", "quux", 3502 "this line used", "to be indented incorrectly"}; 3503 foo(); 3504 } 3505 3506 void func2(void) 3507 { 3508 int tab[] = 3509 {1, 2, 3510 3, 4, 3511 5, 6}; 3512 3513 printf("This line used to be indented incorrectly.\n"); 3514 } 3515 3516 int foo[] 3517 #ifdef BAR 3518 3519 = { 1, 2, 3, 3520 4, 5, 6 } 3521 3522 #endif 3523 ; 3524 int baz; 3525 3526 void func3(void) 3527 { 3528 int tab[] = { 3529 1, 2, 3530 3, 4, 3531 5, 6}; 3532 3533 printf("Don't you dare indent this line incorrectly!\n"); 3534 } 3535 3536 void 3537 func4(a, b, 3538 c) 3539 int a; 3540 int b; 3541 int c; 3542 { 3543 } 3544 3545 void 3546 func5( 3547 int a, 3548 int b) 3549 { 3550 } 3551 3552 void 3553 func6( 3554 int a) 3555 { 3556 } 3557 [CODE] 3558 3559 call append(0, code) 3560 normal gg 3561 normal ]]=7][ 3562 3563 let expected =<< trim [CODE] 3564 void func(void) 3565 { 3566 if(x==y) 3567 if(y==z) 3568 foo=1; 3569 else { bar=1; 3570 baz=2; 3571 } 3572 printf("Foo!\n"); 3573 } 3574 3575 void func1(void) 3576 { 3577 char* tab[] = {"foo", "bar", 3578 "baz", "quux", 3579 "this line used", "to be indented incorrectly"}; 3580 foo(); 3581 } 3582 3583 void func2(void) 3584 { 3585 int tab[] = 3586 {1, 2, 3587 3, 4, 3588 5, 6}; 3589 3590 printf("This line used to be indented incorrectly.\n"); 3591 } 3592 3593 int foo[] 3594 #ifdef BAR 3595 3596 = { 1, 2, 3, 3597 4, 5, 6 } 3598 3599 #endif 3600 ; 3601 int baz; 3602 3603 void func3(void) 3604 { 3605 int tab[] = { 3606 1, 2, 3607 3, 4, 3608 5, 6}; 3609 3610 printf("Don't you dare indent this line incorrectly!\n"); 3611 } 3612 3613 void 3614 func4(a, b, 3615 c) 3616 int a; 3617 int b; 3618 int c; 3619 { 3620 } 3621 3622 void 3623 func5( 3624 int a, 3625 int b) 3626 { 3627 } 3628 3629 void 3630 func6( 3631 int a) 3632 { 3633 } 3634 3635 [CODE] 3636 3637 call assert_equal(expected, getline(1, '$')) 3638 enew! | close 3639endfunc 3640 3641func Test_cindent_36() 3642 new 3643 setl cindent ts=4 sw=4 3644 setl cino& 3645 setl cino+=l1 3646 3647 let code =<< trim [CODE] 3648 void func(void) 3649 { 3650 int tab[] = 3651 { 3652 1, 2, 3, 3653 4, 5, 6}; 3654 3655 printf("Indent this line correctly!\n"); 3656 3657 switch (foo) 3658 { 3659 case bar: 3660 printf("bar"); 3661 break; 3662 case baz: { 3663 printf("baz"); 3664 break; 3665 } 3666 case quux: 3667 printf("But don't break the indentation of this instruction\n"); 3668 break; 3669 } 3670 } 3671 [CODE] 3672 3673 call append(0, code) 3674 normal gg 3675 normal ]]=][ 3676 3677 let expected =<< trim [CODE] 3678 void func(void) 3679 { 3680 int tab[] = 3681 { 3682 1, 2, 3, 3683 4, 5, 6}; 3684 3685 printf("Indent this line correctly!\n"); 3686 3687 switch (foo) 3688 { 3689 case bar: 3690 printf("bar"); 3691 break; 3692 case baz: { 3693 printf("baz"); 3694 break; 3695 } 3696 case quux: 3697 printf("But don't break the indentation of this instruction\n"); 3698 break; 3699 } 3700 } 3701 3702 [CODE] 3703 3704 call assert_equal(expected, getline(1, '$')) 3705 enew! | close 3706endfunc 3707 3708func Test_cindent_37() 3709 new 3710 setl cindent ts=4 sw=4 3711 setl cino& 3712 3713 let code =<< trim [CODE] 3714 void func(void) 3715 { 3716 cout << "a" 3717 << "b" 3718 << ") :" 3719 << "c"; 3720 } 3721 [CODE] 3722 3723 call append(0, code) 3724 normal gg 3725 normal ]]=][ 3726 3727 let expected =<< trim [CODE] 3728 void func(void) 3729 { 3730 cout << "a" 3731 << "b" 3732 << ") :" 3733 << "c"; 3734 } 3735 3736 [CODE] 3737 3738 call assert_equal(expected, getline(1, '$')) 3739 enew! | close 3740endfunc 3741 3742func Test_cindent_38() 3743 new 3744 setl cindent ts=4 sw=4 3745 setl com=s1:/*,m:*,ex:*/ 3746 3747 let code =<< trim [CODE] 3748 void func(void) 3749 { 3750 /* 3751 * This is a comment. 3752 */ 3753 } 3754 [CODE] 3755 3756 call append(0, code) 3757 normal gg 3758 normal ]]3jofoo(); 3759 3760 let expected =<< trim [CODE] 3761 void func(void) 3762 { 3763 /* 3764 * This is a comment. 3765 */ 3766 foo(); 3767 } 3768 3769 [CODE] 3770 3771 call assert_equal(expected, getline(1, '$')) 3772 enew! | close 3773endfunc 3774 3775func Test_cindent_39() 3776 new 3777 setl cindent ts=4 sw=4 3778 setl cino& 3779 3780 let code =<< trim [CODE] 3781 void func(void) 3782 { 3783 for (int i = 0; i < 10; ++i) 3784 if (i & 1) { 3785 foo(1); 3786 } else 3787 foo(0); 3788 baz(); 3789 } 3790 [CODE] 3791 3792 call append(0, code) 3793 normal gg 3794 normal ]]=][ 3795 3796 let expected =<< trim [CODE] 3797 void func(void) 3798 { 3799 for (int i = 0; i < 10; ++i) 3800 if (i & 1) { 3801 foo(1); 3802 } else 3803 foo(0); 3804 baz(); 3805 } 3806 3807 [CODE] 3808 3809 call assert_equal(expected, getline(1, '$')) 3810 enew! | close 3811endfunc 3812 3813func Test_cindent_40() 3814 new 3815 setl cindent ts=4 sw=4 3816 setl cino=k2s,(0 3817 3818 let code =<< trim [CODE] 3819 void func(void) 3820 { 3821 if (condition1 3822 && condition2) 3823 action(); 3824 function(argument1 3825 && argument2); 3826 3827 if (c1 && (c2 || 3828 c3)) 3829 foo; 3830 if (c1 && 3831 (c2 || c3)) 3832 { 3833 } 3834 3835 if ( c1 3836 && ( c2 3837 || c3)) 3838 foo; 3839 func( c1 3840 && ( c2 3841 || c3)) 3842 foo; 3843 } 3844 [CODE] 3845 3846 call append(0, code) 3847 normal gg 3848 normal ]]=][ 3849 3850 let expected =<< trim [CODE] 3851 void func(void) 3852 { 3853 if (condition1 3854 && condition2) 3855 action(); 3856 function(argument1 3857 && argument2); 3858 3859 if (c1 && (c2 || 3860 c3)) 3861 foo; 3862 if (c1 && 3863 (c2 || c3)) 3864 { 3865 } 3866 3867 if ( c1 3868 && ( c2 3869 || c3)) 3870 foo; 3871 func( c1 3872 && ( c2 3873 || c3)) 3874 foo; 3875 } 3876 3877 [CODE] 3878 3879 call assert_equal(expected, getline(1, '$')) 3880 enew! | close 3881endfunc 3882 3883func Test_cindent_41() 3884 new 3885 setl cindent ts=4 sw=4 3886 setl cino=k2s,(s 3887 3888 let code =<< trim [CODE] 3889 void func(void) 3890 { 3891 if (condition1 3892 && condition2) 3893 action(); 3894 function(argument1 3895 && argument2); 3896 3897 if (c1 && (c2 || 3898 c3)) 3899 foo; 3900 if (c1 && 3901 (c2 || c3)) 3902 { 3903 } 3904 3905 if ( c1 3906 && ( c2 3907 || c3)) 3908 foo; 3909 func( c1 3910 && ( c2 3911 || c3)) 3912 foo; 3913 } 3914 [CODE] 3915 3916 call append(0, code) 3917 normal gg 3918 normal ]]=][ 3919 3920 let expected =<< trim [CODE] 3921 void func(void) 3922 { 3923 if (condition1 3924 && condition2) 3925 action(); 3926 function(argument1 3927 && argument2); 3928 3929 if (c1 && (c2 || 3930 c3)) 3931 foo; 3932 if (c1 && 3933 (c2 || c3)) 3934 { 3935 } 3936 3937 if ( c1 3938 && ( c2 3939 || c3)) 3940 foo; 3941 func( c1 3942 && ( c2 3943 || c3)) 3944 foo; 3945 } 3946 3947 [CODE] 3948 3949 call assert_equal(expected, getline(1, '$')) 3950 enew! | close 3951endfunc 3952 3953func Test_cindent_42() 3954 new 3955 setl cindent ts=4 sw=4 3956 setl cino=k2s,(s,U1 3957 3958 let code =<< trim [CODE] 3959 void func(void) 3960 { 3961 if (condition1 3962 && condition2) 3963 action(); 3964 function(argument1 3965 && argument2); 3966 3967 if (c1 && (c2 || 3968 c3)) 3969 foo; 3970 if (c1 && 3971 (c2 || c3)) 3972 { 3973 } 3974 if (c123456789 3975 && (c22345 3976 || c3)) 3977 printf("foo\n"); 3978 3979 c = c1 && 3980 ( 3981 c2 || 3982 c3 3983 ) && c4; 3984 } 3985 [CODE] 3986 3987 call append(0, code) 3988 normal gg 3989 normal ]]=][ 3990 3991 let expected =<< trim [CODE] 3992 void func(void) 3993 { 3994 if (condition1 3995 && condition2) 3996 action(); 3997 function(argument1 3998 && argument2); 3999 4000 if (c1 && (c2 || 4001 c3)) 4002 foo; 4003 if (c1 && 4004 (c2 || c3)) 4005 { 4006 } 4007 if (c123456789 4008 && (c22345 4009 || c3)) 4010 printf("foo\n"); 4011 4012 c = c1 && 4013 ( 4014 c2 || 4015 c3 4016 ) && c4; 4017 } 4018 4019 [CODE] 4020 4021 call assert_equal(expected, getline(1, '$')) 4022 enew! | close 4023endfunc 4024 4025func Test_cindent_43() 4026 new 4027 setl cindent ts=4 sw=4 4028 setl cino=k2s,(0,W4 4029 4030 let code =<< trim [CODE] 4031 void func(void) 4032 { 4033 if (condition1 4034 && condition2) 4035 action(); 4036 function(argument1 4037 && argument2); 4038 4039 if (c1 && (c2 || 4040 c3)) 4041 foo; 4042 if (c1 && 4043 (c2 || c3)) 4044 { 4045 } 4046 if (c123456789 4047 && (c22345 4048 || c3)) 4049 printf("foo\n"); 4050 4051 if ( c1 4052 && ( c2 4053 || c3)) 4054 foo; 4055 4056 a_long_line( 4057 argument, 4058 argument); 4059 a_short_line(argument, 4060 argument); 4061 } 4062 [CODE] 4063 4064 call append(0, code) 4065 normal gg 4066 normal ]]=][ 4067 4068 let expected =<< trim [CODE] 4069 void func(void) 4070 { 4071 if (condition1 4072 && condition2) 4073 action(); 4074 function(argument1 4075 && argument2); 4076 4077 if (c1 && (c2 || 4078 c3)) 4079 foo; 4080 if (c1 && 4081 (c2 || c3)) 4082 { 4083 } 4084 if (c123456789 4085 && (c22345 4086 || c3)) 4087 printf("foo\n"); 4088 4089 if ( c1 4090 && ( c2 4091 || c3)) 4092 foo; 4093 4094 a_long_line( 4095 argument, 4096 argument); 4097 a_short_line(argument, 4098 argument); 4099 } 4100 4101 [CODE] 4102 4103 call assert_equal(expected, getline(1, '$')) 4104 enew! | close 4105endfunc 4106 4107func Test_cindent_44() 4108 new 4109 setl cindent ts=4 sw=4 4110 setl cino=k2s,u2 4111 4112 let code =<< trim [CODE] 4113 void func(void) 4114 { 4115 if (condition1 4116 && condition2) 4117 action(); 4118 function(argument1 4119 && argument2); 4120 4121 if (c1 && (c2 || 4122 c3)) 4123 foo; 4124 if (c1 && 4125 (c2 || c3)) 4126 { 4127 } 4128 if (c123456789 4129 && (c22345 4130 || c3)) 4131 printf("foo\n"); 4132 } 4133 [CODE] 4134 4135 call append(0, code) 4136 normal gg 4137 normal ]]=][ 4138 4139 let expected =<< trim [CODE] 4140 void func(void) 4141 { 4142 if (condition1 4143 && condition2) 4144 action(); 4145 function(argument1 4146 && argument2); 4147 4148 if (c1 && (c2 || 4149 c3)) 4150 foo; 4151 if (c1 && 4152 (c2 || c3)) 4153 { 4154 } 4155 if (c123456789 4156 && (c22345 4157 || c3)) 4158 printf("foo\n"); 4159 } 4160 4161 [CODE] 4162 4163 call assert_equal(expected, getline(1, '$')) 4164 enew! | close 4165endfunc 4166 4167func Test_cindent_45() 4168 new 4169 setl cindent ts=4 sw=4 4170 setl cino=k2s,(0,w1 4171 4172 let code =<< trim [CODE] 4173 void func(void) 4174 { 4175 if (condition1 4176 && condition2) 4177 action(); 4178 function(argument1 4179 && argument2); 4180 4181 if (c1 && (c2 || 4182 c3)) 4183 foo; 4184 if (c1 && 4185 (c2 || c3)) 4186 { 4187 } 4188 if (c123456789 4189 && (c22345 4190 || c3)) 4191 printf("foo\n"); 4192 4193 if ( c1 4194 && ( c2 4195 || c3)) 4196 foo; 4197 func( c1 4198 && ( c2 4199 || c3)) 4200 foo; 4201 } 4202 [CODE] 4203 4204 call append(0, code) 4205 normal gg 4206 normal ]]=][ 4207 4208 let expected =<< trim [CODE] 4209 void func(void) 4210 { 4211 if (condition1 4212 && condition2) 4213 action(); 4214 function(argument1 4215 && argument2); 4216 4217 if (c1 && (c2 || 4218 c3)) 4219 foo; 4220 if (c1 && 4221 (c2 || c3)) 4222 { 4223 } 4224 if (c123456789 4225 && (c22345 4226 || c3)) 4227 printf("foo\n"); 4228 4229 if ( c1 4230 && ( c2 4231 || c3)) 4232 foo; 4233 func( c1 4234 && ( c2 4235 || c3)) 4236 foo; 4237 } 4238 4239 [CODE] 4240 4241 call assert_equal(expected, getline(1, '$')) 4242 enew! | close 4243endfunc 4244 4245func Test_cindent_46() 4246 new 4247 setl cindent ts=4 sw=4 4248 setl cino=k2,(s 4249 4250 let code =<< trim [CODE] 4251 void func(void) 4252 { 4253 if (condition1 4254 && condition2) 4255 action(); 4256 function(argument1 4257 && argument2); 4258 4259 if (c1 && (c2 || 4260 c3)) 4261 foo; 4262 if (c1 && 4263 (c2 || c3)) 4264 { 4265 } 4266 } 4267 [CODE] 4268 4269 call append(0, code) 4270 normal gg 4271 normal ]]=][ 4272 4273 let expected =<< trim [CODE] 4274 void func(void) 4275 { 4276 if (condition1 4277 && condition2) 4278 action(); 4279 function(argument1 4280 && argument2); 4281 4282 if (c1 && (c2 || 4283 c3)) 4284 foo; 4285 if (c1 && 4286 (c2 || c3)) 4287 { 4288 } 4289 } 4290 4291 [CODE] 4292 4293 call assert_equal(expected, getline(1, '$')) 4294 enew! | close 4295endfunc 4296 4297func Test_cindent_47() 4298 new 4299 setl cindent ts=4 sw=4 4300 setl cino=N-s 4301 4302 let code =<< trim [CODE] 4303 NAMESPACESTART 4304 /* valid namespaces with normal indent */ 4305 namespace 4306 { 4307 { 4308 111111111111; 4309 } 4310 } 4311 namespace /* test */ 4312 { 4313 11111111111111111; 4314 } 4315 namespace // test 4316 { 4317 111111111111111111; 4318 } 4319 namespace 4320 { 4321 111111111111111111; 4322 } 4323 namespace test 4324 { 4325 111111111111111111; 4326 } 4327 namespace test::cpp17 4328 { 4329 111111111111111111; 4330 } 4331 namespace ::incorrectcpp17 4332 { 4333 111111111111111111; 4334 } 4335 namespace test::incorrectcpp17:: 4336 { 4337 111111111111111111; 4338 } 4339 namespace test:incorrectcpp17 4340 { 4341 111111111111111111; 4342 } 4343 namespace test:::incorrectcpp17 4344 { 4345 111111111111111111; 4346 } 4347 namespace{ 4348 111111111111111111; 4349 } 4350 namespace test{ 4351 111111111111111111; 4352 } 4353 namespace { 4354 111111111111111111; 4355 } 4356 namespace test { 4357 111111111111111111; 4358 namespace test2 { 4359 22222222222222222; 4360 } 4361 } 4362 4363 /* invalid namespaces use block indent */ 4364 namespace test test2 { 4365 111111111111111111111; 4366 } 4367 namespace11111111111 { 4368 111111111111; 4369 } 4370 namespace() { 4371 1111111111111; 4372 } 4373 namespace() 4374 { 4375 111111111111111111; 4376 } 4377 namespace test test2 4378 { 4379 1111111111111111111; 4380 } 4381 namespace111111111 4382 { 4383 111111111111111111; 4384 } 4385 NAMESPACEEND 4386 [CODE] 4387 4388 call append(0, code) 4389 normal gg 4390 call search('^NAMESPACESTART') 4391 exe "normal =/^NAMESPACEEND\n" 4392 4393 let expected =<< trim [CODE] 4394 NAMESPACESTART 4395 /* valid namespaces with normal indent */ 4396 namespace 4397 { 4398 { 4399 111111111111; 4400 } 4401 } 4402 namespace /* test */ 4403 { 4404 11111111111111111; 4405 } 4406 namespace // test 4407 { 4408 111111111111111111; 4409 } 4410 namespace 4411 { 4412 111111111111111111; 4413 } 4414 namespace test 4415 { 4416 111111111111111111; 4417 } 4418 namespace test::cpp17 4419 { 4420 111111111111111111; 4421 } 4422 namespace ::incorrectcpp17 4423 { 4424 111111111111111111; 4425 } 4426 namespace test::incorrectcpp17:: 4427 { 4428 111111111111111111; 4429 } 4430 namespace test:incorrectcpp17 4431 { 4432 111111111111111111; 4433 } 4434 namespace test:::incorrectcpp17 4435 { 4436 111111111111111111; 4437 } 4438 namespace{ 4439 111111111111111111; 4440 } 4441 namespace test{ 4442 111111111111111111; 4443 } 4444 namespace { 4445 111111111111111111; 4446 } 4447 namespace test { 4448 111111111111111111; 4449 namespace test2 { 4450 22222222222222222; 4451 } 4452 } 4453 4454 /* invalid namespaces use block indent */ 4455 namespace test test2 { 4456 111111111111111111111; 4457 } 4458 namespace11111111111 { 4459 111111111111; 4460 } 4461 namespace() { 4462 1111111111111; 4463 } 4464 namespace() 4465 { 4466 111111111111111111; 4467 } 4468 namespace test test2 4469 { 4470 1111111111111111111; 4471 } 4472 namespace111111111 4473 { 4474 111111111111111111; 4475 } 4476 NAMESPACEEND 4477 4478 [CODE] 4479 4480 call assert_equal(expected, getline(1, '$')) 4481 enew! | close 4482endfunc 4483 4484func Test_cindent_48() 4485 new 4486 setl cindent ts=4 sw=4 4487 setl cino=j1,J1 4488 4489 let code =<< trim [CODE] 4490 JSSTART 4491 var bar = { 4492 foo: { 4493 that: this, 4494 some: ok, 4495 }, 4496 "bar":{ 4497 a : 2, 4498 b: "123abc", 4499 x: 4, 4500 "y": 5 4501 } 4502 } 4503 JSEND 4504 [CODE] 4505 4506 call append(0, code) 4507 normal gg 4508 call search('^JSSTART') 4509 exe "normal =/^JSEND\n" 4510 4511 let expected =<< trim [CODE] 4512 JSSTART 4513 var bar = { 4514 foo: { 4515 that: this, 4516 some: ok, 4517 }, 4518 "bar":{ 4519 a : 2, 4520 b: "123abc", 4521 x: 4, 4522 "y": 5 4523 } 4524 } 4525 JSEND 4526 4527 [CODE] 4528 4529 call assert_equal(expected, getline(1, '$')) 4530 enew! | close 4531endfunc 4532 4533func Test_cindent_49() 4534 new 4535 setl cindent ts=4 sw=4 4536 setl cino=j1,J1 4537 4538 let code =<< trim [CODE] 4539 JSSTART 4540 var foo = [ 4541 1, 4542 2, 4543 3 4544 ]; 4545 JSEND 4546 [CODE] 4547 4548 call append(0, code) 4549 normal gg 4550 call search('^JSSTART') 4551 exe "normal =/^JSEND\n" 4552 4553 let expected =<< trim [CODE] 4554 JSSTART 4555 var foo = [ 4556 1, 4557 2, 4558 3 4559 ]; 4560 JSEND 4561 4562 [CODE] 4563 4564 call assert_equal(expected, getline(1, '$')) 4565 enew! | close 4566endfunc 4567 4568func Test_cindent_50() 4569 new 4570 setl cindent ts=4 sw=4 4571 setl cino=j1,J1 4572 4573 let code =<< trim [CODE] 4574 JSSTART 4575 function bar() { 4576 var foo = [ 4577 1, 4578 2, 4579 3 4580 ]; 4581 } 4582 JSEND 4583 [CODE] 4584 4585 call append(0, code) 4586 normal gg 4587 call search('^JSSTART') 4588 exe "normal =/^JSEND\n" 4589 4590 let expected =<< trim [CODE] 4591 JSSTART 4592 function bar() { 4593 var foo = [ 4594 1, 4595 2, 4596 3 4597 ]; 4598 } 4599 JSEND 4600 4601 [CODE] 4602 4603 call assert_equal(expected, getline(1, '$')) 4604 enew! | close 4605endfunc 4606 4607func Test_cindent_51() 4608 new 4609 setl cindent ts=4 sw=4 4610 setl cino=j1,J1 4611 4612 let code =<< trim [CODE] 4613 JSSTART 4614 (function($){ 4615 4616 if (cond && 4617 cond) { 4618 stmt; 4619 } 4620 window.something.left = 4621 (width - 50 + offset) + "px"; 4622 var class_name='myclass'; 4623 4624 function private_method() { 4625 } 4626 4627 var public_method={ 4628 method: function(options,args){ 4629 private_method(); 4630 } 4631 } 4632 4633 function init(options) { 4634 4635 $(this).data(class_name+'_public',$.extend({},{ 4636 foo: 'bar', 4637 bar: 2, 4638 foobar: [ 4639 1, 4640 2, 4641 3 4642 ], 4643 callback: function(){ 4644 return true; 4645 } 4646 }, options||{})); 4647 } 4648 4649 $.fn[class_name]=function() { 4650 4651 var _arguments=arguments; 4652 return this.each(function(){ 4653 4654 var options=$(this).data(class_name+'_public'); 4655 if (!options) { 4656 init.apply(this,_arguments); 4657 4658 } else { 4659 var method=public_method[_arguments[0]]; 4660 4661 if (typeof(method)!='function') { 4662 console.log(class_name+' has no method "'+_arguments[0]+'"'); 4663 return false; 4664 } 4665 _arguments[0]=options; 4666 method.apply(this,_arguments); 4667 } 4668 }); 4669 } 4670 4671 })(jQuery); 4672 JSEND 4673 [CODE] 4674 4675 call append(0, code) 4676 normal gg 4677 call search('^JSSTART') 4678 exe "normal =/^JSEND\n" 4679 4680 let expected =<< trim [CODE] 4681 JSSTART 4682 (function($){ 4683 4684 if (cond && 4685 cond) { 4686 stmt; 4687 } 4688 window.something.left = 4689 (width - 50 + offset) + "px"; 4690 var class_name='myclass'; 4691 4692 function private_method() { 4693 } 4694 4695 var public_method={ 4696 method: function(options,args){ 4697 private_method(); 4698 } 4699 } 4700 4701 function init(options) { 4702 4703 $(this).data(class_name+'_public',$.extend({},{ 4704 foo: 'bar', 4705 bar: 2, 4706 foobar: [ 4707 1, 4708 2, 4709 3 4710 ], 4711 callback: function(){ 4712 return true; 4713 } 4714 }, options||{})); 4715 } 4716 4717 $.fn[class_name]=function() { 4718 4719 var _arguments=arguments; 4720 return this.each(function(){ 4721 4722 var options=$(this).data(class_name+'_public'); 4723 if (!options) { 4724 init.apply(this,_arguments); 4725 4726 } else { 4727 var method=public_method[_arguments[0]]; 4728 4729 if (typeof(method)!='function') { 4730 console.log(class_name+' has no method "'+_arguments[0]+'"'); 4731 return false; 4732 } 4733 _arguments[0]=options; 4734 method.apply(this,_arguments); 4735 } 4736 }); 4737 } 4738 4739 })(jQuery); 4740 JSEND 4741 4742 [CODE] 4743 4744 call assert_equal(expected, getline(1, '$')) 4745 enew! | close 4746endfunc 4747 4748func Test_cindent_52() 4749 new 4750 setl cindent ts=4 sw=4 4751 setl cino=j1,J1 4752 4753 let code =<< trim [CODE] 4754 JSSTART 4755 function init(options) { 4756 $(this).data(class_name+'_public',$.extend({},{ 4757 foo: 'bar', 4758 bar: 2, 4759 foobar: [ 4760 1, 4761 2, 4762 3 4763 ], 4764 callback: function(){ 4765 return true; 4766 } 4767 }, options||{})); 4768 } 4769 JSEND 4770 [CODE] 4771 4772 call append(0, code) 4773 normal gg 4774 call search('^JSSTART') 4775 exe "normal =/^JSEND\n" 4776 4777 let expected =<< trim [CODE] 4778 JSSTART 4779 function init(options) { 4780 $(this).data(class_name+'_public',$.extend({},{ 4781 foo: 'bar', 4782 bar: 2, 4783 foobar: [ 4784 1, 4785 2, 4786 3 4787 ], 4788 callback: function(){ 4789 return true; 4790 } 4791 }, options||{})); 4792 } 4793 JSEND 4794 4795 [CODE] 4796 4797 call assert_equal(expected, getline(1, '$')) 4798 enew! | close 4799endfunc 4800 4801func Test_cindent_53() 4802 new 4803 setl cindent ts=4 sw=4 4804 setl cino=j1,J1 4805 4806 let code =<< trim [CODE] 4807 JSSTART 4808 (function($){ 4809 function init(options) { 4810 $(this).data(class_name+'_public',$.extend({},{ 4811 foo: 'bar', 4812 bar: 2, 4813 foobar: [ 4814 1, 4815 2, 4816 3 4817 ], 4818 callback: function(){ 4819 return true; 4820 } 4821 }, options||{})); 4822 } 4823 })(jQuery); 4824 JSEND 4825 [CODE] 4826 4827 call append(0, code) 4828 normal gg 4829 call search('^JSSTART') 4830 exe "normal =/^JSEND\n" 4831 4832 let expected =<< trim [CODE] 4833 JSSTART 4834 (function($){ 4835 function init(options) { 4836 $(this).data(class_name+'_public',$.extend({},{ 4837 foo: 'bar', 4838 bar: 2, 4839 foobar: [ 4840 1, 4841 2, 4842 3 4843 ], 4844 callback: function(){ 4845 return true; 4846 } 4847 }, options||{})); 4848 } 4849 })(jQuery); 4850 JSEND 4851 4852 [CODE] 4853 4854 call assert_equal(expected, getline(1, '$')) 4855 enew! | close 4856endfunc 4857 4858func Test_cindent_54() 4859 new 4860 setl cindent ts=4 sw=4 4861 setl cino=j1,J1,+2 4862 4863 let code =<< trim [CODE] 4864 JSSTART 4865 // Results of JavaScript indent 4866 // 1 4867 (function(){ 4868 var a = [ 4869 'a', 4870 'b', 4871 'c', 4872 'd', 4873 'e', 4874 'f', 4875 'g', 4876 'h', 4877 'i' 4878 ]; 4879 }()) 4880 4881 // 2 4882 (function(){ 4883 var a = [ 4884 0 + 4885 5 * 4886 9 * 4887 'a', 4888 'b', 4889 0 + 4890 5 * 4891 9 * 4892 'c', 4893 'd', 4894 'e', 4895 'f', 4896 'g', 4897 'h', 4898 'i' 4899 ]; 4900 }()) 4901 4902 // 3 4903 (function(){ 4904 var a = [ 4905 0 + 4906 // comment 1 4907 5 * 4908 /* comment 2 */ 4909 9 * 4910 'a', 4911 'b', 4912 0 + 4913 5 * 4914 9 * 4915 'c', 4916 'd', 4917 'e', 4918 'f', 4919 'g', 4920 'h', 4921 'i' 4922 ]; 4923 }()) 4924 4925 // 4 4926 { 4927 var a = [ 4928 0, 4929 1 4930 ]; 4931 var b; 4932 var c; 4933 } 4934 4935 // 5 4936 { 4937 var a = [ 4938 [ 4939 0 4940 ], 4941 2, 4942 3 4943 ]; 4944 } 4945 4946 // 6 4947 { 4948 var a = [ 4949 [ 4950 0, 4951 1 4952 ], 4953 2, 4954 3 4955 ]; 4956 } 4957 4958 // 7 4959 { 4960 var a = [ 4961 // [ 4962 0, 4963 // 1 4964 // ], 4965 2, 4966 3 4967 ]; 4968 } 4969 4970 // 8 4971 var x = [ 4972 (function(){ 4973 var a, 4974 b, 4975 c, 4976 d, 4977 e, 4978 f, 4979 g, 4980 h, 4981 i; 4982 }) 4983 ]; 4984 4985 // 9 4986 var a = [ 4987 0 + 4988 5 * 4989 9 * 4990 'a', 4991 'b', 4992 0 + 4993 5 * 4994 9 * 4995 'c', 4996 'd', 4997 'e', 4998 'f', 4999 'g', 5000 'h', 5001 'i' 5002 ]; 5003 5004 // 10 5005 var a, 5006 b, 5007 c, 5008 d, 5009 e, 5010 f, 5011 g, 5012 h, 5013 i; 5014 JSEND 5015 [CODE] 5016 5017 call append(0, code) 5018 normal gg 5019 call search('^JSSTART') 5020 exe "normal =/^JSEND\n" 5021 5022 let expected =<< trim [CODE] 5023 JSSTART 5024 // Results of JavaScript indent 5025 // 1 5026 (function(){ 5027 var a = [ 5028 'a', 5029 'b', 5030 'c', 5031 'd', 5032 'e', 5033 'f', 5034 'g', 5035 'h', 5036 'i' 5037 ]; 5038 }()) 5039 5040 // 2 5041 (function(){ 5042 var a = [ 5043 0 + 5044 5 * 5045 9 * 5046 'a', 5047 'b', 5048 0 + 5049 5 * 5050 9 * 5051 'c', 5052 'd', 5053 'e', 5054 'f', 5055 'g', 5056 'h', 5057 'i' 5058 ]; 5059 }()) 5060 5061 // 3 5062 (function(){ 5063 var a = [ 5064 0 + 5065 // comment 1 5066 5 * 5067 /* comment 2 */ 5068 9 * 5069 'a', 5070 'b', 5071 0 + 5072 5 * 5073 9 * 5074 'c', 5075 'd', 5076 'e', 5077 'f', 5078 'g', 5079 'h', 5080 'i' 5081 ]; 5082 }()) 5083 5084 // 4 5085 { 5086 var a = [ 5087 0, 5088 1 5089 ]; 5090 var b; 5091 var c; 5092 } 5093 5094 // 5 5095 { 5096 var a = [ 5097 [ 5098 0 5099 ], 5100 2, 5101 3 5102 ]; 5103 } 5104 5105 // 6 5106 { 5107 var a = [ 5108 [ 5109 0, 5110 1 5111 ], 5112 2, 5113 3 5114 ]; 5115 } 5116 5117 // 7 5118 { 5119 var a = [ 5120 // [ 5121 0, 5122 // 1 5123 // ], 5124 2, 5125 3 5126 ]; 5127 } 5128 5129 // 8 5130 var x = [ 5131 (function(){ 5132 var a, 5133 b, 5134 c, 5135 d, 5136 e, 5137 f, 5138 g, 5139 h, 5140 i; 5141 }) 5142 ]; 5143 5144 // 9 5145 var a = [ 5146 0 + 5147 5 * 5148 9 * 5149 'a', 5150 'b', 5151 0 + 5152 5 * 5153 9 * 5154 'c', 5155 'd', 5156 'e', 5157 'f', 5158 'g', 5159 'h', 5160 'i' 5161 ]; 5162 5163 // 10 5164 var a, 5165 b, 5166 c, 5167 d, 5168 e, 5169 f, 5170 g, 5171 h, 5172 i; 5173 JSEND 5174 5175 [CODE] 5176 5177 call assert_equal(expected, getline(1, '$')) 5178 enew! | close 5179endfunc 5180 5181func Test_cindent_55() 5182 new 5183 setl cindent ts=4 sw=4 5184 setl cino& 5185 5186 let code =<< trim [CODE] 5187 /* start of define */ 5188 { 5189 } 5190 #define AAA \ 5191 BBB\ 5192 CCC 5193 5194 #define CNT \ 5195 1 + \ 5196 2 + \ 5197 4 5198 /* end of define */ 5199 [CODE] 5200 5201 call append(0, code) 5202 normal gg 5203 call search('start of define') 5204 exe "normal =/end of define\n" 5205 5206 let expected =<< trim [CODE] 5207 /* start of define */ 5208 { 5209 } 5210 #define AAA \ 5211 BBB\ 5212 CCC 5213 5214 #define CNT \ 5215 1 + \ 5216 2 + \ 5217 4 5218 /* end of define */ 5219 5220 [CODE] 5221 5222 call assert_equal(expected, getline(1, '$')) 5223 enew! | close 5224endfunc 5225 5226func Test_cindent_56() 5227 new 5228 setl cindent ts=4 sw=4 5229 setl cino& 5230 5231 let code =<< trim [CODE] 5232 { 5233 a = second/*bug*/*line; 5234 } 5235 [CODE] 5236 5237 call append(0, code) 5238 normal gg 5239 call search('a = second') 5240 normal ox 5241 5242 let expected =<< trim [CODE] 5243 { 5244 a = second/*bug*/*line; 5245 x 5246 } 5247 5248 [CODE] 5249 5250 call assert_equal(expected, getline(1, '$')) 5251 enew! | close 5252endfunc 5253 5254" this was going beyond the end of the line. 5255func Test_cindent_case() 5256 new 5257 call setline(1, 'case x: // x') 5258 set cindent 5259 norm! f:a: 5260 call assert_equal('case x:: // x', getline(1)) 5261 5262 set cindent& 5263 bwipe! 5264endfunc 5265 5266" vim: shiftwidth=2 sts=2 expandtab 5267