1 | //===- CodeComplete.h - MLIR Asm CodeComplete Context -----------*- 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 | #ifndef MLIR_ASMPARSER_CODECOMPLETE_H |
10 | #define MLIR_ASMPARSER_CODECOMPLETE_H |
11 | |
12 | #include "mlir/Support/LLVM.h" |
13 | #include "llvm/ADT/StringMap.h" |
14 | #include "llvm/Support/SourceMgr.h" |
15 | |
16 | namespace mlir { |
17 | class Attribute; |
18 | class Type; |
19 | |
20 | /// This class provides an abstract interface into the parser for hooking in |
21 | /// code completion events. This class is only really useful for providing |
22 | /// language tooling for MLIR, general clients should not need to use this |
23 | /// class. |
24 | class AsmParserCodeCompleteContext { |
25 | public: |
26 | virtual ~AsmParserCodeCompleteContext(); |
27 | |
28 | /// Return the source location used to provide code completion. |
29 | SMLoc getCodeCompleteLoc() const { return codeCompleteLoc; } |
30 | |
31 | //===--------------------------------------------------------------------===// |
32 | // Completion Hooks |
33 | //===--------------------------------------------------------------------===// |
34 | |
35 | /// Signal code completion for a dialect name, with an optional prefix. |
36 | virtual void completeDialectName(StringRef prefix) = 0; |
37 | void completeDialectName() { completeDialectName(prefix: "" ); } |
38 | |
39 | /// Signal code completion for an operation name within the given dialect. |
40 | virtual void completeOperationName(StringRef dialectName) = 0; |
41 | |
42 | /// Append the given SSA value as a code completion result for SSA value |
43 | /// completions. |
44 | virtual void appendSSAValueCompletion(StringRef name, |
45 | std::string typeData) = 0; |
46 | |
47 | /// Append the given block as a code completion result for block name |
48 | /// completions. |
49 | virtual void appendBlockCompletion(StringRef name) = 0; |
50 | |
51 | /// Signal a completion for the given expected tokens, which are optional if |
52 | /// `optional` is set. |
53 | virtual void completeExpectedTokens(ArrayRef<StringRef> tokens, |
54 | bool optional) = 0; |
55 | |
56 | /// Signal a completion for an attribute. |
57 | virtual void completeAttribute(const llvm::StringMap<Attribute> &aliases) = 0; |
58 | virtual void completeDialectAttributeOrAlias( |
59 | const llvm::StringMap<Attribute> &aliases) = 0; |
60 | |
61 | /// Signal a completion for a type. |
62 | virtual void completeType(const llvm::StringMap<Type> &aliases) = 0; |
63 | virtual void |
64 | completeDialectTypeOrAlias(const llvm::StringMap<Type> &aliases) = 0; |
65 | |
66 | protected: |
67 | /// Create a new code completion context with the given code complete |
68 | /// location. |
69 | explicit AsmParserCodeCompleteContext(SMLoc codeCompleteLoc) |
70 | : codeCompleteLoc(codeCompleteLoc) {} |
71 | |
72 | private: |
73 | /// The location used to code complete. |
74 | SMLoc codeCompleteLoc; |
75 | }; |
76 | } // namespace mlir |
77 | |
78 | #endif // MLIR_ASMPARSER_CODECOMPLETE_H |
79 | |