clang-formatとかclang-checkをiOSアプリ開発(Objective-C)でも使ってみようという話。
clangͷtoolΛୟ͍ͯiOSΞϓϦ։ൃΛύϫʔΞοϓʂॴ ༑ଠ @tokoromiOS App ProgramerThese are “not” confidential sessions—please diffuse by your blogging and twitterpotatotips #5
View Slide
clangͱʁ• γʔϥϯά͡Όͳͯ͘ Ϋϥϯ (ˈklæŋ)•ϓϩάϥϛϯάݴޠ CɺC++ɺObjective-CɺObjective-C++ ͚ͷίϯύΠϥϑϩϯτΤϯυ྆ํͱWikipediaΑΓ
ࠓհ͢Δͷ• ίʔυϑΥʔϚολʔʢclang-formatʣ• γϯλοΫενΣοΫʢclang-checkͱ͔ʣ• ͕࣌ؒ͋Ε ιʔείʔυิʢclang -code-completion-atʣΓ͔͚ͨͬͨͲ·ͨࠓ
ίʔυϑΥʔϚολʔʢclang-format)
clang-format
Uncrustifyͱͷൺֱclang-format UncrustifyΠϯετʔϧ × େม ˕ ؆୯ઃఆ߲ ˚ ͬ͘͟Γ ○ ࡉ͔͍ߦࢦఆ ˕ Ͱ͖Δ × Ͱ͖ͳ͍ʢͨͿΜʣެࣜ ˕ clangͦͷ·· -
ΫοΫύουͰclang-formatΛ࠾༻• ͲͪΒࡉ͔͘ઃఆͨ͠ͱ͜ΖͰ100%ࢥ͍௨ΓʹͳΒͳ͍ʢͲΜ͙Γͷഎൺʣ• clangͷtoolͰ͋Δͱ͍͏҆৺ײ• ಛఆͷߦ͚ͩͷϑΥʔϚοτ͕Ͱ͖Δ
Πϯετʔϧ•http://blog.hardcodes.de/articles/63/building-clang-format-and-friends-on-osx-mountain-lion•ͱʹ͔͘makeʹ͕͔͔࣌ؒΓ·͢
Xcodeͳਓ• ClangFormat-Xcode ͱ͍͏plugin͕͑·͢https://github.com/travisjeffery/ClangFormat-Xcode
Vimͳਓ• vim-clang-format ͱ͍͏plugin͕͑·͢https://github.com/rhysd/vim-clang-format•prefixΩʔΛࣗ༝ʹઃఆͰ͖ΔͷͰVimͷඪ४ͷϑΥʔϚοτ༻Ωʔʮ=ʯͰϑΥʔϚοτՄೳ•ʮ==ʯͰݱࡏߦ͚ͩϑΥʔϚοτͱ͔ɺϏϡδϡΞϧϞʔυͰબͨ͠ߦ͚ͩʮ=ʯͰϑΥʔϚοτͱ͔
γϯλοΫενΣοΫ
clang-check$ clang-check hello.m --!hello.m:12:5: error: unknown type name 'MSString'; did you mean'NSString'?MSString *string1 = nil;^~~~~~~~NSString/System/Library/Frameworks/Foundation.framework/Headers/NSXPCConnection.h:13:29: note: 'NSString' declared here@class NSMutableDictionary, NSString, NSOperationQueue, NSSet, …;^1 error generated.Error while processing /Users/ytokoro/develop/objc/hello.m.
XcodeͷϓϩδΣΫτͷϑΝΠϧͷ߹…$ clang -x objective-c -arch i386 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu99 -fobjc-arc-fmodules -fmodules-cache-path=/Users/ytokoro/Library/Developer/Xcode/DerivedData/ModuleCache -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type-Wno-implicit-atomic-properties -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-receiver-is-weak -Wno-arc-repeated-use-of-weak -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-shorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wno-deprecated-implementations -DDEBUG=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -fexceptions -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -g -Wno-sign-conversion -fobjc-abi-version=2 -fobjc-legacy-dispatch -mios-simulator-version-min=7.0 -iquote /Users/ytokoro/Library/Developer/Xcode/DerivedData/
XcodeͷϓϩδΣΫτͷϑΝΠϧͷ߹…•ݱ࣮తͳܗͰclang-checkʹ͢ΦϓγϣϯΛಋग़͢Δज़͕·ͩΘ͔͍ͬͯͳ͍•clang-check͍͍ͨͷʹͩΕ͔ϔϧϓʂ
clang-check͕͏·͑͘ΔΑ͏ʹͳͬͨΒ•VimEmacsͰXcodeόϦͷγϯλοΫενΣοΫ/੩తղੳ͕؆୯ʹͰ͖ΔΑ͏ʹͳΔ•ίʔυΛॻ͍͍ͯΔ࠷தʹඇಉظʹγϯλοΫενΣοΫͯ͠هड़ϛεΛഁઢͰ໌ࣔͱ͔• Vimͳਓ vim-watchdogs ͱ͍͏plugin͔Βݺͼग़͢ͱ͍͍͔Μ͡ʹͳΓͦ͏https://github.com/osyo-manga/vim-watchdogs
ࠓ xcodebuild Ͱ༻͍ͯ͠·͢
ݱࡏͷ΅͘ͷνΣοΫڥ•vim-watchdogs ܦ༝Ͱ xcodebuild Λఆظతʹୟ͍ͯɺίϯύΠϧΤϥʔ͕͋ΕΤϥʔ༰ΛQuickFixͰදࣔ• .vimrc ͷઃఆ͜ͷ͋ͨΓhttps://github.com/tokorom/dotfiles/blob/master/.vimrc#L592-L604
More InformationYuta ToKoRo!iOS App Programer!@tokorom!!http://www.tokoro.me/