blob: b10e834a74f9a26bf6c82c7da4253db34729b8fb (
plain) (
tree)
|
|
WEBVTT
00:00.240 --> 00:00:02.639
hi my name is eduardox i'm the author of
00:02.639 --> 00:00:05.040
an mx package called ev and this talk is
00:05.040 --> 00:00:07.200
about a new feature of ev called test
00:07.200 --> 00:00:08.400
blocks
00:08.400 --> 00:00:10.320
let's start by demo
00:10.320 --> 00:00:12.559
this is a file in lua that defines these
00:12.559 --> 00:00:14.160
two functions here
00:14.160 --> 00:00:16.720
and with it if we type f8 several times
00:16.720 --> 00:00:18.000
here
00:18.000 --> 00:00:20.880
the f8s create a lower apple here and
00:20.880 --> 00:00:24.400
then they send these lines to the rebel
00:24.400 --> 00:00:27.039
where this line here loads this file
00:27.039 --> 00:00:29.679
into the repo and these other lines here
00:29.679 --> 00:00:33.200
are tests for these lines
00:33.200 --> 00:00:35.120
there's a lot of information here so let
00:35.120 --> 00:00:40.480
me organize them in a more visual way
00:40.480 --> 00:00:42.960
this is our file in lua
00:42.960 --> 00:00:45.760
lua sees this thing as a as a multi-line
00:45.760 --> 00:00:47.760
comment but we are going to see it as a
00:47.760 --> 00:00:51.920
test block and eev mode is active and so
00:51.920 --> 00:00:54.480
f8 does the right thing
00:54.480 --> 00:00:57.360
uh these three lines here set up the
00:57.360 --> 00:01:00.079
target buffer running a lower apple you
01:00.079 --> 00:01:03.520
can see the the prompt of the rebel here
01:03.520 --> 00:01:05.360
and these lines here are sent to the
01:05.360 --> 00:01:07.200
rebel
01:07.200 --> 00:01:09.680
and when we type f8 on the line that
01:09.680 --> 00:01:10.720
starts
01:10.720 --> 00:01:13.600
with the red star like these lines here
01:13.600 --> 00:01:15.759
what if it does is that it sends the
01:15.759 --> 00:01:18.240
rest of the line sorry it
01:18.240 --> 00:01:21.119
executes the rest of the line as lisp
01:21.119 --> 00:01:23.920
so it executes the three effects here
01:23.920 --> 00:01:26.240
executes these lines as lisp and they
01:26.240 --> 00:01:29.520
set up the target buffer here
01:29.520 --> 00:01:31.759
and when we type f8 on the line that
01:31.759 --> 00:01:34.159
does not start with the red star
01:34.159 --> 00:01:36.640
the f8 sends the line to the target
01:36.640 --> 00:01:38.799
buffer and moves down
01:38.799 --> 00:01:41.040
and this line loads this file under
01:41.040 --> 00:01:45.200
apple and these lines are tests
01:45.200 --> 00:01:47.520
so we just saw how to use an existing
01:47.520 --> 00:01:50.000
test block let's now see how to create a
01:50.000 --> 00:01:52.640
new test block we just have to run this
01:52.640 --> 00:01:55.680
meta x e insert test block
01:55.680 --> 00:01:58.079
or meta x euat
01:58.079 --> 00:02:01.439
and the result depends on the major mode
02:01.439 --> 00:02:03.920
uh let's see let's understand that that
02:03.920 --> 00:02:06.079
by looking at the source code
02:06.079 --> 00:02:08.720
eeit is an alias to this function here
02:08.720 --> 00:02:10.640
and this function is just five lines of
02:10.640 --> 00:02:12.800
code plus a dot string
02:12.800 --> 00:02:14.560
and the dot string explains that if the
02:14.560 --> 00:02:16.480
major mode is full mode then this
02:16.480 --> 00:02:18.800
function tries to call
02:18.800 --> 00:02:21.360
a function called e insert test plot
02:21.360 --> 00:02:24.800
test full mode if that function exists
02:24.800 --> 00:02:27.280
and that if that function does not exist
02:27.280 --> 00:02:29.680
then it yields an error
02:29.680 --> 00:02:32.080
and here's an example of one such
02:32.080 --> 00:02:34.239
function that's a function that
02:34.239 --> 00:02:37.280
inserts a test block in haskell mode
02:37.280 --> 00:02:40.319
and here we can see two functions like
02:40.319 --> 00:02:42.480
this one for haskell mode and one for
02:42.480 --> 00:02:46.080
javascript mode
02:46.080 --> 00:02:48.560
uh these functions look quite similar
02:48.560 --> 00:02:49.440
but
02:49.440 --> 00:02:52.720
their effects look quite different
02:52.720 --> 00:02:55.760
to make this comparison here i started
02:55.760 --> 00:02:57.280
by writing
02:57.280 --> 00:02:59.680
by creating seven files each one in a
02:59.680 --> 00:03:01.120
different language
03:01.120 --> 00:03:03.040
and initially each one of these files
03:03.040 --> 00:03:04.959
only had a comment with the name of the
03:04.959 --> 00:03:08.239
language so c haskell javascript org
03:08.239 --> 00:03:10.560
mode etc
03:10.560 --> 00:03:13.040
and in each one of these files i typed
03:13.040 --> 00:03:16.959
meta x eeit to insert the test block
03:16.959 --> 00:03:18.800
so here we can see that these test
03:18.800 --> 00:03:20.319
blocks are different
03:20.319 --> 00:03:22.080
for example the syntax for multi-line
03:22.080 --> 00:03:24.000
comments is different depending on the
03:24.000 --> 00:03:25.200
language
03:25.200 --> 00:03:27.760
uh this block here that selects which
03:27.760 --> 00:03:30.319
rebel to run is also different
03:30.319 --> 00:03:33.200
this line here that shows how that
03:33.200 --> 00:03:34.879
tells the repo to
03:34.879 --> 00:03:37.680
load the current file is also different
03:37.680 --> 00:03:39.680
depending on the language
03:39.680 --> 00:03:41.840
in some cases i had to improvise a bit
03:41.840 --> 00:03:43.360
for example
03:43.360 --> 00:03:46.400
uh to implement test blocks in shell
03:46.400 --> 00:03:48.560
mode i had to use this
03:48.560 --> 00:03:52.560
this with syntax using a rear document
03:52.560 --> 00:03:55.280
in tcl i also had to improvise a bit and
03:55.280 --> 00:03:57.840
in some cases i had to improvise a lot
03:57.840 --> 00:04:01.120
for example in org mode there isn't an
04:01.120 --> 00:04:03.360
obvious rebel to run and there isn't an
04:03.360 --> 00:04:05.280
obvious way to load the
04:05.280 --> 00:04:08.080
the current org file into the repo so
04:08.080 --> 00:04:11.680
the default action of meta x eeit
04:11.680 --> 00:04:14.400
in log mode is just to insert this thing
04:14.400 --> 00:04:15.439
here
04:15.439 --> 00:04:17.519
that we can use to run a
04:17.519 --> 00:04:22.320
shell in a rebel
04:22.320 --> 00:04:23.199
so
04:23.199 --> 00:04:25.680
these functions are quite similar and in
04:25.680 --> 00:04:27.440
the beginning i was writing all of them
04:27.440 --> 00:04:29.680
by hand but then i got bored and i wrote
04:29.680 --> 00:04:32.320
a function to help you write functions
04:32.320 --> 00:04:33.840
like that
04:33.840 --> 00:04:35.759
this function is called
04:35.759 --> 00:04:38.080
find e-uit-links and it creates a
04:38.080 --> 00:04:39.919
temporary buffer
04:39.919 --> 00:04:41.680
and the contents of this temporary
04:41.680 --> 00:04:43.440
buffer depends on the major mode for
04:43.440 --> 00:04:45.680
example if the current mode is python
04:45.680 --> 00:04:48.880
mode then running this function here
04:48.880 --> 00:04:51.840
creates a temporary buffer that lets me
04:51.840 --> 00:04:53.840
write the support for
04:53.840 --> 00:04:56.880
test blocks into python mode or rewrite
04:56.880 --> 00:04:59.040
the function that supports test blocks
04:59.040 --> 00:05:00.880
and python mode
05:00.880 --> 00:05:03.600
so if i'm in python mode and i run this
05:03.600 --> 00:05:06.639
i get a temporary buffer like this
05:06.639 --> 00:05:08.800
in which this thing is my template for
05:08.800 --> 00:05:11.120
the function usually this thing is
05:11.120 --> 00:05:13.039
totally wrong i have to rewrite to this
05:13.039 --> 00:05:13.919
string
05:13.919 --> 00:05:16.400
but the rest is right you can see python
05:16.400 --> 00:05:18.720
mode here in the name of the function so
05:18.720 --> 00:05:21.360
we have to edit this and save that to
05:21.360 --> 00:05:22.840
our home
05:22.840 --> 00:05:25.520
slash.mx and by the way these things
05:25.520 --> 00:05:28.880
here hyperlinks to many different things
05:28.880 --> 00:05:31.600
this elias piper link here
05:31.600 --> 00:05:34.160
points to the source code to the section
05:34.160 --> 00:05:35.280
in which
05:35.280 --> 00:05:36.400
these
05:36.400 --> 00:05:38.400
functions are defined
05:38.400 --> 00:05:40.320
so you can see this here the function
05:40.320 --> 00:05:41.759
that supports c
05:41.759 --> 00:05:43.440
the function for haskell the function
05:43.440 --> 00:05:46.400
for javascript etc
05:46.400 --> 00:05:49.440
and that's it this is a five-minute talk
05:49.440 --> 00:05:50.960
so i can't say much
05:50.960 --> 00:05:52.639
if you want more information or if you
05:52.639 --> 00:05:55.120
want to see real world examples how i
05:55.120 --> 00:05:58.000
use test blocks etc etc see this page
05:58.000 --> 00:06:00.479
here and i do not have time to explain
06:00.479 --> 00:06:02.560
this by the way here
06:02.560 --> 06:06.080
so that's it thanks
|