Slide 1

Slide 1 text

ほりしょー Go のパーサを作って VSCode 拡張作ってみた!

Slide 2

Slide 2 text

ほりしょー(堀崎祥) ラクスル23 新卒入社 ハコベル所属 サーバーサイドエンジニア Go / Ruby / DDD 自己紹介

Slide 3

Slide 3 text

なに作ったの?

Slide 4

Slide 4 text

Go Getter Setter Go のstruct からGetter, Setter を自動生成 してくれるVSCode 拡張 VSCode Marketplace GitHub

Slide 5

Slide 5 text

なぜ作ったのか? 既存拡張では 自動入力できない 構文が存在 生成コードの テンプレートを 用意したい Go の言語仕様を おさらいしたい 1 2 3

Slide 6

Slide 6 text

なぜ作ったのか? 入力フォーマット を自由に設定 したい 既存拡張では 自動入力できない 構文が存在 Go の言語仕様を おさらいしたい 1 2 今日は ←    → の話 3 独自パーサ 言語仕様

Slide 7

Slide 7 text

パーサ VSCode 拡張 独自パーサの話 既存拡張は正規表現ベース → 複雑な型(複数行に及ぶ型, struct とか) が存在すると解析できない。 ならば、言語仕様に則った パーサを作ってしまおう パーサジェネレータの Flex, Bison(ts-jison) を使用して パーサを作成 (ts-jison) Flex, Bison パーサ生成

Slide 8

Slide 8 text

パーサジェネレータ 元はGCC に使用 Ruby, Go などにも使用されていた パーサを作成するためのプログラム 細かい処理を気にせず 構文規則を記述しパーサを作成可能 Flex( 字句解析), Bison( 構文解析) 頑張って構文規則を書いてくのみ! BNF 記法

Slide 9

Slide 9 text

言語仕様は? Go では言語仕様が公開されている The Go Programming Language Specification EBNF 記法で記述されているため Bison に移行しやすい。 言語仕様は薄いので頑張って読む!

Slide 10

Slide 10 text

なぜ作ったのか? 入力フォーマット を自由に設定 したい 既存拡張では 自動入力できない 構文が存在 Go の言語仕様を おさらいしたい 1 2 3 独自パーサ 言語仕様 今日は ←    → の話 (VSCode 拡張の話はしません🙇) 構文規則を頑張って書く Go のSpec を漁る

Slide 11

Slide 11 text

ぜひ使ってみ てください〜 Go Getter Setter VSCode Marketplace GitHub