CLion 2019.1: ClangFormat, Clangd рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛрдб, рдореЗрдореЛрд░реА рд╡реНрдпреВ, рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд░реНрдерди

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

CLion рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдмрдбрд╝реА рдЦрдмрд░реЗрдВ рд╣реИрдВ - рдЯреАрдо рдХрд╛ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рд╣рд┐рд╕реНрд╕рд╛, рдЕрдиреНрдп рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдХ рдирдП рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛, рдирдП рдХреВрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЬреБрдбрд╝ рдЧрдП, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рджрд┐рди, рд╣рдордиреЗ рдЗрд╕ рд╕рд╛рд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рдХрд┐рдпрд╛ CLOS 2019.1 !

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдПрдХ рд╕рд╛рде рдХрдИ рдореЛрд░реНрдЪреЛрдВ рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛:

  • C ++ рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдореЗрдВ рд╕реБрдзрд╛рд░ : Clangd рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб, рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ рдФрд░ рд░рд┐рдиреЗрдо рд░реАрдХреНрдЯреИрдХреНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рд╕реБрдзрд╛рд░, рдПрдХ рдирдпрд╛ рдЪреЗрдХ рдЬреЛ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рд╢реИрд▓реА рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк : ClangFormat рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг, C / C ++ рдореЗрдВ рдЪрд░ рдирд╛рдордХрд░рдг рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рд╣реЗрдбрд░ рдЧрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдердиред
  • рдбрд┐рдмрдЧрд░ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рд╕реБрдзрд╛рд░ : рдореЗрдореЛрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдирд╛ - рдореЗрдореЛрд░реА рд╡реНрдпреВ - рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдПрд▓рдПрд▓рдбреАрдмреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╕рдВрддреБрд╖реНрдЯ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛, рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рдХрд╛рдо рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдирд╛ред
  • рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд▓рдЖрдИрдПрди , рдкрд╣рд▓реЗ рдЪрд░рдгред
  • CLion рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ / рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдЯрд╛рд░рдЧреЗрдЯ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред
  • C / C ++ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред
  • рдирдИ рджреГрд╢реНрдп рдереАрдо рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдПрдБред

CLion 2019.1 рд░рд┐рд▓реАрдЬ

рдиреАрдЪреЗ рдЗрди рдФрд░ рдЕрдиреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред рдФрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ CLion рдХрд╛ рдореБрдлреНрдд 30-рджрд┐рд╡рд╕реАрдп рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

C ++ рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди


Clangd


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕реАрдПрд▓рдУрдПрди рдореЗрдВ рд╕реА ++ рднрд╛рд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЙрдкрдХрд░рдг рд╣реИрдВ - рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдирд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдХреНрд▓реИрдВрдЧрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╡реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░рдХ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреВрд░реНрдгрддрд╛ рдХреА рдХрд╕реМрдЯреА рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рд╣рдо рдЕрдм Clang рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЯреВрд▓ рдореЗрдВ CLION рдореЗрдВ C ++ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рдЯреВрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЕрднреА рддрдХ рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 2019.1 рдореЗрдВ рдХреЛрдб рдХрд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд▓реИрдВрдЧрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╕рдВрдкрд╛рджрдХ рдХреА рдЬрд╡рд╛рдмрджреЗрд╣реА рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖред

рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП CLion рдХреЛ рдПрдХ рдХреНрд▓реИрдВрдЧрдб-рдЖрдзрд╛рд░рд┐рдд рдЯреВрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдЕрдм рддреНрд░реБрдЯрд┐ рдкрд╛рда рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╣реИ:

рдЧрд▓рддрд┐рдпрд╛рдВ

рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрд▓реИрдВрдЧрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ (рддреНрд╡рд░рд┐рдд-рдлрд┐рдХреНрд╕) рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдлрд┐рдХреНрд╕ рдЦреБрдж CLion рдХреЗ рдЕрдкрдиреЗ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖реЗрддреНрд░ рдХреНрд▓реИрдВрдЧрдб рдХреЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЯреВрд▓ рдкрд░ рдирдП рдЪреЗрдХ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред CLion 2019.1 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, C ++ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЪреЗрдХ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдерд┐рд░ рдХреИрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рд╕реНрдерд╛рдИ рд╕рджрд╕реНрдп рдХреА рдЬрд╛рдБрдЪ

