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
350
住所正規化 API をLambda + Redis で動くようにしたお話
enkatsu
0
490
Open Street Map の歩き方
enkatsu
0
470
Other Decks in Programming
See All in Programming
Register is more than clipboard
satorunooshie
1
370
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
230
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
450
CSC509 Lecture 09
javiergs
PRO
0
280
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
510
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
750
NIKKEI Tech Talk#38
cipepser
0
370
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
Kotlin 2.2が切り拓く: コンテキストパラメータで書く関数型DSLと新しい依存管理のかたち
knih
0
280
Researchlyの開発で参考にしたデザイン
adsholoko
0
110
Inside of Swift Export
giginet
PRO
1
330
Introduce Hono CLI
yusukebe
6
3.3k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.9k
Documentation Writing (for coders)
carmenintech
76
5.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
How GitHub (no longer) Works
holman
315
140k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Producing Creativity
orderedlist
PRO
348
40k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Building Adaptive Systems
keathley
44
2.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Code Reviewing Like a Champion
maltzj
526
40k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
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