an update on clang based c tooling
play

An update on Clang-based C++ Tooling Manuel Klimek Daniel Jasper - PowerPoint PPT Presentation

An update on Clang-based C++ Tooling Manuel Klimek Daniel Jasper Tomorrowland (from Euro LLVM DevMeeting 2012) Tools Editor integration clang-format Emacs clang-lint Vim clang-rename Eclipse


  1. An update on Clang-based C++ Tooling Manuel Klimek Daniel Jasper

  2. Tomorrowland (from Euro LLVM DevMeeting 2012) ● Tools ● Editor integration ○ clang-format ○ Emacs ○ clang-lint ○ Vim ○ clang-rename ○ Eclipse ● Libraries ● IDE’ish Services ○ Tooling ○ ClangD ○ Refactoring ○ ASTMatchers

  3. Today ● Tools ● Editor integration ○ clang-format ✔ ○ Emacs ✔ YouCompleteMe ○ clang-lint-tidy ✔ ○ Vim ✔ ycmd (libclang) ○ clang-rename ✘ ○ Eclipse ✔ ● Libraries ● IDE’ish Services ○ Tooling ✔ ○ ClangD ✔ ○ Refactoring ✔ ○ ASTMatchers ✔

  4. clang-format ● Automatic formatting for C++, ObjC, … ● New features ○ More languages: JavaScript, Java, Protocol Buffers ○ Include sorting ● Widely used across the world ● Plugins for many editors and IDEs http://clang.llvm.org/docs/ClangFormat.html

  5. YouCompleteMe ● Code completion and more for vim, emacs, sublime text etc. ● Many languages (C++, Java, Python, Go) ● C++ support based on libclang ○ Code completion ○ Fast syntax checks ○ GoToDeclaration, GoToDefinition ○ Apply FixIt hints https://github.com/Valloric/YouCompleteMe

  6. clang-tidy ● clang-based C++ linter tool (and much more) ● >50 checks ○ Readability, efficiency, correctness, modernize, … ○ Highly configurable per (sub-)project ○ Can automatically fix the code in many cases ● Easy access to ASTMatchers and preprocessor hooks http://clang.llvm.org/extra/clang-tidy/

  7. AST matchers ● DSL to create predicates on Clang’s AST ● New features ○ More matchers (types, parents, ..) ○ Back-references ( equalsNode(“X”) ) ○ Starting nested matches within the callback ● clang-query ○ Quickly write and test AST matchers ○ Analyze translation units http://clang.llvm.org/docs/LibASTMatchers.html

  8. Demo ● From the LLVM Coding Standards: “Use Early Exits and continue to Simplify Code” if (isa<TerminatorInst>(I)) if (!isa<TerminatorInst>(I) && return ; I->hasOneUse() && doOtherThing(I)) { if (!I->hasOneUse()) ... some long code .... return ; } if (!doOtherThing(I)) return ; ... some long code ....

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend