Clang-hacking-notes-for-wip-clang-branch

From Qt Wiki
Revision as of 15:06, 14 January 2015 by Maintenance script (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Code Completion

GCC C++ frontend is a parser that also generates code. Clang is quite similar: it is parser that also calls various actions along with creating AST. Completion implemented via inserting virtual token, on which parser calls one of Sema class methods, implemented in SemaCodeComplete.cpp.

Main pros of this approach is context-sensitive completion: parser will not produce any completion results if it doesn’t expect completion token at given point, otherwise it will call one of ~40 methods from SemaCodeComplete.cpp, choice depends on context. There are declarations of some code complete methods, parser calls one of them:

Additional notes:

  • Builder pattern [en.wikipedia.org] used to create completion results, see ResultBuilder class.
  • Declarations will be collected by CodeCompletionDeclConsumer class, passed to Sema::LookupVisibleDecls() method.

Categories: