summaryrefslogtreecommitdiffstats
path: root/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
blob: 7f4b8d3023e61276e5cd4980406c174416266a6b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
00:00:01.040 --> 00:00:04.367
Welcome, everyone, to this Emacs Conf 2021.

00:00:04.467 --> 00:00:07.617
My name is Fermin.  I work as

00:00:07.617 --> 00:00:09.717
a Common Lisp engineer at RavenPack,

00:00:09.817 --> 00:00:11.733
and today I'm going to talk about

00:00:11.833 --> 00:00:15.783
CLEDE: the Common Lisp Emacs Development Environment.

00:00:15.883 --> 00:00:19.400
So what is CLEDE?

00:00:19.500 --> 00:00:20.500
So CLEDE is a project

00:00:20.500 --> 00:00:22.017
I've been working on this year

00:00:22.117 --> 00:00:24.650
for better... well, yeah...

00:00:24.750 --> 00:00:27.117
a better Common Lisp integration

00:00:27.217 --> 00:00:30.317
for static tools and

00:00:30.417 --> 00:00:33.250
for static and integrated Emacs tools.

00:00:33.350 --> 00:00:35.367
And to understand better what

00:00:35.467 --> 00:00:37.650
CLEDE is, one first has to understand

00:00:37.750 --> 00:00:40.133
the base that I use...

00:00:40.233 --> 00:00:43.767
so the foundation that I use for CLEDE.

00:00:43.867 --> 00:00:46.050
Um, so it is CEDET--

00:00:46.150 --> 00:00:47.417
and specifically Semantic--

00:00:47.517 --> 00:00:49.733
so we first have to talk about and

00:00:49.833 --> 00:00:50.417
understand what it is.

00:00:50.517 --> 00:00:53.817
So CEDET is a collection

00:00:53.917 --> 00:00:55.183
of Emacs development environment tools.

00:00:55.283 --> 00:00:57.233
It was created by Eric Ludlam

00:00:57.333 --> 00:01:00.767
(I hope to say that name right)

00:01:00.867 --> 00:01:02.333
in the late 90s, and

00:01:02.433 --> 00:01:04.833
the idea was to create entire IDE for Emacs.

00:01:04.933 --> 00:01:10.433
CEDET is still integrated into Emacs,

00:01:10.533 --> 00:01:11.717
and it has a lot of interesting things

00:01:11.817 --> 00:01:14.033
that are not used for too many people,

00:01:14.133 --> 00:01:16.167
so I'm going to explain some of those.

00:01:16.267 --> 00:01:18.417
First, let's go with the good ones that

00:01:18.517 --> 00:01:21.233
one that I use for CLEDE and that can

00:01:21.333 --> 00:01:23.167
be used for other projects as well.

00:01:23.267 --> 00:01:28.450
Some of the features that

00:01:28.550 --> 00:01:32.450
CEDET has is parse generators

00:01:32.550 --> 00:01:35.217
so we have Wisent and Bovine.

00:01:35.317 --> 00:01:38.350
Wisent is basically a Bison clone

00:01:38.450 --> 00:01:40.200
that was written in Emacs Lisp

00:01:40.300 --> 00:01:43.117
that you can also specify grammars.

00:01:43.217 --> 00:01:45.617
It's a really big and rather complex

00:01:45.717 --> 00:01:47.350
tool to work with,

00:01:47.450 --> 00:01:49.183
and it's secretly used for, as far as

00:01:49.283 --> 00:01:51.667
I know, two languages.

00:01:51.767 --> 00:01:53.317
They're not also well supported,

00:01:53.417 --> 00:01:55.317
but we'll get into that later.

00:01:55.417 --> 00:01:58.133
Also Bovine, which is a way more

00:01:58.233 --> 00:01:59.867
simple tool, like you can...

00:01:59.967 --> 00:02:01.733
you don't need grammar files,

00:02:01.833 --> 00:02:07.350
you can write just in plain Emacs Lisp.

00:02:07.450 --> 00:02:10.917
And you also have utilities to work with

00:02:11.017 --> 00:02:16.550
those generated tag trees, so to say.

00:02:16.650 --> 00:02:23.533
These are not AST parsers like real Bison;

00:02:23.633 --> 00:02:25.617
they are tag-based so they basically get

00:02:25.717 --> 00:02:27.533
tags and extract information from them,

00:02:27.633 --> 00:02:30.083
and I can use that information

00:02:30.183 --> 00:02:31.000
with Emacs Lisp

00:02:31.000 --> 00:02:33.567
to contextually understand better

00:02:33.667 --> 00:02:36.267
the language that you're parsing,

00:02:36.367 --> 00:02:37.083
but in general,

00:02:37.183 --> 00:02:40.083
this decision was made (as far as I know)

00:02:40.183 --> 00:02:43.217
because of the Emacs Lisp

00:02:43.317 --> 00:02:44.217
limitation of the time.

00:02:44.317 --> 00:02:50.233
So Emacs was a rather

00:02:50.333 --> 00:02:52.167
slower Lisp-- slow Lisp--

00:02:52.267 --> 00:02:55.850
so they decide to just use

00:02:55.950 --> 00:02:58.750
tag-based thing instead of a parse--

00:02:58.850 --> 00:03:02.333
I mean-- an AST-based one.

00:03:02.433 --> 00:03:05.167
And Semantic give you some utility with

00:03:05.267 --> 00:03:06.250
that as Senator, for example, give you

00:03:06.350 --> 00:03:07.667
some semantic navigation.

00:03:07.767 --> 00:03:09.750
So CEDET is way more than this,

00:03:09.850 --> 00:03:12.433
but this is not a CEDET talk.

00:03:12.533 --> 00:03:13.983
So if you want to get more information,

00:03:14.083 --> 00:03:16.350
you can go to the official webpage.

00:03:16.450 --> 00:03:19.933
I have to say that it is outdated, and

00:03:20.033 --> 00:03:22.933
Emacs changed some things over the years

00:03:23.033 --> 00:03:24.067
because CEDET was merged into Emacs

00:03:24.167 --> 00:03:27.767
in 2011, as far as I know.

00:03:27.867 --> 00:03:30.417
You can also go to the official Emacs

00:03:30.517 --> 00:03:32.883
documentation (the manual), which will get

00:03:32.983 --> 00:03:35.317
more information about every tool,

00:03:35.417 --> 00:03:38.317
but it's a really interesting thing, and

00:03:38.417 --> 00:03:40.883
I'm really sad that it is forgotten.

00:03:40.983 --> 00:03:43.233
So let's go with the bad things:

00:03:43.333 --> 00:03:46.483
that CEDET is an abandoned project.

00:03:46.583 --> 00:03:48.217
This has some benefits like it's not

00:03:48.317 --> 00:03:50.550
going to change that much,

00:03:50.650 --> 00:03:52.367
but it's, of course, not ideal.

00:03:52.467 --> 00:03:56.833
Most of the tooling that CEDET

00:03:56.933 --> 00:03:58.100
have right now are surpassed

00:03:58.200 --> 00:03:59.633
by other packages.

00:03:59.733 --> 00:04:02.650
And at first, I know Eric was working

00:04:02.750 --> 00:04:07.467
with C at the time so he totally has

00:04:07.567 --> 00:04:10.533
"real support" so you can use CEDET

00:04:10.633 --> 00:04:13.033
for other languages, but

00:04:13.133 --> 00:04:15.383
to work really like an IDE, more or less,

00:04:15.483 --> 00:04:17.017
it's all the...

00:04:17.117 --> 00:04:19.517
C is the only language supported,

00:04:19.617 --> 00:04:21.667
and maybe some simple C++, but that's it.

00:04:21.767 --> 00:04:24.017
It needs more documentation.

00:04:24.117 --> 00:04:25.683
People really don't know how to use it