рд╡реИрд╕реЗ, Clangd рдкрд░ рдЗрд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЯреВрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ / рд╡рд░реАрдпрддрд╛рдПрдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ рднрд╛рд╖рд╛рдПрдБ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ | C / C ++ | Clangdред

рдХрд╕реНрдЯрдо рдХреЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЯреВрд▓


рд╕рдВрдкрд╛рджрдХ рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╣рдорд╛рд░реА рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХрдИ рдЫреЛрдЯреЗ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрдХреНрд░рдордг рд╕рдордп рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рддреЛ CLion рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдЦреБрд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдПрд╕рдЯреАрдПрд▓ рдпрд╛ рдмреВрд╕реНрдЯ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╕реБрдзрд╛рд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддреЗ рд╣реИрдВ!

рдЗрд╕ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ C ++ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд╣рдордиреЗ рджреЛ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ - рдирд╛рдо рдмрджрд▓реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВред рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдирд╛рдорд╕реНрдерд╛рди рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдирд┐рдХрд▓рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, std:: , рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬреЗрд╢рди рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо (рдкреНрд░рдХрд╛рд░ рдЙрдкрдирд╛рдо)ред

рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдордиреЗ рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрдм рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╕реНрдерд┐рдд рд╣реИрдВред рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╣рдореЗрд╢рд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм CLion рдЖрдкрд╕реЗ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдкрд╕рдВрджреАрджрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддрд╛ рд╣реИред рдЖрдк рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдкреБрд░рд╛рдиреЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рд╡рд░реНрд╕ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рд╕реЗ рдХрдХреНрд╖рд╛ рдХрд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдирд╛рдордХрд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред (рдХрд╣реАрдВ рдпрд╣рд╛рдБ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рдЪреАрдЦреЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП: "рдЕрдВрдд рдореЗрдВ!")

рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ

рдФрд░ рд╡реИрд╕реЗ, рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдореИрдВ рд╣реЗрдбрд░ рдЧрд╛рд░реНрдб рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реЗрдбрд░ рдЧрд╛рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢реИрд▓реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рд╕рдордп рдирд╛рдо рдмрджрд▓рдХрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЙрд╕рдХреЗ рдирд╛рдо рдкрд░ рд╣реИ, рддреЛ CLion рд╣реЗрдбрд░ рдЧрд╛рд░реНрдб рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛!

рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдХреВрдЯрдирд╛


рд╕рдВрд╕реНрдХрд░рдг 2019.1 рдореЗрдВ, рд╣рдордиреЗ рдХреНрд▓реЗрдпрди рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдХреЛрдб рдореЗрдВ ClangFormat рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЗрд╕рдореЗрдВ рди рдХреЗрд╡рд▓ рд╕реНрд╡рд░реВрдкрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ (Windows Ctrl+Alt+L Linux рдкрд░ Ctrl+Alt+L , тМетМШL рдкрд░ тМетМШL ) рдпрд╛ рдХреЛрдб рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡рддрдГ-рд╕реНрд╡рд░реВрдкрдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдмрд▓реНрдХрд┐ CLION рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп рдкреВрд░реНрд╡-рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрдм рд╕реБрдзрд╛рд░ рдФрд░ рд╕реБрдзрд╛рд░ (рддреНрд╡рд░рд┐рдд-рдлрд┐рдХреНрд╕) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрд╣рд╛рдБ рднреА IDE рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, ClangFormat рдХрд╣рд▓рд╛рдПрдЧрд╛ред

рдЖрдк рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ ClangFormat рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реЗрдЯрд┐рдВрдЧреНрд╕ / рд╡рд░реАрдпрддрд╛рдПрдБ рдореЗрдВ | рд╕рдВрдкрд╛рджрдХ | рдХреЛрдб рд╢реИрд▓реАред рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреЛрдИ .clang- рд╕реНрд╡рд░реВрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ CLion рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ClangFormat рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛:

