![ç»å](https://habrastorage.org/getpro/habr/post_images/c48/c5f/8d8/c48c5f8d8467cd4d7f7b10d5c9a35edd.png)
èŠããã«ãCLion 2017.2ã®ãªãªãŒã¹ã¯ä»¥äžã«ç¹åããŠããŸãã
- ã³ãŒãã¢ãã©ã€ã¶ãŒã®æ©èœã®åŒ·åïŒããã¯ãçµã¿èŸŒã¿ããŒã«ãšãµãŒãããŒãã£ããŒã«ã®äž¡æ¹ã«é©çšãããŸã-CLang-TidyïŒ
- æ°ãããããžã§ã¯ãã®äœæãŠã£ã¶ãŒãã®C ++ 17
- MSVCã®PCHãµããŒãïŒä»¥äžã®ãã¹ãŠã®ç¥èªã解èªããŸãïŒïŒ
- ãããã¬ãŒã§ã®åŒ·å¶ã¹ãããã€ã³
- gmockã«ãªã³ã¯ãããã¿ãŒã²ããã® Googleãã¹ãæ§æãèªåçã«äœæããŸã
- åãæ¶ãäžå¯èœãªéåæCMakeããã²ãŒã·ã§ã³ããã³ããŒãã¢ã¯ã·ã§ã³
- å šäœçãªããã©ãŒãã³ã¹ã®æ¹å
- ããã«å€ãïŒ
ä»ããè©Šãæºåã¯ã§ããŸãããïŒ åœç€Ÿã®ãŠã§ããµã€ãããç¡æã®30æ¥éããŒãžã§ã³ãããŠã³ããŒãããŠãã ãã ïŒ
詳现ãå¿ èŠã§ããïŒ ä»¥äžã®è©³çŽ°ã ã¡ãªã¿ã«ããããã®ç®çã®ããã«ç¹å¥ã«æºåããå°ããªãã¢ãããžã§ã¯ãã§ãã¹ãŠã®æ°æ©èœãè©Šãããšãã§ããŸãã
ã³ãŒãã¢ãã©ã€ã¶ãŒ
æ°ããã¯ã€ãã¯ãã£ãã¯ã¹ãšããŒãµãŒã®æ£ç¢ºæ§ã®æ¹å
CLionã®ã¯ã€ãã¯ä¿®æ£ã«ããã
Alt+Enter
ã1åã¯ãªãã¯ããã ãã§ã³ãŒãã®æœåšçãªåé¡ãä¿®æ£ã§ããŸãã ãã®ãªãªãŒã¹ã§ã¯ããããã®ããã€ããæ¹åããŸããã
ãããã£ãŠãããšãã°ã以åã¯æªäœ¿çšã®å€æ°ã®ã¿ãåé€ã§ããŸããã ãããããã®ãããªå€æ°ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãèªæã§ãªãå Žåãããã¯å®å šã«æ£ããä¿®æ£ã§ã¯ãªããããããŸããã çŸåšãCLionã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸããå€æ°ãåé€ããããå€æ°ãåé€ããŠåæåãçµäºããã³ãŒãã®ã»ãã³ãã£ã¯ã¹ãä¿åããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/29e/c85/3b9/29ec853b9f3bf4a492d46eda1109ca55.gif)
å¥ã®æ¹åç¹ã¯ãã£ã¹ãã§ãã CLionã¯ãæ瀺çãªãã£ã¹ããå¿ èŠãªç¶æ³ãç©æ¥µçã«ææããŠããŸãã ãããã以åã®ã¯ã€ãã¯ãã£ãã¯ã¹ãCèšèªã®ã¹ã¿ã€ã«ã§åãã£ã¹ãã®ã¿ã䜿çšããŠããå ŽåãC ++ããã®åãã£ã¹ãã®ããªã¢ã³ãïŒ
static_cast
ã
dynamic_cast
ã
const_cast
ã
const_cast
ã
![ç»å](https://habrastorage.org/getpro/habr/post_images/d23/e35/c71/d23e35c716c19f8b12ef95f63b27fce1.gif)
ãã®ãªãªãŒã¹ãµã€ã¯ã«ãéããŠãããŒãµãŒ/ãªãŸã«ããŒ/ã³ãŒãã¢ãã©ã€ã¶ãŒã®ãã°ä¿®æ£ã«ç©æ¥µçã«åãçµãã§ããŸããã å€ãã®å€æŽãããããããã¯ããŸããŸãªé åã«ãããŸãã
- ããã¯ã
std::enable_if
å Žåã®ããæ£ç¢ºãªã³ãŒãåæstd::enable_if
ã -
va_*
ãã¯ãã®ãµããŒãïŒãããã®ãã¯ãã§ã®ã¿äœ¿çšãããå€æ°ã誀ã£ãŠæªäœ¿çšãšããŠããŒã¯ããã¢ãã©ã€ã¶ãŒïŒã - ãã©ã¡ãŒã¿ã®ããã±ãŒãžãåãå ¥ããããã§ããã³ãã¬ãŒã以å€ã®åŒæ°ãåãå ¥ããé¢æ°ã®ããé©åãªåäœã
- GCC 5/6ã®STLã³ã³ããå ã®ãã¹ãããããã³ãã¬ãŒãã¿ã€ãã䜿çšããæ£ããäœæ¥ã
- ãããŠãã¯ããã«ã
ããã§ã次ã®ãªãªãŒã¹ã®èšç»ããããã«ç°ãªãããšãçŽã¡ã«äºçŽããå¿ èŠããããŸãã ã¹ãããä¿®æ£ã®ä»£ããã«ãèšèªãµããŒãå ã®ã³ãŒãã®ã¬ã€ã€ãŒå šäœãæžãçŽãäºå®ã§ãã
詳现ã¯èª¬æããŸãããã以åã®çµéšã«åºã¥ããŠãã»ãšãã©ã®åé¡ãã©ãã«ããããåæãããããã®é åãããã ã¢ããã§ãœãŒãããæ®ãã®åºã«ãªãåé¡é åãéžæãããšã ãèšããŸãã ãããã«å¯ŸåŠããŸãã ã¡ãªã¿ã«ã1幎åãç§ãã¡ã¯ãã§ã«ãªãŒããŒããŒã解決ã®ãã®ãããªæçŽãã«åŸäºããŠããããŠãŒã¶ãŒã¬ãã¥ãŒã¯éåžžã«å¥œæçã§ããã
Clang-Tidyçµ±å
çµã¿èŸŒã¿ã®ã³ãŒãã¢ãã©ã€ã¶ãŒã®æ¹åã«å ããŠãClang- Clang-Tidyã«åºã¥ã人æ°ã®ããæ¥éã«éçºãããŠããããŒã«ã«ãããããŸããŸãªãã§ãã¯ãšã¯ã€ãã¯ä¿®æ£ã®æ°ãå¢ããããšã«ããŸããã 圌ã®æ倧ã®äž»åŒµã¯ã C ++ã³ã¢ã¬ã€ãã©ã€ã³ããã®ãã§ãã¯ã®éšåçãªãµããŒãã§ããããã¯ãC ++ã³ãã¥ããã£ã®BjörnStraustrupããã³Herb Sutteréçºè ã«ãã£ãŠçŸåšç©æ¥µçã«æšé²ãããŠããŸãã ããããããã¯åœŒã®å¯äžã®å©ç¹ã§ã¯ãããŸããïŒ
éèŠãªåŒæ°ã¯ã ç¬èªã®ãã§ãã¯ãèšè¿°ããŠClang-Tidyã«è¿œå ããæ©èœã§ãã
Clang-Tidyã®CLionãžã®çµ±åãšã¯äœã§ããïŒ IDEãŠãŒã¶ãŒã«ãšã£ãŠãClang-Tidyããã®ãã§ãã¯ã¯ãçµã¿èŸŒã¿ã³ãŒãã¢ãã©ã€ã¶ãŒããã®ãã§ãã¯ãšåãã«èŠããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/3dc/8c5/680/3dc8c56808618076c1255a5738ab4968.gif)
ã€ãŸãããšã©ãŒã¯ãšãã£ã¿ãŒã§ãªã³ã¶ãã©ã€ã§åŒ·èª¿è¡šç€ºããã
Alt+Enter
ãäžéšã®ãã§ãã¯ã§ã¯ä¿®æ£ïŒã¯ã€ãã¯ä¿®æ£ïŒãå©çšå¯èœã§ãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/d85/dc6/7da/d85dc67da378f2d8b8b4e8adaf10c090.gif)
ããã©ã«ãã§ã¯ãClang-Tidyããã®ãã¹ãŠã®ãã§ãã¯ã¯å«ãŸããŠããŸããã ãªã³ã«ãªã£ãŠãããã®ãšãªãã«ãªã£ãŠãããã®ã¯ã ã³ã³ãã«ãšã³ã¹ããŒãžã§ç¢ºèªã§ããŸãã æ§æãå€æŽããã«ã¯ã[èšå®]ã®[èšå®] | [èšå®]ã«ç§»åããå¿ èŠããããŸãã ãšãã£ã¿ãŒ| æ€æ»| C / C ++ | å šè¬| Clang-Tidyã䜿çšãããšãã³ãã³ãã©ã€ã³åœ¢åŒã§ãªãã·ã§ã³ãèšå®ã§ããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/62e/826/c4e/62e826c4e8eb28302fb35b361b23e8f0.png)
ãããžã§ã¯ãã§æ¢ã«Clang-Tidyã䜿çšããŠãã人ã«ãšã£ãŠã¯ããã®è¡ã¯éåžžã«éŠŽæã¿ã®ãããã®ã§ããããã¯ãã³ãã³ãã©ã€ã³ããèµ·åæã«Clang-Tidyã«æž¡ããããªã³/ãªããã§ãã¯ã®ãªã¹ãã§ãã ãããã£ãŠãããšãã°ãC ++ã³ã¢ã¬ã€ãã©ã€ã³ã®ãã§ãã¯ã®ã¿ãå«ããã«ã¯
-*,cppcoreguidelines-*
ãèšè¿°ããå¿ èŠããããŸãã
èªåã®å°åæã¯ã©ãã§ããïŒ åæ§ã«ïŒ CLionã§äœ¿çšãããClang-Tidyã«è¿œå ãããšãCLionãšãã£ã¿ãŒã«èªåçã«è¡šç€ºãããŸãã 確ãã«ãæåŸã«æ£çŽã«èšããšãèæ ®ãã¹ã埮åŠãªç¹ãããã€ããããŸãã
- Clang-Tidyã¯ããªããžããªããååŸããå¿ èŠããããŸãããªããžããªã«ã¯ãå€æŽãå ããããŒãžã§ã³ããããCLionã§æ£ããåäœããŸãã LLVMã§ããããåãå ¥ãããïŒçŸåšã¬ãã¥ãŒäžïŒãå€æŽããã¹ã¿ãŒã«åæ ããããšããã«ãã¡ã€ã³ã®LLVMãã©ã³ãã䜿çšã§ããããã«ãªããŸãã ãªããžããªã®æ€çŽ¢å Žæãšããã°ã§èªãããšãã§ãããããã®è©³çŽ°ããèªã¿ãã ããã
- Clang-Tidyãå€æŽããããã®UIã®ãªãªãŒã¹ã¯ãªãªãŒã¹ã«å°éããããšãã§ããªãã£ããããä»ã®ãšãããçµã¿èŸŒã¿ã®Clang-Tidyã®ãã€ããªã眮ãæããå¿ èŠããããŸãã ããããããã¯ä»åŸã®ã¢ããããŒãã§ä¿®æ£ãããäºå®ã§ãã
æ°ãããããžã§ã¯ãã®äœæãŠã£ã¶ãŒãã®C ++ 17
ãã®å€æŽã®æŽå²ã¯ãCLion 2017.2ã«CMake 3.8ãå«ããããšããå§ãŸããŸããã ã€ãŸãããã®ããŒãžã§ã³ã®CMakeã§ã¯ãCMakeãã¡ã€ã«ã§èšèªæšæºã®ããŒãžã§ã³ãç¿æ £çã«ç€ºãããšãå¯èœã«ãªããŸãã
set(CMAKE_CXX_STANDARD 17)
-ãã®è¡ã¯ãæ°ãããããžã§ã¯ããäœæãããšãã«CLionã«ãã£ãŠçæãããŸãã ãããŠä»ãC ++æšæºã®ããããããŠã³ãªã¹ãã«æ°ãããããžã§ã¯ããäœæããããã®ãŠã£ã¶ãŒãã«ãè¿œå é ç®-C ++ 17ãç»å ŽããŸããã
MSVCã®PCH
çŽæãããšããã䜿çšããç¥èªã解èªããŸãã CLionã®ããªã³ã³ãã€ã«æžã¿ããããŒã®ãµããŒãïŒã€ãŸãããã®ãããªãã¡ã€ã«ããã®æåã®æ£ãã解å床ãšãšãã£ã¿ãŒã§ã®æ£ãã匷調衚瀺ïŒã¯ãæåŸã®ãªãªãŒã¹ã§ç»å ŽããŸããã ãã ããããã¯ãã¹ãŠã®ã³ã³ãã€ã©ã«é©çšãããããã§ã¯ãªããGCCããã³Clangã«ã®ã¿é©çšãããŸãã Microsoft Visual C ++ã³ã³ãã€ã©ïŒMSVCïŒã¯ãååã®ãªãªãŒã¹ãããå®éšã¢ãŒãã®CLionã§ãµããŒããããŠããŸãã ããããPCHã®äœ¿çšãå¿ èŠã§ãããæ®åããŠããã®ã¯MSVCã®å Žåã§ãã ããã§ããã®ã±ãŒã¹ã«ãã®ãµããŒããè¿œå ããŸããã ãã©ãã«ãŒã®ãªã¯ãšã¹ãã«ããã€ãã®åŸ®åŠãªå¶éãèšè¿°ãããŠããŸãã
ãããã¬ãŒ
CLionã§ãããã°ããããã®çã®ããã¬ãªã³èšç»ããããŸããããã®ãªãªãŒã¹ã§ã¯ããã°ãä¿®æ£ããçŸåšã®æ©èœãæ¹è¯ããããšãç®æšã§ããã
ãã®ãããCLion 2017.1ã®ãªãªãŒã¹åŸããããã°äžã«éã¢ã»ã³ãã©ã®ã³ãŒãã«å°éããããã«éåžžã®ã¹ãããã€ã³ã¢ã¯ã·ã§ã³ã䜿çšããããšã¯ããŸã䟿å©ã§ã¯ãªãããšãæããã«ãªããŸããã å€ãã®å ŽåããŠãŒã¶ãŒã¯ããããã¬ãŒã®éåžžã®æé ã§ãœãŒã¹ã³ãŒãããªããã¹ãŠã®ãã¬ãŒã ãCLionã«ã¹ããããããŸãã ãããã£ãŠãStep IntoïŒ
F7
ïŒã¯ãŸãã«ãã®ããã«æ©èœããŸãã éã¢ã»ã³ãã©ãŒã®ã³ãŒãã«ã¢ã¯ã»ã¹ããã«ã¯ãForce Step IntoïŒ
Shift+Alt+F7
ïŒã䜿çšããå¿ èŠããããŸãã
ãããã¬ã®ãã1ã€ã®éèŠãªå€æŽç¹ã¯ã ãããã°äžã«é åã衚瀺ããããã®ã¬ãžã¹ããªã®è¿œå ãªãã·ã§ã³ã§ãã å®éãããã©ãŒãã³ã¹ãåäžãããããã«ãCLionã¯äžåºŠã«é åå šäœãããŒãããŠè¡šç€ºããã®ã§ã¯ãªããç¹å®ã®æ°ã®èŠçŽ ã®ã¿ã衚瀺ããŸãã ããã©ã«ãã§ã¯ã50ã¢ã€ãã ã§ãã 次ã®50ã衚瀺ããã«ã¯ã[å±é]ãã¯ãªãã¯ããŸãã ãããã£ãŠã50èŠçŽ ããšã«ã
ããã§ã
cidr.debugger.value.maxChildren
ãªãã·ã§ã³ãã¬ãžã¹ããªã§äœ¿çšå¯èœã«ãªããŸãããããã¯ããã©ã«ãã§50ã«çãããExpandã®ã¯ãªãã¯ããšã«ããŒãããå¿ èŠãããèŠçŽ ã®æ°ã決å®ããŸãã
![ç»å](https://habrastorage.org/web/3c6/711/d6a/3c6711d6a8fe4430809d4cd5d33e1363.png)
å€ã倧ãããããšããããã°äžã«å€ã®èšç®ãé ããå¯èœæ§ãããããããã®ãªãã·ã§ã³ã«ã¯æ³šæãå¿ èŠã§ãã
Gmockããã³Google Testã®æ§æ
CLionã¯ãGoogle Testããã³Catchã®åäœãã¹ããã¬ãŒã ã¯ãŒã¯ããµããŒãããŠããŸãã ãµããŒãã«ã¯ããã¹ãçµæïŒãã¹ãã©ã³ããŒïŒã®åºåãåããçµã¿èŸŒã¿ã®ç¹å¥ãŠã£ã³ããŠãå«ãŸããŸãã ãã¹ãçµæãååŸããã«ã¯ããã¹ãã®å®è¡æã«Google TestãŸãã¯Catchã®ç¹å¥ãªæ§æã䜿çšããå¿ èŠããããŸãã Google Testã®å Žåãgtestã«ãªã³ã¯ãããCMakeå ã®ãã¹ãŠã®ã¿ãŒã²ããã«å¯ŸããŠèªåçã«äœæãããŸãã ãããŠä»ãgmockã«ãªã³ã¯ããŠãã人ãªã誰ã«ã§ãã
åãæ¶ãäžå¯èœãªCMakeããã²ãŒã·ã§ã³ããã³ããŒãã¢ã¯ã·ã§ã³
ãã®ãªãªãŒã¹ã®çŠç¹ã¯ãIDEã®ããã©ãŒãã³ã¹ã§ãã ããšãã°ãã³ã³ãã€ã©ãã¯ãïŒã³ã³ãã€ã©å®çŸ©æžã¿ãã¯ãïŒã®ããæé©ãªåŠçã«ãããã€ã³ããã¯ã¹äœææéãççž®ããŸããã ãã®æ¹åã§ä»ã®æ¹åããããŸããã
IDEã®ããã©ãŒãã³ã¹ã«é¢ããéåžžã®äœæ¥ã«å ããŠãããå€ãã®å¶åŸ¡æ©èœããŠãŒã¶ãŒã«ç§»è¡ããããšã«ããŸããã ãããè¡ãããã«ããŠãŒã¶ãŒã¯äœããã®çç±ã§éåžžã«é·ãæéããããã¢ã¯ã·ã§ã³ãåŸ ã€ããšãã§ããªãããã«ãéåæã§ãã£ã³ã»ã«ãããIDEã§ããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãå§ããŸãããããã°ããç°¡åã«ãã£ã³ã»ã«ã§ããŸãã
æåã®ãã®ãããªã¢ã¯ã·ã§ã³ã¯ãCMakeã®åèµ·åãšããã²ãŒã·ã§ã³ã¢ã¯ã·ã§ã³ïŒ ãµãã¯ã©ã¹ã«ç§»åããªãŒããŒã©ã€ããããé¢æ°ã«ç§»å ïŒã§ããã CMakeã®å Žåãæ©èœããCMakeã³ãã³ãããã£ã³ã»ã«ãããã¿ã³ã察å¿ããããŒã«ãŠã£ã³ããŠã«è¿œå ãããŸããã
![ç»å](https://habrastorage.org/getpro/habr/post_images/5ee/75a/8ed/5ee75a8ed33f82779dba6073297b76e9.gif)
ã³ãã³ããæ£åžžã«å®äºãããããã®ãŠã£ã³ããŠã®CMakeã³ãã³ãã®åºåã«ãã£ãŠãã£ã³ã»ã«ãããããç°¡åã«ç解ããããã«ã察å¿ããããã¹ãããã°ã®æåŸã«èªåçã«è¿œå ãããŸãïŒ [Finished] ã [Reloading cancelled] ïŒã
ããã²ãŒã·ã§ã³ã¢ã¯ã·ã§ã³ã®[ ãµãã¯ã©ã¹ã«ç§»å]ããã³[ ãªãŒããŒã©ã€ããããé¢æ°ã«ç§»å ]ã«ã€ããŠã¯ãéåæã§åäœããããã«ãªããŸããããããããã£ã³ã»ã«ããã«ã¯ãçµæã衚瀺ããããããã¢ãããŠã£ã³ããŠã®å€åŽã®é åãã¯ãªãã¯ããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/454/231/d0e/454231d0e8d243b062d09df14a7e1a97.gif)
ãã¹ã€ã³ã¿ãŒãã§ã€ã¹ã®æ€çŽ¢ãããŒãžã§ã³ç®¡çã·ã¹ãã ã®ãµããŒãã®æ¹åãªã©
CLionã¯IntelliJãã©ãããã©ãŒã ã«åºã¥ãã補åã§ããã€ãŸãã次ã®å€æŽãé©çšãããŸãã
- ãã¹æ€çŽ¢ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã§ã®æ€çŽ¢ã®æ¹å
- Git RevertãRewordãã³ãããã¡ãã»ãŒãžã®ç·šéèšå®ãªã©ããã€ãã£ãVCSãµããŒãã®æ°æ©èœ
- 匷åãããé«è§£å床ã¢ãã¿ãŒã®ãµããŒãïŒHiDPIïŒ
ãããã®è©³çŽ°ã«ã€ããŠã¯ãHatelliã®IntelliJ IDEA 2017.2ã®ãªãªãŒã¹ã«é¢ããæçš¿ãã芧ãã ããã
éçºè åŒè·å£«ïŒåãCatchãã¬ãŒã ã¯ãŒã¯ã®èè ïŒã«ããè±èªã®CLion 2017.2ã®æ°æ©èœã®ãã¢ïŒ
èå³ãããå Žåã¯ãäŒç€Ÿã®å ¬åŒWebãµã€ããã30æ¥éã®ç¡æè©ŠçšçãããŠã³ããŒãããŠãã ããã äŸ¡æ Œã»ã¯ã·ã§ã³ã§ãµãã¹ã¯ãªãã·ã§ã³ã®ã³ã¹ãã確èªã§ããŸãã
è±èªã®ããã°ã®èšäºãšæŽæ°ãã楜ãã¿ã«ã ã³ã¡ã³ãã§ã質åã«ãçãããŸãã
JetBrains CLionããŒã
éçºãžã®æ欲