1 //===--- CodeCompletionHandler.h - Preprocessor code completion -*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the CodeCompletionHandler interface, which provides
10 //  code-completion callbacks for the preprocessor.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H
14 #define LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H
15 
16 #include "llvm/ADT/StringRef.h"
17 
18 namespace clang {
19 
20 class IdentifierInfo;
21 class MacroInfo;
22 
23 /// Callback handler that receives notifications when performing code
24 /// completion within the preprocessor.
25 class CodeCompletionHandler {
26 public:
27   virtual ~CodeCompletionHandler();
28 
29   /// Callback invoked when performing code completion for a preprocessor
30   /// directive.
31   ///
32   /// This callback will be invoked when the preprocessor processes a '#' at the
33   /// start of a line, followed by the code-completion token.
34   ///
35   /// \param InConditional Whether we're inside a preprocessor conditional
36   /// already.
CodeCompleteDirective(bool InConditional)37   virtual void CodeCompleteDirective(bool InConditional) { }
38 
39   /// Callback invoked when performing code completion within a block of
40   /// code that was excluded due to preprocessor conditionals.
CodeCompleteInConditionalExclusion()41   virtual void CodeCompleteInConditionalExclusion() { }
42 
43   /// Callback invoked when performing code completion in a context
44   /// where the name of a macro is expected.
45   ///
46   /// \param IsDefinition Whether this is the definition of a macro, e.g.,
47   /// in a \#define.
CodeCompleteMacroName(bool IsDefinition)48   virtual void CodeCompleteMacroName(bool IsDefinition) { }
49 
50   /// Callback invoked when performing code completion in a preprocessor
51   /// expression, such as the condition of an \#if or \#elif directive.
CodeCompletePreprocessorExpression()52   virtual void CodeCompletePreprocessorExpression() { }
53 
54   /// Callback invoked when performing code completion inside a
55   /// function-like macro argument.
56   ///
57   /// There will be another callback invocation after the macro arguments are
58   /// parsed, so this callback should generally be used to note that the next
59   /// callback is invoked inside a macro argument.
CodeCompleteMacroArgument(IdentifierInfo * Macro,MacroInfo * MacroInfo,unsigned ArgumentIndex)60   virtual void CodeCompleteMacroArgument(IdentifierInfo *Macro,
61                                          MacroInfo *MacroInfo,
62                                          unsigned ArgumentIndex) { }
63 
64   /// Callback invoked when performing code completion inside the filename
65   /// part of an #include directive. (Also #import, #include_next, etc).
66   /// \p Dir is the directory relative to the include path.
CodeCompleteIncludedFile(llvm::StringRef Dir,bool IsAngled)67   virtual void CodeCompleteIncludedFile(llvm::StringRef Dir, bool IsAngled) {}
68 
69   /// Callback invoked when performing code completion in a part of the
70   /// file where we expect natural language, e.g., a comment, string, or
71   /// \#error directive.
CodeCompleteNaturalLanguage()72   virtual void CodeCompleteNaturalLanguage() { }
73 };
74 
75 }
76 
77 #endif // LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H
78