aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/tools/clang/include/clang/Lex/CodeCompletionHandler.h
blob: d876776c927c11adb1cba31b6b64b8da767e417d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//===--- CodeCompletionHandler.h - Preprocessor code completion -*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This file defines the CodeCompletionHandler interface, which provides
//  code-completion callbacks for the preprocessor.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H
#define LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H

namespace clang {

class IdentifierInfo;
class MacroInfo;
  
/// \brief Callback handler that receives notifications when performing code 
/// completion within the preprocessor.
class CodeCompletionHandler {
public:
  virtual ~CodeCompletionHandler();
  
  /// \brief Callback invoked when performing code completion for a preprocessor
  /// directive.
  ///
  /// This callback will be invoked when the preprocessor processes a '#' at the
  /// start of a line, followed by the code-completion token.
  ///
  /// \param InConditional Whether we're inside a preprocessor conditional
  /// already.
  virtual void CodeCompleteDirective(bool InConditional) { }
  
  /// \brief Callback invoked when performing code completion within a block of
  /// code that was excluded due to preprocessor conditionals.
  virtual void CodeCompleteInConditionalExclusion() { }
  
  /// \brief Callback invoked when performing code completion in a context
  /// where the name of a macro is expected.
  ///
  /// \param IsDefinition Whether this is the definition of a macro, e.g.,
  /// in a #define.
  virtual void CodeCompleteMacroName(bool IsDefinition) { }
  
  /// \brief Callback invoked when performing code completion in a preprocessor
  /// expression, such as the condition of an #if or #elif directive.
  virtual void CodeCompletePreprocessorExpression() { }
  
  /// \brief Callback invoked when performing code completion inside a 
  /// function-like macro argument.
  ///
  /// There will be another callback invocation after the macro arguments are
  /// parsed, so this callback should generally be used to note that the next
  /// callback is invoked inside a macro argument.
  virtual void CodeCompleteMacroArgument(IdentifierInfo *Macro,
                                         MacroInfo *MacroInfo,
                                         unsigned ArgumentIndex) { }

  /// \brief Callback invoked when performing code completion in a part of the
  /// file where we expect natural language, e.g., a comment, string, or 
  /// #error directive.
  virtual void CodeCompleteNaturalLanguage() { }
};
  
}

#endif // LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H