自動で //nolint を挿入する取り組み / Gopher's Gathering
by
utagawa kiki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
自動で //nolint を 挿入する取り組み id:utgwkk / @utgwkk (うたがわきき) 2025/1/18 Gopher's Gathering 1
Slide 2
Slide 2 text
自己紹介 (1) ● うたがわきき (@utgwkk) ○ 京都在住 ○ 実は福岡出身 ● 株式会社はてな ○ Webアプリケーションエンジニア 2
Slide 3
Slide 3 text
自己紹介 (2) ● 好きなパッケージ ○ reflect ○ go/ast 3
Slide 4
Slide 4 text
推しグルメ (1) 元祖 長浜屋 4
Slide 5
Slide 5 text
推しグルメ (1) 元祖 長浜屋 5
Slide 6
Slide 6 text
推しグルメ (2) ビアキチ 6
Slide 7
Slide 7 text
アジェンダ ● golangci-lintの //nolint directiveを自動で 挿入するCLIツール autonolint を作った - 私 が歌川です ● https://github.com/utgwkk/autonolint 7
Slide 8
Slide 8 text
golangci-lintについて ● https://golangci-lint.run/ ● Goのlinterをまとめて実行するrunner ● アンケート: golangci-lintを使っている? 8
Slide 9
Slide 9 text
あらすじ ● ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56 9
Slide 10
Slide 10 text
立ち位置 10 enable-allして disableする disable-allして enableする
Slide 11
Slide 11 text
立ち位置 11 enable-allして disableする disable-allして enableする ゆるやかに enableする
Slide 12
Slide 12 text
モチベーション ● golangci-lintで有効にするlinterをあとから 増やしたい ● 既存のコードが警告されまくる!!! ● たすけて〜〜 12
Slide 13
Slide 13 text
//nolint:xxx ● 指定した行 (ブロック) でだけlinterの警告を 抑制するためのコメント (directive) ● これを自動で入れていけば勝てる 13
Slide 14
Slide 14 text
Q. exclude-rulesじゃダメなの ● 同じファイル内でも新しく書くコードでは linterを有効にしたい ● あとから直すきっかけを作りやすくする ○ コメントがoutdatedなら解決できるはず ○ コロケーション的な思想 14
Slide 15
Slide 15 text
DEMO VSCode開いてください 15
Slide 16
Slide 16 text
実装 (1) ● golangci-lintの実行結果をパース ○ 実はJSON形式で出力できる ■ --out-format=json ○ 入力を加工する機能を丸投げ 16
Slide 17
Slide 17 text
実装 (2) ● //nolint を挿入すべき行を特定 ● 行ごとに書き出しつつ //nolint を挿入 ○ bufio.NewScanner 便利 17
Slide 18
Slide 18 text
実装 (3) ● テストではgolangci-lintを実際に走らせる ● autonolintを適用した後のコードで警告が出 ないことを確かめる ● E2Eテストみたいな感じですね 18
Slide 19
Slide 19 text
今後の課題 ● うまく動かないパターンもあるかも ○ 既に別の //nolint が書いてある行とか ○ 気づいたときに直します 19
Slide 20
Slide 20 text
関連研究 ● https://github.com/mizdra/eslint-intera ctive ○ eslint-disable-next-lineするかどうかなどを インタラクティブに指定できる ○ 丁寧 20
Slide 21
Slide 21 text
まとめ ● golangci-lintの //nolint directiveを自動で 挿入するCLIツール autonolint を作った - 私 が歌川です ● https://github.com/utgwkk/autonolint 21