ClangFormat

рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреЛрдб рдореЗрдВ рдирд╛рдордХрд░рдг рдЪрд░, рдкреНрд░рдХрд╛рд░ рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдг рдПрдХ рдЬрдЯрд┐рд▓, рдХрднреА-рдХрднреА рджрд╛рд░реНрд╢рдирд┐рдХ рднреА рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдореЗрдВ (рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдирд╛рдордХрд░рдг рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рд╢реИрд▓реА рд╣реИ, рдХреНрдпреВрдЯреА рд╣реИ, рдЧреВрдЧрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ CLion рд╕реЗрдЯрд┐рдВрдЧреНрд╕ / рд╡рд░реАрдпрддрд╛рдПрдБ | рд╕рдВрдкрд╛рджрдХ | рдХреЛрдб рд╢реИрд▓реА | C / C ++ рдореЗрдВ рдЕрдм рдПрдХ рдирдпрд╛ рдЯреИрдм рд╣реИ - рдирд╛рдордХрд░рдг рдХрдиреНрд╡реЗрдВрд╢рди, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдгреЛрдВ (рдореИрдХреНрд░реЛрдЬрд╝, рдЧреНрд▓реЛрдмрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдХреНрд▓рд╛рд╕ рдореЗрдВрдмрд░реНрд╕, рдкреИрд░рд╛рдореАрдЯрд░реНрд╕, рд▓реЛрдХрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдЗрддреНрдпрд╛рджрд┐) рдХреЗ рд▓рд┐рдП рдирд╛рдордХрд░рдг рд╢реИрд▓реА рд╕реЗрдЯ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрдпрдирд┐рдд рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА IDE рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдХреЛрдб рдЬрдирд░реЗрд╢рди, рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реБрдзрд╛рд░ рдЗрддреНрдпрд╛рджрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдирд╛рдордХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирдП рдЕрд╕рдВрдЧрдд рдирд╛рдордХрд░рдг рдЪреЗрдХ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдРрд╕реЗ рдирд╛рдореЛрдВ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдЬреЛ рдирд┐рдпрдореЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдирд╛рдо рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рдПрдЧрд╛:

рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди

рдЙрд╕реА рдЯреИрдм рдореЗрдВ, рдЖрдк рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдЧрд╛рд░реНрдб рд╢реИрд▓реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ:

рд╣реАрдпрд░ рдЧрд╛рд░реНрдб

рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк #pragma рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧ / рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореЗрдВ рдирдИ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рд╕рдВрдкрд╛рджрдХ | рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХреЛрдб рдЯреЗрдореНрдкрд▓реЗрдЯред

рдбрд┐рдмрдЧрд░


рдореЗрдореЛрд░реА рджреГрд╢реНрдп рджреЗрдЦреЗрдВ


рдбрд┐рдмрдЧрд░ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╣рд╛рде рдорд┐рд▓ рдЧрдПред рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореЗрдореЛрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдкреИрдирд▓ рдХреЗ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдореЗрдореЛрд░реА рд╡реНрдпреВ ( Ctrl+Enter on Windows / Linux, тМШEnter on macOS) рдХрд╛ рдЕрдиреБрд░реЛрдз тМШEnter ред рдФрд░ рдпрджрд┐ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдореЗрдореЛрд░реА рджреГрд╢реНрдп рдЯреИрдм рдЦреБрд▓рд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕реНрдореГрддрд┐ рджреГрд╢реНрдп

UI / UX рдкрд░рд┐рд╡рд░реНрддрди рдЕрдЧрд▓реЗ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦреЛ!

рдПрд▓рдПрд▓рдбреАрдмреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╕рдВрддреЛрд╖


рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдЕрдм рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рдЬреАрдбреАрдмреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрд▓рдПрд▓рдбреАрдмреА рдХреЗ рд▓рд┐рдП рднреА!

Disassembler LLDB

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдЕрднреА рднреА рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрд░реЛрдд рдХреЛрдб рдирд╣реАрдВ рд╣реИрдВред рддрдерд╛рдХрдерд┐рдд рдбрд┐рдорд╛рдВрдб рдореЛрдб рдкрд░ рддрдерд╛рдХрдерд┐рдд рд╕рдорд░реНрдерди рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди


рдХрднреА-рдХрднреА рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рджреЗрд░реА рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдЪрд░ рдХреА рд▓рдВрдмреА рдЧрдгрдирд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░рдХрд╛рд░, рдХрднреА-рдХрднреА рдЗрди рдЧрдгрдирд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдореИрдВ рдХреЛрдб рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХрднреА-рдХрднреА рдЪрд░ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП! рдЕрдм CLion рдореЗрдВ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡реИрд░рд┐рдПрдмрд▓ рд░реАрдХрд╛рдЙрдВрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИ - рдбрд┐рдмрдЧрд░ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдореЗрдВ рдореНрдпреВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдареАрдХ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЬрдм рдЖрдкрдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЪрд░ рдкрд░ рднрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдореНрдпреВрдЯ рдХрд░реЗрдВ

рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдпрди


рдЗрд▓реНрдпрд╛ рдореЛрдЯрд░ ( рдЗрд▓реНрдореЛрдЯ ) рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Habr рдкрд░ STM32CubeMX рдХреЗ рд╕рд╛рде CLion рдХреЗ рдПрдХреАрдХрд░рдг рдФрд░ OpenOCD рдбреАрдмрдЧрд░ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рд╣реИ ред рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЗрд▓реНрдпрд╛ рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд▓рдЧрдЗрди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ CLion рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдордпрд╛рдм рд░рд╣реАред

рдХреНрдпреВрдИрдЯреЗрдХреНрд╕ рдХрд╛ рдПрдХреАрдХрд░рдг

рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрди рдкрд░ рдПрдХ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЕрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд╡рд╛рдж рдореЗрдВ, рдЖрдк STM32CubeMX рдкреНрд░реЛрдЬреЗрдХреНрдЯ ( .ioc ) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╕реАрдПрд▓рдЖрдИрдПрди рд╕реЗ рд╕реАрдзреЗ, рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП STM32CubeMX рдЪрд▓рд╛рдПрдВред
  • CLion рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА CMake рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
  • CLion рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ (рдмреЛрд░реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди) рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЪреБрдирдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдЧрд╛ред
  • OpenOCD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ "OpenOCD рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд░рди" рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред STM32CubeMX рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, CLion рдЕрдкрдиреЗ рджрдо рдкрд░ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реАрдзреЗ CLION рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдбрд┐рдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдЗрд▓реНрдпрд╛ рдХреА рдХрдИ рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖реА рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рддреЛ, рдпрджрд┐ рдЖрдк рд╕реАрдПрд▓рдУрдПрди рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдкрдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!

рд╕реНрд╡рддрдВрддреНрд░ рд▓рдХреНрд╖реНрдп рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВ


рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, CLion рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдореЙрдбрд▓ рдХреА рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧреНрд░реЗрдб C ++ рдФрд░ рд╕рдВрдХрд▓рди рдбреЗрдЯрд╛рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рди рддреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛, рди рд╣реА рд▓реЙрдиреНрдЪрд┐рдВрдЧ, рдФрд░ рди рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрднрд╡ рдереАред рд╣рд╛рдВ, рдФрд░ рд╕рд┐рд░реНрдл рдкреНрд░рд╕рд┐рджреНрдз рдХреНрд▓рд┐рдпреЙрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрднреА-рдХрднреА рдЖрдк рдПрдХ рд▓рдХреНрд╖реНрдп рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрд┐рд╕реА рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд▓рдХреНрд╖реНрдп (рд╕реЗрдЯрд┐рдВрдЧ / рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ | рдмрд┐рд▓реНрдб, рдирд┐рд╖реНрдкрд╛рджрди, рдкрд░рд┐рдирд┐рдпреЛрдЬрди | рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдб рд▓рдХреНрд╖реНрдп) рдФрд░ рдХрд╕реНрдЯрдо рд░рди / рдбрд┐рдмрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рд░рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди ...) рд╣реИрдВред рдПрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ (рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдг) рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рдХрд╕реНрдЯрдо рд▓рдХреНрд╖реНрдп

