Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Xcodeでなるべく早くtypoに気付きたい #love_swift/notice typo asap earlier on xcode

fromkk
December 03, 2019

Xcodeでなるべく早くtypoに気付きたい #love_swift/notice typo asap earlier on xcode

# typoについて
typographical errorの略で、コンピューターにおけるキーボードのタイプミスを指します。

# Timersにおける活動
これまで弊社ではPull Request作成時にBitrise上でDangerを実行し、その中でcspellというツールを呼んでいました。
課題もあって、Pull Requestの作成後だと気づくのが遅いなと思いました。
できればtypoはコーディング中に気付きたいです。

# Xcodeでwarningを表示する方法
Run Script中に決まった形式で出力すれば良いと言う事がわかりました。
typoの場所さえわかればwarningを表示出来る事が分かりました。

# スペルチェックの方法
Xcode上で動作すれば良いのでAppKitが利用出来ます。
NSSpellCheckerというクラスを発見しました。
warningを無視したい場合は無視単語リストを設定できたり、スペルチェックをした言語の設定が出来たり、スペルをチェックして誤りの箇所の位置の範囲が取得出来たり、スペルの修正の提案が可能です。

# 作成したツールについて
出来そうということがわかったのでSpellChecker( https://github.com/fromkk/SpellChecker )というツールを作成しました。
使い方としてはSpellCheckerにハイフンを2つつなげた後でチェックしたいファイルの一覧をスペース区切りで渡します。
ymlファイルのパスを渡す事でwarningの無視をしたい単語を登録することも出来ます。

# 謝辞
NSSpellCheckerの使い方を調べている中でezuraさんの同様のツールがあることを発見しました。用途が完全に被っていたので開発を続けるかとても悩んだのですが、ezuraさんの方はSwiftファイル専用に見えたのでそのまま開発を継続することを決意しました。もし、利用したいなと思った方は、気に入った方を利用して頂ければと思います。
NSSpellCheckerの使い方はとても参考にさせて頂きました。

fromkk

December 03, 2019
Tweet

More Decks by fromkk

Other Decks in Programming

Transcript

  1. 1SPpMF struct Profile { let name = "Kazuya Ueoka" let

    twitter = "@fromkk" let github = "fromkk" let qiita = "fromkk" let company = "Timers Inc." } •
  2. 8 # cspell # npm install -g cspell added_and_modified_files =

    git.added_files + git.modified_files added_and_modified_files.each do |file_path| next unless file_path =~ /.swift$/ stdout, status = Open3.capture2("npx", "cspell", file_path, "-c", "cspell.json") next if status.success? stdout.split("\n").each do |line| next unless matches = /\w.swift:(\d+).*-\sUnknown\sword\s\((\w+)\)/.match(line) line_number = matches[1].to_i word = matches[2] warning = "typo? #{word}" warn(warning, file: file_path, line: line_number) end end ࢀߟIUUQTTQFBLFSEFDLDPNZILBQMBOBVUPNBUFBMMUIFUIJOHT TMJEF
  3. 9

  4. 9DPEFʹ3VO4DSJQUΛ௥Ճ if ! [ -f /usr/local/bin/SpellChecker ]; then echo "SpellChecker

    not installed" exit 0 fi git_path=/usr/local/bin/git files=$($git_path diff --diff-filter=d --name-only -- "*.swift" "*.h" "*.m") if (test -z $files) || (test ${#files[@]} -eq 0); then echo "no files changed." exit 0 fi options="" for file in $files do options="$options $SRCROOT/$file" done /usr/local/bin/SpellChecker -yml $SRCROOT/spell-checker.yml -- $options
  5. 13

  6. • αʔόʔαΠυΤϯδχΞ (PHP, Golang, AWS) • AndroidΤϯδχΞ (Kotlin) • iOSΤϯδχΞ

    (Swift) TimersͰ͸ݱࡏΤϯδχΞશ৬छ࠾༻தʂ ৄ͘͠͸”Timers”Ͱݕࡧ