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
250
インデントの崩れる音がする
第65回スタジオ・アルカナ社内勉強会
インデントの崩れる音を聴く試み
enkatsu
December 01, 2020
Tweet
Share
More Decks by enkatsu
See All by enkatsu
NICOGRAPH 2022 で発表してきました
enkatsu
0
260
住所正規化 API をLambda + Redis で動くようにしたお話
enkatsu
0
410
Open Street Map の歩き方
enkatsu
0
460
Other Decks in Programming
See All in Programming
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
TYPO3 v13 – The road to LTS: What's new and new APIs
luisasofie_xoxo
0
210
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
340
コーンフレークから始める モデリング会話入門
ogurotakayuki
0
370
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.3k
Ruby GitHub Packages
bkuhlmann
0
630
What We Can Learn From OSS
inouehi
0
420
ONE WEDGE_company_guide
1wedge_one
0
490
Elm 0.19.0 Changes
bkuhlmann
0
490
エンターテイメント業界で利用されるAWS
demuyan
0
210
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
340
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
270
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
274
13k
Optimising Largest Contentful Paint
csswizardry
8
2.4k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Product Roadmaps are Hard
iamctodd
44
9.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
2
1.3k
Visualization
eitanlees
136
14k
Fireside Chat
paigeccino
21
2.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
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