00:04:25.783 --> 00:04:28.583
because, I have to say, rather complex

00:04:28.683 --> 00:04:30.067
to get a project working with it,

00:04:30.167 --> 00:04:33.717
and then make use of Semantic

00:04:33.817 --> 00:04:36.667
because [it] needs some maintenance and

00:04:36.767 --> 00:04:38.567
to update the code.

00:04:38.667 --> 00:04:41.083
But I will argue that even with these

00:04:41.183 --> 00:04:44.383
deficiencies, it's usable, and

00:04:44.483 --> 00:04:47.517
I use the foundation of base for

00:04:47.617 --> 00:04:49.533
parse infrastructure for other languages.

00:04:49.633 --> 00:04:52.367
I will say that with Common Lisp was

00:04:52.467 --> 00:04:53.983
rather easy because

00:04:54.083 --> 00:04:56.033
CEDET already have Emacs Lisp parser

00:04:56.133 --> 00:04:57.900
even though it's not great.

00:04:58.000 --> 00:05:00.483
It's easy to adapt and to use.

00:05:00.583 --> 00:05:04.000
It's not used in an Emacs

00:05:04.100 --> 00:05:05.433
right now because, well,

00:05:05.533 --> 00:05:08.883
Emacs know very well itself,

00:05:08.983 --> 00:05:11.600
but it's there.

00:05:11.700 --> 00:05:17.583
So these, of course, are static parsers

00:05:17.683 --> 00:05:19.517
so you don't need to run any

00:05:19.617 --> 00:05:21.883
other language-specific tools, which is

00:05:21.983 --> 00:05:24.400
an advantage for some things.

00:05:24.500 --> 00:05:27.133
And this was basically CEDET is,

00:05:27.233 --> 00:05:30.283
and I use the parse infrastructure

00:05:30.383 --> 00:05:31.333
and some tools

00:05:31.433 --> 00:05:34.333
to create a parser for Common Lisp.

00:05:34.433 --> 00:05:36.700
Well, more or less.  *laughs*

00:05:36.800 --> 00:05:37.900
Let's go to details.

00:05:38.000 --> 00:05:39.850
So I will say that it's not a parser

00:05:39.950 --> 00:05:42.433
by itself because, as we all know,

00:05:42.533 --> 00:05:44.500
to parse a macro-based language

00:05:44.600 --> 00:05:46.833
is really hard.

00:05:46.933 --> 00:05:48.450
Mostly if you cannot have contextual

00:05:48.550 --> 00:05:52.800
information because if you create code

00:05:52.900 --> 00:05:56.033
at compile time or runtime is really hard

00:05:56.133 --> 00:05:59.233
if you don't have run time, right?

00:05:59.333 --> 00:06:00.950
Basically, CLEDE can be described

00:06:01.050 --> 00:06:02.600
as a Semantic extension.

00:06:02.700 --> 00:06:03.867
So basically it's like,

00:06:03.967 --> 00:06:07.133
you can have Semantic

00:06:07.233 --> 00:06:09.817
and use it with Common Lisp code

00:06:09.917 --> 00:06:11.600
and some Common Lisp Emacs tools.

00:06:11.700 --> 00:06:17.350
So Bison (which is not Bison) is

00:06:17.450 --> 00:06:21.650
Bovine, and Semantic and Senator

00:06:21.750 --> 00:06:24.750
for navigating tags,

00:06:24.850 --> 00:06:26.367
and then communication with SLIME, SLY,

00:06:26.467 --> 00:06:28.733
and inferior Lisp.

00:06:28.833 --> 00:06:30.450
That means... I will show that later, but

00:06:30.550 --> 00:06:32.800
basically, you can parse the buffer,

00:06:32.900 --> 00:06:34.167
get some tags,

00:06:34.267 --> 00:06:35.967
get information about the tags that you want,

00:06:36.067 --> 00:06:38.017
and then send some of that information

00:06:38.117 --> 00:06:43.900
to the SLIME, SLY, or inferior Lisp REPL buffer,

