Walking through the source
code of an OSS library(ESLint)
'SPOUFOE&OHJOFFS-5#FFS#BTI
@kkeeth @kuwahara_jsri @kkeeth
Slide 2
Slide 2 text
Who am I
const my_info = {
Name: ‘Kuwahara KEETH Kiyohito’,
Company: ‘Yumemi Inc’,
Position: ‘Servant Leader/Board’,
Skills: ‘Riot.js/Next.js/Chit-chat’,
}
Slide 3
Slide 3 text
Published
Slide 4
Slide 4 text
OQNKTDPNdLLFFUI
Slide 5
Slide 5 text
🙇 Sorry … 🙇
This slide is written in English. However, I am
still learning English, and there may be some
inappropriate expressions.
Plz feedback for me called “Masakari”
about my talk!!
Slide 6
Slide 6 text
Let’s start 😆
Slide 7
Slide 7 text
one day in development 💁
Slide 8
Slide 8 text
*NDPODFSOFEBCPVUUIFCFIBWJPS
PGUIJTEFQFOEFOUMJCSBSZ🤔
*TOUUIBUBIVSEMFUPCFHJOXJUI
$BOZPVSFBMMZSFBEJU
me
my “inner voice”
-FUTSFBEUIFDPEFPGUIJTMJCSBSZ
me
Slide 9
Slide 9 text
:FT
CVU*EPOUVOEFSTUBOEXIBU
UIJTMJCSBSZJTEPJOHBOE
.BZCFZPVEPOUIBWFUIFUJNF
*TUIBUFTTFOUJBMMZXIBUZPVXBOUUP
TPMWF
me
my “inner voice”
*UEFQFOETPOUIFUIJOH
CVU
JOUFSJNTVQQPSUDBOCFBMJBCJMJUZ
MBUFSPO
me
Slide 10
Slide 10 text
#VUFWFOJGZPVVOEFSTUBOEUIF
TPVSDFDPEF
XIBUEPZPVEPXJUI
JU
my “inner voice”
*GJUTBCVH
JUTCFTUUPDSFBUFBO
JTTVFPS13
me
8IFOEPZPVUIJOLUIBUXJMMCF
SFTPMWFE %PZPVUIJOLJUXJMMCF
EPOFPOUJNF
my “inner voice”
Slide 11
Slide 11 text
*GOPU
UIFXPSTUUIBUDBOIBQQFOJT
UIBUXFGPSLUIFSFQPTJUPSZBOE
MPBEUIFDIBOHFT
8IPJTHPJOHUPNBJOUBJOJU
8IBUTUIFDPTU
me
my “inner voice”
)NNN*HVFTTTP0LBZ
MFUT
KVTUBTTVNFUIBUTUIFEFTJHOJUT
TVQQPTFEUPCF😅
me
Slide 12
Slide 12 text
*GOPU
UIFXPSTUUIBUDBOIBQQFOJT
UIBUXFGPSLUIFSFQPTJUPSZBOE
MPBEUIFDIBOHFT
8IPJTHPJOHUPNBJOUBJOJU
8IBUTUIFDPTU
me
my “inner voice”
)NNN*HVFTTTP0LBZ
MFUT
KVTUBTTVNFUIBUTUIFEFTJHOJUT
TVQQPTFEUPCF😅
me
none of your business ʘ(^o^)ʗ
Slide 13
Slide 13 text
I feel like I could
learn more from
reading codes 😆
Slide 14
Slide 14 text
Then, let's read the source code
of ESLint!
Slide 15
Slide 15 text
*NBHFCZIUUQTFTMJOUPSH
Slide 16
Slide 16 text
Basically, we start
from the module
written in the main of
package.json💁
Slide 17
Slide 17 text
Next, let’s look at
“bin” dir.
Slide 18
Slide 18 text
Only 3 helper
functions and an
executable
function here💁
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
Next, let’s look at “lib/cli.js”
fi
le.
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
“cli.js” depends on “ESLint” module
“ESLint” module depends on “CLIEngine” module
Slide 23
Slide 23 text
I found out later that...
Slide 24
Slide 24 text
There exists a
dependency map💁
*NBHFCZIUUQTHJUIVCDPNFTMJOUFTMJOUCMPCNBJOEPDTTSDEFWFMPQFSHVJEFBSDIJUFDUVSFEFQFOEFODZTWH
Slide 25
Slide 25 text
Knowledge 1:
Overall design
Slide 26
Slide 26 text
Unified format
for writing each module📝
Slide 27
Slide 27 text
Uni
fi
ed format
for writing each
module
Slide 28
Slide 28 text
Uni
fi
ed format
for writing each
module
Slide 29
Slide 29 text
util objects rich in methods📝
Slide 30
Slide 30 text
w /PEFKTlVUJMzPCKFDU
w MJCSVMFTVUJMTBTUVUJMT
w MJCTIBSFETUSJOHVUJMT
w MJCTIBSFETBTUVUJMT NFUIPET
SFHHFYQBUUFSOT
w MJCTPVSDFDPEFUPLFOTUPSFVUJMT
the number of using methods
Slide 31
Slide 31 text
Knowledge 2:
Node.js’s “util”
module is useful
Slide 32
Slide 32 text
w VUJMJOTQFDU
w VUJMGPSNBU
w VUJMJOIFSJUT
w VUJMMQSPNJTJGZ ˡ8IBUTVSQSJTFENFXBTUIJT
Methods used by ESLint
Slide 33
Slide 33 text
*NBHFCZIUUQTOPEFKTPSHBQJVUJMIUNM
Slide 34
Slide 34 text
Knowledge 3:
Generator functions
in JavaScript
Slide 35
Slide 35 text
Do you understand
the following code?💁
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
Let's take a look at
some sample codes💁
Slide 38
Slide 38 text
No content
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
No content
Slide 41
Slide 41 text
more detail, show MDN👉
Slide 42
Slide 42 text
An afterthought
Slide 43
Slide 43 text
An afterthought
w /PUXSJUUFOJOUZQFTDSJQU UZQFEF
fi
OJUJPOTBSFXSJUUFO
w "OZXBZ
UIFEPDVNFOUBUJPOJTFYUFOTJWF
w +4%PDJTXFMMEPDVNFOUFE
BTJTNE
w %PDVNFOUBUJPOJTVTJOH&MFWFOUZKT UZ
w 5PPMTGPS44(
w %PDVNFOUBUJPOBQQJTFBTJFSUPWJFXUIBOUIFP
ff
i
DJBMTJUF
w 5IFSFBSFBMTPDPODFQUTPGMBZPVUBOEDPNQPOFOUT
Slide 44
Slide 44 text
No content
Slide 45
Slide 45 text
No content
Slide 46
Slide 46 text
Thoughts💁
Slide 47
Slide 47 text
Thoughts
w 8FEPOUIBWFUPVOEFSTUBOEJUUPUBMZ👍
w %FTJHOJOHGBNPVTMJCSBSJFTJTBHSFBUMFBSOJOHFYQFSJFODF👍
w 8FDBOJNQSPWFNZTLJMMTGPSTVSF👍
w *GZPV
fi
OEJUEJ
ff
i
DVMU
ZPVDBOSFBEJUXJUITPNFPOFFMTF👍
w *GZPVIBWFUSPVCMF
JU`THPPEUPSFBEGSPNUIFUFTUDPEF👍