sly-cl-indent-test.txt (18857B)
1 ;;;; -*- mode: lisp -*- 2 ;;;; 3 ;;;; This file is .txt, because it's not meant to be evaluated. 4 ;;;; common-lisp-run-indentation-tests in sly-cl-ident.el 5 ;;;; parses this and runs the specified tests. 6 7 ;;; Test: indent-1 8 9 (defun foo () 10 t) 11 12 ;;; Test: indent-2 13 ;; 14 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 15 ;; sly-lisp-lambda-list-keyword-alignment: nil 16 17 (defun foo (foo &optional opt1 18 opt2 19 &rest rest) 20 (list foo opt1 opt2 21 rest)) 22 23 ;;; Test: indent-3 24 ;; 25 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 26 ;; sly-lisp-lambda-list-keyword-alignment: nil 27 28 (defun foo (foo &optional opt1 29 opt2 30 &rest rest) 31 (list foo opt1 opt2 32 rest)) 33 34 ;;; Test: indent-4 35 ;; 36 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 37 ;; sly-lisp-lambda-list-keyword-alignment: t 38 39 (defun foo (foo &optional opt1 40 opt2 41 &rest rest) 42 (list foo opt1 opt2 43 rest)) 44 45 ;;; Test: indent-5 46 ;; 47 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 48 ;; sly-lisp-lambda-list-keyword-alignment: t 49 50 (defun foo (foo &optional opt1 51 opt2 52 &rest rest) 53 (list foo opt1 opt2 54 rest)) 55 56 ;;; Test: indent-6 57 ;; 58 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 59 ;; sly-lisp-lambda-list-keyword-alignment: nil 60 61 (defmacro foo ((foo &optional opt1 62 opt2 63 &rest rest)) 64 (list foo opt1 opt2 65 rest)) 66 67 ;;; Test: indent-7 68 ;; 69 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 70 ;; sly-lisp-lambda-list-keyword-alignment: nil 71 72 (defmacro foo ((foo &optional opt1 73 opt2 74 &rest rest)) 75 (list foo opt1 opt2 76 rest)) 77 78 ;;; Test: indent-8 79 ;; 80 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 81 ;; sly-lisp-lambda-list-keyword-alignment: t 82 83 (defmacro foo ((foo &optional opt1 84 opt2 85 &rest rest)) 86 (list foo opt1 opt2 87 rest)) 88 89 ;;; Test: indent-9 90 ;; 91 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 92 ;; sly-lisp-lambda-list-keyword-alignment: t 93 94 (defmacro foo ((foo &optional opt1 95 opt2 96 &rest rest)) 97 (list foo opt1 opt2 98 rest)) 99 100 ;;; Test: indent-10 101 102 (let ((x y) 103 (foo #-foo (no-foo) 104 #+foo (yes-foo)) 105 (bar #-bar 106 (no-bar) 107 #+bar 108 (yes-bar))) 109 (list foo bar 110 x)) 111 112 ;;; Test: indent-11 113 ;; 114 ;; sly-lisp-loop-indent-subclauses: t 115 116 (loop for i from 0 below 2 117 for j from 0 below 2 118 when foo 119 do (fubar) 120 (bar) 121 (moo) 122 and collect cash 123 into honduras 124 else do ;; this is the body of the first else 125 ;; the body is ... 126 (indented to the above comment) 127 (ZMACS gets this wrong) 128 and do this 129 and do that 130 and when foo 131 do the-other 132 and cry 133 when this-is-a-short-condition do 134 (body code of the when) 135 when here's something I used to botch do (here is a body) 136 (rest of body indented same) 137 do 138 (exdented loop body) 139 (I'm not sure I like this but it's compatible) 140 when funny-predicate do ;; Here's a comment 141 (body filled to comment)) 142 143 ;;; Test: indent-12 144 145 (defun foo (x) 146 (tagbody 147 foo 148 (bar) 149 baz 150 (when (losing) 151 (with-big-loser 152 (yow) 153 ((lambda () 154 foo) 155 big))) 156 (flet ((foo (bar baz zap) 157 (zip)) 158 (zot () 159 quux)) 160 (do () 161 ((lose) 162 (foo 1)) 163 (quux) 164 foo 165 (lose)) 166 (cond ((x) 167 (win 1 2 168 (foo))) 169 (t 170 (lose 171 3)))))) 172 173 ;;; Test: indent-13 174 175 (if* (eq t nil) 176 then () 177 () 178 elseif (dsf) 179 thenret x 180 else (balbkj) 181 (sdf)) 182 183 ;;; Test: indent-14 184 185 (list foo #+foo (foo) 186 #-foo (no-foo)) 187 188 ;;; Test: indent-15 189 ;; 190 ;; sly-lisp-loop-indent-subclauses: t 191 192 (loop for x in foo1 193 for y in quux1 194 ) 195 196 ;;; Test: indent-16 197 ;; 198 ;; sly-lisp-loop-indent-subclauses: nil 199 200 (loop for x in foo1 201 for y in quux1 202 ) 203 204 ;;; Test: indent-17 205 ;; 206 ;; sly-lisp-loop-indent-subclauses: nil 207 ;; sly-lisp-loop-indent-forms-like-keywords: t 208 209 (loop for x in foo 210 for y in quux 211 finally (foo) 212 (fo) 213 (zoo) 214 do 215 (print x) 216 (print y) 217 (print 'ok!)) 218 219 ;;; Test: indent-18 220 ;; 221 ;; sly-lisp-loop-indent-subclauses: nil 222 ;; sly-lisp-loop-indent-forms-like-keywords: nil 223 224 (loop for x in foo 225 for y in quux 226 finally (foo) 227 (fo) 228 (zoo) 229 do 230 (print x) 231 (print y) 232 (print 'ok!)) 233 234 ;;; Test: indent-19 235 ;; 236 ;; sly-lisp-loop-indent-subclauses: t 237 ;; sly-lisp-loop-indent-forms-like-keywords: nil 238 239 (loop for x in foo 240 for y in quux 241 finally (foo) 242 (fo) 243 (zoo) 244 do 245 (print x) 246 (print y) 247 (print 'ok!)) 248 249 ;;; Test: indent-20 250 ;; 251 ;; sly-lisp-loop-indent-subclauses: nil 252 ;; sly-lisp-loop-indent-forms-like-keywords: nil 253 254 (loop for f in files 255 collect (open f 256 :direction :output) 257 do (foo) (bar) 258 (quux)) 259 260 ;;; Test: indent-21 261 ;; 262 ;; sly-lisp-loop-indent-subclauses: t 263 264 (loop for f in files 265 collect (open f 266 :direction :output) 267 do (foo) (bar) 268 (quux)) 269 270 ;;; Test: indent-22 271 272 (defsetf foo bar 273 "the doc string") 274 275 ;;; Test: indent-23 276 277 (defsetf foo 278 bar 279 "the doc string") 280 281 ;;; Test: indent-24 282 ;; 283 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 284 285 (defsetf foo (x y &optional a 286 z) 287 (a b c) 288 stuff) 289 290 ;;; Test: indent-25 291 ;; 292 ;; sly-lisp-align-keywords-in-calls: t 293 294 (make-instance 'foo :bar t :quux t 295 :zot t) 296 297 ;;; Test: indent-26 298 ;; 299 ;; sly-lisp-align-keywords-in-calls: nil 300 301 (make-instance 'foo :bar t :quux t 302 :zot t) 303 304 ;;; Test: indent-27 305 ;; 306 ;; sly-lisp-lambda-list-indentation: nil 307 308 (defun example (a b &optional o1 o2 309 o3 o4 310 &rest r 311 &key k1 k2 312 k3 k4) 313 'hello) 314 315 ;;; Test: indent-28 316 ;; 317 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 318 ;; sly-lisp-lambda-list-keyword-alignment: t 319 320 (destructuring-bind (foo &optional x 321 y 322 &key bar 323 quux) 324 foo 325 body) 326 327 ;;; Test: indent-29 328 ;; 329 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 330 ;; sly-lisp-lambda-list-keyword-alignment: t 331 332 (named-lambda foo 333 (x &optional y 334 z 335 &rest more) 336 body) 337 338 ;;; Test: indent-30 339 340 (foo fii 341 (or x 342 y) t 343 bar) 344 345 ;;; Test: indent-31 346 347 (foo 348 (bar)) 349 350 ;;; Test: indent-32 351 ;; 352 ;; comment-indent-function: (lambda () nil) 353 ;; comment-column: nil 354 355 (unknown (;; KLUDGE: comment-indent hackery to get 356 ;; the comment right. Otherwise we get a 357 ;; space before the first ;. 358 bar quux 359 zot) 360 (#|fii|# 361 zot) 362 ( 363 quux)) 364 365 ;;; Test: indent-33 366 367 (complex-indent.1 ((x z 368 f 369 ((fox foo 370 foo)) 371 :note (ding bar quux 372 zot) 373 :wait (this! is 374 a funcall)) 375 ;; Not 100% sure this should not be a step left. 376 (abbb) 377 (abb)) 378 (bodyform) 379 (another)) 380 381 ;;; Test: indent-34 382 383 (complex-indent.2 (bar quux 384 zot) 385 (a b 386 c d) 387 (form1) 388 (form2)) 389 390 ;;; Test: indent-35 391 392 (complex-indent.3 (:wait fii 393 (this is 394 a funcall)) 395 (bodyform) 396 (another)) 397 398 ;;; Test: indent-36 399 400 (defmacro foo (body) 401 `(let (,@(stuff) 402 ,(more-stuff) 403 ,(even-more) 404 (foo foo)) 405 ,@bofy)) 406 407 ;;; Test: indent-37 408 409 (defun foo () 410 `(list foo bar 411 ,@(quux fo 412 foo))) 413 414 ;;; Test: indent-38 415 416 (defmacro foofoo (body) 417 `(foo 418 `(let (,',@,(stuff) 419 ,(more-stuff) 420 ,(even-more) 421 (foo foo)) 422 ,@bofy))) 423 424 ;;; Test: indent-39 425 ;; 426 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 427 ;; sly-lisp-lambda-list-keyword-alignment: t 428 429 (defstruct (foo (:constructor make-foo (&optional bar 430 quux 431 &key zot 432 fii))) 433 bar 434 quux 435 zot 436 fii) 437 438 ;;; Test: indent-40 439 ;; 440 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 441 ;; sly-lisp-lambda-list-keyword-alignment: t 442 443 (defmethod foo :around (zot &key x 444 y) 445 (list zot)) 446 447 ;;; Test: indent-41 448 ;; 449 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 450 ;; sly-lisp-lambda-list-keyword-alignment: t 451 452 (progn 453 (defmethod foo :around (fii &key x 454 y) 455 (list fii))) 456 457 ;;; Test: indent-42 458 ;; 459 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 460 ;; sly-lisp-lambda-list-keyword-alignment: t 461 462 (progn 463 (defgeneric foo (x y &optional a 464 b) 465 (:method :around (a b &optional x 466 y) 467 (list a b x y)))) 468 469 ;;; Test: indent-43 470 ;; 471 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 472 ;; sly-lisp-lambda-list-keyword-alignment: t 473 474 (defgeneric foo (x &optional a b) 475 (:method (x y &optional a 476 b) 477 (list x y a b))) 478 479 ;;; Test: indent-44 480 481 (let (definer 482 foo 483 bar 484 quux) 485 ...) 486 487 ;;; Test: indent-45 488 489 (let (definition 490 foo 491 bar 492 quux) 493 ...) 494 495 ;;; Test: indent-46 496 497 (let (foo bar 498 quux) 499 ...) 500 501 ;;; Test: indent-47 502 503 (with-compilation-unit 504 (:foo t 505 :quux nil) 506 ...) 507 508 ;;; Test: indent-48 509 510 (cond 511 ((> x y) (foo) 512 ;; This isn't ideal -- I at least would align with (FOO here. 513 (bar) (quux) 514 (zot)) 515 (qux (foo) 516 (bar) 517 (zot)) 518 (zot 519 (foo) 520 (foo2)) 521 (t (foo) 522 (bar))) 523 524 ;;; Test: indent-49 525 526 (cond ((> x y) (foo) 527 ;; This isn't ideal -- I at least would align with (FOO here. 528 (bar)) 529 (qux (foo) 530 (bar)) 531 (zot 532 (foo)) 533 (t (foo) 534 (bar))) 535 536 ;;; Test: indent-50 537 ;; 538 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 539 ;; sly-lisp-lambda-list-keyword-alignment: nil 540 541 (defun foo (x &optional opt1 542 opt2 543 &rest rest 544 &allow-other-keys) 545 (list opt1 opt2 546 rest)) 547 548 ;;; Test: indent-51 549 ;; 550 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 551 ;; sly-lisp-lambda-list-keyword-alignment: nil 552 553 (defun foo (x &optional opt1 554 opt2 555 &rest rest 556 &allow-other-keys) 557 (list opt1 opt2 558 rest)) 559 560 ;;; Test: indent-52 561 ;; 562 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 563 ;; sly-lisp-lambda-list-keyword-alignment: t 564 565 (defun foo (x &optional opt1 566 opt2 567 &rest rest 568 &allow-other-keys) 569 (list opt1 opt2 570 rest)) 571 572 ;;; Test: indent-53 573 ;; 574 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 575 ;; sly-lisp-lambda-list-keyword-alignment: t 576 577 (defun foo (x &optional opt1 578 opt2 579 &rest rest 580 &allow-other-keys) 581 (list opt1 opt2 582 rest)) 583 584 ;;; Test: indent-54 585 ;; 586 587 (loop (foo) 588 ;; comment 589 (bar) 590 (quux)) 591 592 ;;; Test: indent-55 593 ;; 594 595 (loop ;; comment 596 (foo) 597 (bar)) 598 599 ;;; Test: indent-56 600 ;; 601 602 (loop 603 (foo) 604 ;; comment 605 (bar)) 606 607 608 ;;; Test: indent-57 609 ;; 610 611 (loop 612 ;; comment 613 (foo) 614 (bar)) 615 616 ;;; Test: indent-58 617 ;; 618 ;; sly-lisp-loop-indent-subclauses: t 619 620 (loop ;; comment at toplevel of the loop 621 with foo = t 622 do (foo foo) 623 (foo)) 624 625 ;;; Test: indent-59 626 ;; 627 ;; sly-lisp-loop-indent-subclauses: nil 628 629 (loop ;; comment at toplevel of the loop 630 with foo = t 631 do (foo foo) 632 (foo)) 633 634 ;;; Test: indent-60 635 ;; 636 ;; sly-lisp-loop-indent-subclauses: t 637 ;; sly-indentation--test-function: indent-region 638 639 (loop 640 ;; comment at toplevel of the loop 641 with foo = t 642 do (foo foo)) 643 644 ;;; Test: indent-61 645 ;; 646 ;; sly-lisp-loop-indent-subclauses: nil 647 648 (loop 649 ;; comment at toplevel of the loop 650 with foo = t 651 do (foo foo) 652 (foo)) 653 654 ;;; Test: indent-62 655 ;; 656 ;; sly-lisp-loop-indent-subclauses: t 657 658 (loop with foo = t 659 do (foo foo) 660 ;; comment inside clause 661 (bar)) 662 663 ;;; Test: indent-63 664 ;; 665 ;; sly-lisp-loop-indent-subclauses: nil 666 667 (loop with foo = t 668 do (foo foo) 669 ;; comment inside clause 670 (bar)) 671 672 673 ;;; Test: indent-64 674 ;; 675 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 676 ;; sly-lisp-lambda-list-keyword-alignment: t 677 678 (defmethod (setf foo) :around (zot &key x 679 y) 680 (list zot)) 681 682 ;;; Test: indent-65 683 ;; 684 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 685 ;; sly-lisp-lambda-list-keyword-alignment: t 686 687 (defmethod (setf foo) 688 :around (zot &key x y) 689 (list zot)) 690 691 ;;; Test: indent-66 692 ;; 693 694 (define-condition 695 foo 696 (bar quux 697 zot) 698 () 699 (:report "foo")) 700 701 ;;; Test: indent-67 702 ;; 703 704 (defclass 705 foo 706 (bar quxx 707 xoo) 708 () 709 (:metaclass foo-class)) 710 711 712 ;;; Test: indent-68 713 ;; 714 ;; sly-lisp-loop-indent-subclauses: nil 715 ;; sly-indentation--test-function: indent-region 716 717 (progn 718 (loop 719 repeat 1000 720 do ;; This is the 721 ;; beginning 722 (foo)) 723 (loop repeat 100 ;; This too 724 ;; is a beginning 725 do (foo))) 726 727 ;;; Test: indent-69 728 ;; 729 ;; sly-lisp-loop-indent-subclauses: t 730 731 (progn 732 (loop 733 repeat 1000 734 do ;; This is the 735 ;; beginning 736 (foo)) 737 (loop repeat 100 ;; This too 738 ;; is a beginning 739 do (foo))) 740 741 ;;; Test: indent-70 742 ;; 743 ;; sly-lisp-loop-indent-subclauses: nil 744 745 (progn 746 (loop 747 :repeat 1000 748 #:do ;; This is the 749 ;; beginning 750 (foo)) 751 (loop #:repeat 100 ;; This too 752 ;; is a beginning 753 :do (foo))) 754 755 ;;; Test: indent-71 756 ;; 757 ;; sly-lisp-loop-indent-subclauses: t 758 759 (progn 760 (loop 761 #:repeat 1000 762 #:do ;; This is the 763 ;; beginning 764 (foo)) 765 (loop :repeat 100 ;; This too 766 ;; is a beginning 767 #:do (foo))) 768 769 ;;; Test: indent-72 770 ;; 771 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 772 ;; sly-lisp-lambda-list-keyword-alignment: nil 773 774 (flet ((foo (foo &optional opt1 775 opt2 776 &rest rest) 777 (list foo opt1 opt2 778 rest))) 779 ...) 780 781 ;;; Test: indent-73 782 ;; 783 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 784 ;; sly-lisp-lambda-list-keyword-alignment: nil 785 786 (flet ((foo (foo &optional opt1 787 opt2 788 &rest rest) 789 (list foo opt1 opt2 790 rest))) 791 ...) 792 793 ;;; Test: indent-74 794 ;; 795 ;; sly-lisp-lambda-list-keyword-parameter-alignment: nil 796 ;; sly-lisp-lambda-list-keyword-alignment: t 797 798 (flet ((foo (foo &optional opt1 799 opt2 800 &rest rest) 801 (list foo opt1 opt2 802 rest))) 803 ...) 804 805 ;;; Test: indent-75 806 ;; 807 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 808 ;; sly-lisp-lambda-list-keyword-alignment: t 809 810 (flet ((foo (foo &optional opt1 811 opt2 812 &rest rest) 813 (list foo opt1 opt2 814 rest))) 815 ...) 816 817 ;;; Test: indent-76 818 ;; 819 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 820 ;; sly-lisp-lambda-list-keyword-alignment: t 821 822 (macrolet ((foo 823 (foo (&optional xopt1 824 xopt2 825 &rest xrest) 826 &optional opt1 827 opt2 828 &rest rest) 829 (list foo opt1 opt2 830 rest))) 831 ...) 832 833 ;;; Test: indent-77 834 ;; 835 ;; sly-lisp-align-keywords-in-calls: t 836 837 (foo *foo* 838 :bar t 839 :quux #+quux t 840 #-quux nil 841 :zot t) 842 843 ;;; Test: indent-78 844 ;; 845 ;; sly-lisp-align-keywords-in-calls: t 846 847 (foo *foo* :fii t 848 :bar t 849 :quux #+quux t 850 #+zot nil 851 :zot t) 852 853 ;;; Test: indent-79 854 855 (foo #+quux :quux #+quux t 856 #-quux :zoo #-quux t) 857 858 ;;; Test: indent-80 859 ;; 860 ;; sly-lisp-align-keywords-in-calls: t 861 862 (foo *foo* :fii t 863 :bar t 864 #+quux :quux #+quux t 865 :zot t) 866 867 ;;; Test: indent-81 868 ;; 869 ;; sly-lisp-align-keywords-in-calls: t 870 871 (foo *foo* :fii t 872 :bar t 873 #+quux #+quux :quux t 874 :zot t) 875 876 ;;; Test: indent-82 877 ;; 878 ;; sly-lisp-align-keywords-in-calls: t 879 880 (foo *foo* :fii t 881 :bar t 882 #+quux 883 :quux #+quux t 884 :zot t) 885 886 ;;; Test: indent-83 887 ;; 888 ;; sly-lisp-align-keywords-in-calls: t 889 890 (foo *foo* :fii t 891 :bar t 892 #+quux #+quux 893 :quux t 894 :zot t) 895 896 ;;; Test: indent-84 897 898 (and ;; Foo 899 (something) 900 ;; Quux 901 (more)) 902 903 ;;; Test: indent-85 904 905 (and ;; Foo 906 (something) 907 ;; Quux 908 (more)) 909 910 ;;; Test: indent-86 911 912 (foo ( 913 bar quux 914 zor)) 915 916 ;;; Test: indent-87 917 ;; 918 ;; sly-lisp-lambda-list-keyword-parameter-alignment: t 919 ;; sly-lisp-lambda-list-keyword-alignment: t 920 921 (defmacro foo ((foo &optional (opt1 (or (this) 922 (that))) 923 (opt2 (the-default) 924 opt2-p) 925 (opt3 926 (the-default (foo) 927 (bar))) 928 &rest rest)) 929 (list foo opt1 opt2 930 rest)) 931 932 ;;; Test: indent-88 933 934 (defstruct (foo 935 (:constructor make-foo 936 (bar &aux (quux (quux-from-bar bar 937 :for 'foo))))) 938 bar 939 quux) 940 941 ;;; Test: indent-89 942 943 (define-tentative-thing foo 944 (bar) 945 quux) 946 947 ;;; Test: indent-90 948 949 (define-tentative-thing foo 950 bar 951 quux) 952 953 ;;; Test: indent-91 954 ;; 955 ;; sly-lisp-loop-indent-body-forms-relative-to-loop-start: t 956 957 (loop for foo in bar 958 do 959 (progn foo 960 bar 961 baz)) 962 963 ;;; Test: indent-92 964 ;; 965 ;; sly-lisp-loop-indent-body-forms-relative-to-loop-start: t 966 ;; sly-lisp-loop-clauses-indentation: 4 967 968 (loop 969 for foo in bar 970 do 971 (progn foo 972 bar 973 baz)) 974 975 ;;; Test: indent-93 976 ;; 977 ;; sly-lisp-loop-clauses-indentation: 4 978 979 (loop 980 for foo in bar 981 doing 982 (progn foo 983 bar 984 baz)) 985 986 ;;; Test: indent-94 987 ;; 988 ;; sly-lisp-loop-clauses-indentation: 4 989 ;; sly-lisp-loop-body-forms-indentation: 1 990 991 (loop 992 for foo in bar 993 doing 994 (list foo 995 bar 996 baz)) 997 998 ;;; Test: indent-95 999 ;; 1000 ;; sly-lisp-loop-body-forms-indentation: 1 1001 ;; sly-lisp-loop-indent-body-forms-relative-to-loop-start: t 1002 1003 (loop 1004 for foo in bar 1005 do 1006 (list foo 1007 bar 1008 baz))