00:06:44.000 --> 00:06:45.717
so you can get both things

00:06:45.817 --> 00:06:48.483
at the same time.

00:06:48.583 --> 00:06:50.217
And given that it's a Lisp language,

00:06:50.317 --> 00:06:53.300
this can be pretty interesting.

00:06:53.400 --> 00:06:57.600
Also I wrote some common package integration,

00:06:57.700 --> 00:06:59.217
so even though there's not

00:06:59.317 --> 00:07:00.300
a Common Lisp standard,

00:07:00.400 --> 00:07:05.100
there's some libraries that are used

00:07:05.200 --> 00:07:07.583
by basically everyone.

00:07:07.683 --> 00:07:09.417
They're not part of the standard,

00:07:09.517 --> 00:07:11.000
but yeah.

00:07:11.100 --> 00:07:13.900
A lot of people use it: like `asdf`,

00:07:14.000 --> 00:07:15.550
which is the package manager,

00:07:15.650 --> 00:07:18.967
I will say it's [`asdf` is] the

00:07:19.067 --> 00:07:21.783
definition packages, so to say,

00:07:21.883 --> 00:07:23.667
better than packages itself

00:07:23.767 --> 00:07:26.317
and have more features.

00:07:26.417 --> 00:07:28.383
I wrote a nice integration with it

00:07:28.483 --> 00:07:29.500
and also `fiveam`,

00:07:29.600 --> 00:07:34.417
which is a well-known test package.

00:07:34.517 --> 00:07:39.300
I just wrote this as an example

00:07:39.400 --> 00:07:41.883
on how we can do with CLEDE.

00:07:41.983 --> 00:07:43.633
Let's look at the features,

00:07:43.733 --> 00:07:46.267
and then we go to a demo.

00:07:51.367 --> 00:07:54.000
You can go to the repository.

00:07:54.100 --> 00:07:56.550
Currently, it's not in Melpa

00:07:56.650 --> 00:07:57.917
although I wanted

00:07:58.017 --> 00:08:01.250
to merge it-- I mean, to add it--

00:08:01.450 --> 00:08:04.667
to Melpa in the future.

00:08:04.767 --> 00:08:06.367
I want to clean the code and

00:08:06.467 --> 00:08:07.417
add some more features;

00:08:07.517 --> 00:08:09.650
I'm working on that and now

00:08:09.750 --> 00:08:12.567
like an eagle, so to say...

00:08:12.667 --> 00:08:15.533
but yeah, you can go here and then check

00:08:15.633 --> 00:08:18.833
all the features and test it.

00:08:18.933 --> 00:08:20.733
To install is pretty easy:

00:08:20.833 --> 00:08:22.500
just "add to path" thing.

00:08:22.600 --> 00:08:23.650
You don't need any external dependencies;

00:08:23.750 --> 00:08:25.817
everything's in Emacs.

00:08:25.917 --> 00:08:28.467
This was tested with Emacs 27,

00:08:28.567 --> 00:08:29.883
but probably going to work

00:08:29.983 --> 00:08:32.750
with Emacs 25 onwards so

00:08:32.850 --> 00:08:34.267
it shouldn't be any problem.

00:08:34.367 --> 00:08:38.633
So let's go with the features.

00:08:38.733 --> 00:08:42.783
This is some CEDET integrations,

00:08:42.883 --> 00:08:44.417
and first, like I said, it has

00:08:44.517 --> 00:08:48.000
support for SLY, SLIME, and inferior Lisp.

00:08:48.100 --> 00:08:49.517
If you are Common Lisp developer, you

00:08:49.617 --> 00:08:52.267
probably know a SLIME and a SLY,

00:08:52.367 --> 00:08:53.483
and inferior Lisp is basically

00:08:53.583 --> 00:08:57.800
just stock Emacs REPL.

00:08:57.900 --> 00:09:00.817
I support all three equally, so to say,

