Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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