Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
インデントの崩れる音がする
Search
enkatsu
December 01, 2020
Programming
0
280
インデントの崩れる音がする
第65回スタジオ・アルカナ社内勉強会
インデントの崩れる音を聴く試み
enkatsu
December 01, 2020
Tweet
Share
More Decks by enkatsu
See All by enkatsu
NICOGRAPH 2022 で発表してきました
enkatsu
0
340
住所正規化 API をLambda + Redis で動くようにしたお話
enkatsu
0
490
Open Street Map の歩き方
enkatsu
0
470
Other Decks in Programming
See All in Programming
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1k
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
840
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
190
NPOでのDevinの活用
codeforeveryone
0
860
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
160
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
700
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
0
240
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
20
8.1k
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
940
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
280
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
180
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
2.2k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
336
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Become a Pro
speakerdeck
PRO
29
5.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Gamification - CAS2011
davidbonilla
81
5.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
970
A designer walks into a library…
pauljervisheath
207
24k
Transcript
インデントの崩れる⾳がする 2020/10/30 スタジオ・アルカナ社内勉強会 #65 株式会社スタジオ・アルカナ 遠藤勝也
背景 PRのレビューをしていると、頻繁にインデントが崩れていることがあった EditorConfigは設定されてる ⌘ + Opt + l で整形している 崩れるファイルは
.blade
原因 <div> <div> {{ $name }} </div> </div> 中の <div>
を削除して、 ⌘ + Opt + l で整形 <div> {{ $name }} </div> bladeの構⽂は無視してHTMLのみ整形される
そんなことはどうでもよくて
インデントの崩れる⾳が鳴ったら⾯⽩そうだと思った
デモ
⼿法 エディタのプラグインを開発する インデント崩れを検知する ※ 今回は「インデントが崩れた」というより 「インデントが削除されて⾏頭がスペース以外になった」という場合に絞る
エディタのプラグインを開発する エディタの選定 Visual Studio Code Atom Sublime Text Jetbrains IDE
エディタのプラグインを開発する Visual Studio Code CodeよりAtom派 Atom プラグイン開発の⼿順が結構更新されている印象なのでドキュメントを探すのが⼤ 変そう Sublime Text
最近使ってないからなー Jetbrains IDE Javaだし⾳を鳴らすことも簡単に出来そう
IntelliJ IDEAで開発する テンプレートリポジトリから https://jetbrains.org/intellij/sdk/docs/basics/getting_started.html https://github.com/JetBrains/intellij-platform-plugin-template IntelliJ IDEAのプロジェクト作成から https://qiita.com/Vexus2/items/e04a21f00e467b7ac8ad
⾳が鳴るまでの流れ . IDEを起動する . プラグインを有効化する . ファイルを編集してインデントを崩す . 保存する .
⾳が鳴る!
プラグイン有効化ショートカットの設定 resources/META-INF/plugin.xml で設定できる <keyboard-shortcut keymap="$default" first-keystroke="shift meta F12"/> これで shift
meta F12 を押すと、 com.intellij.openapi.actionSystem.AnActionEvent を継承したクラスの public void actionPerformed(AnActionEvent e) が実⾏される
ファイルの変更時に処理を実⾏する public void actionPerformed(AnActionEvent e) で com.intellij.openapi.vfs.newvfs.BulkFileListener を 実装したクラスを設定する。 //
this.createIndentPatrolListener() はBulkFileListener を実装したクラスを返すメソッド BulkFileListener listener = this.createIndentPatrolListener(project); this.connection = project.getMessageBus().connect(); this.connection.subscribe(VirtualFileManager.VFS_CHANGES, listener);
インデント崩れを検知する diff diff-match-patch diff4j ⾃前でパーサを書く
diff-match-patchを採⽤
class Main { public static void main(String[] args) { -
System.out.println("Hello, World!!"); +System.out.println("Hello, World!!"); } } 差分を取って改⾏の後にスペースが削除されていることを検出する
⾳を鳴らす javax.sound.sampled で鳴らせる
結果 エディタから⾳がなって嬉しい いまさらだけどJavaのStream APIかっこいい 崩れ⽅によって⾳の迫⼒を変えたい インデント崩れの検出⼿法を再検討したい
参考⽂献 https://jetbrains.org/intellij/sdk/docs/intro/welcome.html https://github.com/JetBrains/intellij-platform-plugin-template#sample-code