00:09:00.917 --> 00:09:05.583
and we have also `fiveam` integration,

00:09:05.683 --> 00:09:08.867
the ability to-- as I'm going to show later,

00:09:08.967 --> 00:09:10.883
you have the ability to send a test--

00:09:10.983 --> 00:09:16.233
either packages or an entire suite of tests,

00:09:16.333 --> 00:09:21.350
and `asdf`, which currently I'm just

00:09:21.450 --> 00:09:23.517
supporting basic project navigation

00:09:23.617 --> 00:09:25.433
and some information,

00:09:25.533 --> 00:09:28.517
but it's a work-in-progress.

00:09:28.617 --> 00:09:29.783
I also have some general activities

00:09:29.883 --> 00:09:31.917
that are not directly related to CEDET

00:09:32.017 --> 00:09:34.050
but part of the CLEDE package, which

00:09:34.150 --> 00:09:35.500
is CLEDE highlight.

00:09:35.600 --> 00:09:36.817
It's highly inspired by the

00:09:36.917 --> 00:09:41.167
Emacs re-factor `erefactor`.

00:09:41.267 --> 00:09:43.950
Basically, you have some nice

00:09:44.050 --> 00:09:47.883
highlights for lint variables.

00:09:47.983 --> 00:09:49.467
I want to expand that to also

00:09:49.567 --> 00:09:53.133
support parameters and function stuff,

00:09:53.233 --> 00:09:56.300
but it's not a high priority for me.

00:09:56.400 --> 00:09:58.117
But yeah, I sometimes use this;

00:09:58.217 --> 00:10:01.950
it's pretty neat when you have a big lint.

00:10:02.050 --> 00:10:05.333
Also some refactoring utilities...

00:10:05.433 --> 00:10:06.700
some of those can be said

00:10:06.800 --> 00:10:08.400
that it's overlapped with some...

00:10:08.500 --> 00:10:12.467
because it is a string base, it doesn't

00:10:12.567 --> 00:10:15.983
have too much context information,

00:10:16.083 --> 00:10:17.967
but yeah, some sort of

00:10:18.067 --> 00:10:22.167
`replace-symbol-in-region` and `symbol-tag`.

00:10:22.267 --> 00:10:23.867
And then some CLEDE commands.

00:10:23.967 --> 00:10:25.500
This is the thing that I use all the time.

00:10:25.600 --> 00:10:26.067
It's like you're going to find

00:10:26.167 --> 00:10:29.067
some commands to send to a REPL.

00:10:29.167 --> 00:10:31.367
I will show some example, but basically,

00:10:31.467 --> 00:10:32.983
you have already an example.

00:10:33.083 --> 00:10:34.333
You define a list of commands,

00:10:34.433 --> 00:10:37.867
you put name, and then you put the

00:10:37.967 --> 00:10:39.300
Common Lisp code that you want to send.

00:10:39.400 --> 00:10:41.550
Given that, you're writing this

00:10:41.650 --> 00:10:43.483
Emacs Lisp in your configuration.

00:10:43.583 --> 00:10:46.867
You can have some runtime information

00:10:46.967 --> 00:10:49.450
when the code is sent, right?

00:10:49.550 --> 00:10:53.450
so insert, get a variable value, or whatever.

00:10:53.550 --> 00:10:56.133
OK, `imenu` integration.

00:10:56.233 --> 00:10:58.967
Yes, Semantic...

00:10:59.067 --> 00:11:02.450
CEDET has a great `imenu` utilities

00:11:02.550 --> 00:11:05.600
to have a better `imenu`.

00:11:05.700 --> 00:11:10.383
`imenu-list` also works really well.

00:11:10.483 --> 00:11:12.917
So you have better... when you go to a file

00:11:13.017 --> 00:11:15.200
that you don't fully know what is inside,

00:11:15.300 --> 00:11:20.533
it's better to navigate having like a tree.

00:11:20.633 --> 00:11:22.383
Yeah, this one's the thing is going