рдФрд░ рд▓реЙрдиреНрдЪ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛-рд╕реНрд╡рддрдВрддреНрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд▓рдХреНрд╖реНрдп, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдХрд╕реНрдЯрдо рд╕рд╣рдордд рд╣реИрдВ

рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд╛рд▓реА рднрд╛рд╖рд╛


рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ SQL рдХреНрд╡реЗрд░реА, HTML рдХреЛрдб рдпрд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдореВрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЕрдм рдпрд╣ рд╕рдВрднрд╡ рд╣реИ! рдЖрдк рдХреЗрд╡рд▓ Alt+Enter рджрдмрд╛рдХрд░ рдФрд░ "рдЗрдВрдЬреЗрдХреНрдЯ рднрд╛рд╖рд╛ рдпрд╛ рд╕рдВрджрд░реНрдн" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ, рдЪрдпрдирд┐рдд рднрд╛рд╖рд╛ рдХрд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рднреА рд╡рд┐рд╢реЗрд╖ рдХреНрд░рд┐рдпрд╛рдПрдВ рднреАред рд╕рдмрд╕реЗ рд╣рдбрд╝рддрд╛рд▓реА рдЙрджрд╛рд╣рд░рдг рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдЖрдИрдбреАрдИ рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ:

рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рднрд╛рд╖рд╛

рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ


JetBrains рдХреЗ рдЙрддреНрдкрд╛рдж рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЫреЛрдЯреА рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкреВрд░реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, CLion рдХреЛ IntelliJ IDEA, WebStorm, AppCode, DataGrip, PyCharm, рдЖрджрд┐ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓рддреА рд╣реИрдВред рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, рдЗрди рд╕реБрдзрд╛рд░реЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдореЗрдВ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рд╣реИрдВ рдпрд╛ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдкрдврд╝рд╛ рд╣реИ - рд╣рд╛рд▓ рдХреЗ рд╕реНрдерд╛рди рдкреЙрдкрдЕрдк (рд╡рд┐рди / рд▓рд┐рди рдкрд░ Shift+Ctrl+E , тЗзтМШE рдкрд░ тЗзтМШE )ред
  • рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдирдП рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдорд╛рдирдХ рдкреНрд░рдХрд╛рд╢, рдЕрдВрдзреЗрд░реЗ (рджрд╛рд░реБрдХрд╛) рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд (рдЙрдЪреНрдЪ-рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ) рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рдРрд╕реЗ рдкреНрд▓рдЧ-рдЗрди рдФрд░ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣рдорд╛рд░реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк Rust рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ IntelliJ Rust рдкреНрд▓рдЧрдЗрди рд╣реИред CLion рдореЗрдВ, рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рд░реНрдЧреЛ рд╕рдорд░реНрдерди рдФрд░ рдбреАрдмрдЧрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдХреЛрдбрд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╣реИрдВ, рдЬреЛ рдЕрднреА рддрдХ рдЖрдпрд╛рддрд┐рдд рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рд╕реБрдзрд╛рд░ рднреА рд╣реИрдВред

рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЕрдВрдд рддрдХ рдкрдврд╝реЗ рддреЛ рдзрдиреНрдпрд╡рд╛рдж!

рдбреЗрдореЛ


рдЦреИрд░, рдФрд░ CLion 2019.1 рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡реАрдбрд┐рдпреЛ (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ):


рдкреНрд░рд╢реНрди, рдЗрдЪреНрдЫрд╛рдПрдБ, рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рд┐рд░реНрдл рд╡рд┐рдЪрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ! рд╣рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдЖрдкрдХреА JetBrains CLion рдЯреАрдо
рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡

Source: https://habr.com/ru/post/hi445646/


All Articles