00:11:22.483 --> 00:11:24.783
to show that Senator, which is

00:11:24.883 --> 00:11:26.633
Semantic navigator, and then some

00:11:26.733 --> 00:11:30.217
Semantic-specific tools like `complete-jump`,

00:11:30.317 --> 00:11:32.750
which I don't use this one too much

00:11:32.850 --> 00:11:35.300
because we have SLY/SLIME,

00:11:35.400 --> 00:11:39.083
but they're there, so yeah.

00:11:39.183 --> 00:11:41.433
Like I said, Common Lisp library support,

00:11:41.533 --> 00:11:44.333
which is duplicated.

00:11:44.433 --> 00:11:47.017
OK, so let's go to the demo.

00:11:47.117 --> 00:11:50.983
Um.

00:11:51.083 --> 00:11:53.567
Let's go to the demo file.

00:11:53.667 --> 00:11:55.300
Right.

00:11:55.400 --> 00:11:58.250
First, we have to do is enable CLEDE.

00:11:58.350 --> 00:11:59.433
This is pretty easy:

00:11:59.533 --> 00:12:03.400
we call `clede-start`, right,

00:12:03.500 --> 00:12:05.100
and now it's started.

00:12:05.200 --> 00:12:08.100
CLEDE is not an asynchronous parser so

00:12:08.200 --> 00:12:10.900
Semantic (in this case, Bovine) is not.

00:12:11.000 --> 00:12:15.917
If the file is large, it may take some time.

00:12:16.017 --> 00:12:16.017
It shouldn't because we have

00:12:16.117 --> 00:12:19.117
powerful computers, but if your

00:12:19.217 --> 00:12:21.917
computer is not that powerful,

00:12:22.017 --> 00:12:22.933
it may take a while.

00:12:23.033 --> 00:12:26.117
To see the information that has been

00:12:26.217 --> 00:12:31.167
parsed, we're going to call `bovinate`.

00:12:31.267 --> 00:12:33.767
Oops...  oops...

00:12:33.867 --> 00:12:36.033
Oh!  I have to-- sorry...

00:12:36.133 --> 00:12:43.267
Let's enable Semantic again.

00:12:43.367 --> 00:12:45.217
Let's start... `bovinate`...

00:12:45.317 --> 00:12:48.117
OK, so...

00:12:48.217 --> 00:12:49.917
This is the information that

00:12:50.017 --> 00:12:52.983
currently CLEDE is taking from the buffer.

00:12:53.083 --> 00:12:55.517
So we can see it's taking this, and

00:12:55.617 --> 00:12:58.550
it doesn't know what it is,

00:12:58.550 --> 00:13:02.167
so this is the tag name...

00:13:02.267 --> 00:13:02.850
this is the type,

00:13:02.950 --> 00:13:03.733
and these are some information

00:13:03.833 --> 00:13:05.750
and the location.

00:13:05.850 --> 00:13:08.150
OK, so we know that this is a variable,

00:13:08.250 --> 00:13:10.150
and it has the full value.

00:13:10.250 --> 00:13:13.233
You know this is a package, right,

00:13:13.333 --> 00:13:15.450
because it's defined as a package.

00:13:15.550 --> 00:13:18.100
It doesn't understand what this is.

00:13:18.300 --> 00:13:18.967
This node is a function

00:13:19.067 --> 00:13:19.817
because of the `fun`,

00:13:19.917 --> 00:13:23.133
and some of this is code,

00:13:23.233 --> 00:13:25.917
and it also understands some tests

00:13:26.017 --> 00:13:27.667
because it has `fiveam` integration.

00:13:27.767 --> 00:13:31.000
If it detects that has some test here

00:13:31.000 --> 00:13:34.517
it will know that, indeed, it is test.

00:13:34.517 --> 00:13:40.317
So let's try some, first, `imenu`.

00:13:40.417 --> 00:13:42.550
So we can see here we have...

00:13:42.650 --> 00:13:44.750
I understand that this have

00:13:44.850 --> 00:13:46.600
some sort of `fiveam` switch

00:13:46.700 --> 00:13:49.350
and some tests defined.

00:13:49.450 --> 00:13:51.000
It understands this package, and

00:13:51.100 --> 00:13:52.783
it'll give you some variables-- `defuns`,

00:13:52.883 --> 00:13:55.117
and it also will give you some misc

00:13:55.217 --> 00:13:59.917
for things that doesn't know what it is.

00:14:00.017 --> 00:14:00.983
And you can also

00:14:01.083 --> 00:14:04.417
navigate with this-- like this `imenu`.

00:14:06.000 --> 00:14:12.000
So, um, let's go first with some Senator.

00:14:12.000 --> 00:14:14.867
So with Senator, we can navigate,

00:14:14.967 --> 00:14:16.200
go to the next stack, previous stack,

00:14:16.300 --> 00:14:20.783
all this, um, top-level `s-expression`

00:14:20.883 --> 00:14:22.467
are basically a tag, even though

00:14:22.567 --> 00:14:28.467
it's code... you can navigate, right.

00:14:28.567 --> 00:14:31.333
Um, copy/kill this or some other stuff.

00:14:31.433 --> 00:14:34.017
Um, some interesting thing that we can

00:14:34.117 --> 00:14:38.717
do is let's launch SLY, right.

00:14:38.817 --> 00:14:44.317
Um, let's load `fiveam`,

00:14:44.417 --> 00:14:45.500
and let's send some tests.

00:14:45.600 --> 00:14:51.467
We can say, OK, `clede-fiveam-send-current-test`,

00:14:51.567 --> 00:14:53.033
and it will-- OK, have to compile

00:14:53.133 --> 00:14:54.750
this file first.

00:14:54.850 --> 00:14:55.983
OK, you don't like this...

00:14:56.083 --> 00:14:58.367
you compile the tests.

00:14:58.467 --> 00:15:03.667
OK... um... well...

00:15:03.767 --> 00:15:05.017
I don't have-- yeah, I don't have

00:15:05.117 --> 00:15:11.833
the switch here so let's...

00:15:11.933 --> 00:15:14.733
OK, yeah because I guess it's getting...

00:15:14.833 --> 00:15:19.583
sorry about this...

00:15:19.683 --> 00:15:22.983
Let's say we're going to send this test...

00:15:23.083 --> 00:15:28.667
It isn't working...

00:15:28.767 --> 00:15:36.967
OK, why are you not working...

00:15:37.067 --> 00:15:38.450
maybe because we have to go

00:15:38.550 --> 00:15:47.083
to the package `fiveam`.

00:15:47.183 --> 00:15:49.133
Yes, sorry... um...

00:15:49.233 --> 00:15:51.550
Yeah, so we're gonna go here, and

00:15:51.650 --> 00:15:54.117
we can say `fiveam-send-tests`,

00:15:54.217 --> 00:15:55.250
and there we have it.

00:15:55.350 --> 00:15:56.200
It will send the test

00:15:56.300 --> 00:16:00.217
that we are currently in, right.

00:16:00.317 --> 00:16:01.883
So that's the thing.

00:16:01.983 --> 00:16:04.000
Another interesting thing that I said is

00:16:04.000 --> 00:16:08.450
`clede-highlight-minor-mode`.

00:16:08.550 --> 00:16:11.567
Basically, work in `let`'s context

00:16:11.667 --> 00:16:13.450
to know where to highlight

00:16:13.550 --> 00:16:17.117
all the variables,

00:16:17.217 --> 00:16:20.217
and we can disable.

00:16:20.317 --> 00:16:21.833
What else do we have?

00:16:21.933 --> 00:16:24.100
So we have framework integration.

00:16:24.200 --> 00:16:25.900
You can go `clede-` and

00:16:26.000 --> 00:16:27.717
see what more commands are.

00:16:27.817 --> 00:16:29.767
`commands-run` are basically a way

00:16:29.867 --> 00:16:31.617
to define commands, you have a variable,

00:16:31.717 --> 00:16:35.317
which is `clede-commands-list`.

00:16:35.417 --> 00:16:37.233
Let's explain that you can get

00:16:37.333 --> 00:16:39.817
some system working

00:16:39.917 --> 00:16:42.617
or whatever command you want, right.

00:16:42.717 --> 00:16:46.083
Also you have `asdf` basic integration.

00:16:46.183 --> 00:16:48.067
You can go to a definition file

00:16:48.167 --> 00:16:51.050
of some of the systems are already loaded.

00:16:51.150 --> 00:16:53.667
For example, let's go to here,

00:16:53.767 --> 00:16:55.550
and we go to the definition file--

00:16:55.650 --> 00:16:57.917
there's the file, right?

00:16:58.017 --> 00:16:59.000
This is used because I'm sending

00:16:59.100 --> 00:17:00.800
commands for the REPL, so this

00:17:00.900 --> 00:17:04.117
functionality is not provided

00:17:04.217 --> 00:17:09.167
by CEDET or Semantic,

00:17:09.267 --> 00:17:11.633
but I can also get some sort

00:17:11.733 --> 00:17:19.717
of information for `asd` file,

00:17:19.817 --> 00:17:21.550
which is a work-in-progress,

00:17:21.650 --> 00:17:23.100
but you can go to some component file

00:17:23.200 --> 00:17:24.150
when you have a big `asd` file

00:17:24.250 --> 00:17:25.200
with lots of components

00:17:25.300 --> 00:17:27.783
and some other interesting thing.

00:17:27.883 --> 00:17:30.283
Like I said, that's a work-in-progress,

00:17:30.383 --> 00:17:34.967
Yes, so this is most of the functionality.

00:17:35.067 --> 00:17:37.000
The most interesting thing, I think,

00:17:37.100 --> 00:17:40.267
is the base for the foundation.

00:17:40.367 --> 00:17:43.000
So you can expand: let's go to source code,

00:17:43.100 --> 00:17:48.333
for example, that `fiveam`.

00:17:48.433 --> 00:17:49.900
So as we can see here, this is

00:17:50.000 --> 00:17:53.433
the `fiveam` integration, and to add it,

00:17:53.533 --> 00:17:58.233
I just define some new functions,

00:17:58.333 --> 00:18:01.983
and then you use this...

00:18:02.083 --> 00:18:04.150
set up a new form parser that we use

00:18:04.250 --> 00:18:06.400
to get some information

00:18:06.500 --> 00:18:09.150
about the `s-expression` top-level,

00:18:09.250 --> 00:18:10.433
and we define the names,

00:18:10.533 --> 00:18:11.617
we define information we want to take

00:18:11.717 --> 00:18:13.700
from the symbol and everything else.

00:18:13.800 --> 00:18:17.133
Also some [??] types

00:18:17.233 --> 00:18:19.367
that would be going to be added

00:18:19.467 --> 00:18:21.067
to the `imenu` thing:

00:18:21.167 --> 00:18:24.033
for example, `imenu test switch and test`.

00:18:24.133 --> 00:18:27.317
And then, these are, for example,

00:18:27.417 --> 00:18:29.333
some function to send information

00:18:29.433 --> 00:18:33.483
to the SLY, SLIME, or inferior Lisp

00:18:33.583 --> 00:18:37.050
depending on the Lisp that you're using.

00:18:37.150 --> 00:18:39.400
So I do not have more time.

00:18:39.500 --> 00:18:40.367
Sorry about that.

00:18:40.467 --> 00:18:44.917
Thank you very much.

00:18:45.017 --> 00:18:46.383
My name is Fermin.

00:18:46.483 --> 00:18:49.733
You can send me a mail in my mail,

00:18:49.833 --> 00:18:51.233
and that's my webpage.

00:18:51.333 --> 00:18:54.950
I hope you like it.