aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/clang/include/clang/Tooling/Syntax/TokenManager.h
blob: 6f0d11ce0d6b97bb954b9a495509d4d0660eb8e5 (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
//===- TokenManager.h - Manage Tokens for syntax-tree ------------*- C++-*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Defines Token interfaces for the clang syntax-tree. This is the level of
// abstraction that the syntax-tree uses to operate on Token.
//
// TokenManager decouples the syntax-tree from a particular token
// implementation. For example, a TokenBuffer captured from a clang parser may
// track macro expansions and associate tokens with clang's SourceManager, while
// a clang pseudoparser would use a flat array of raw-lexed tokens in memory.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLING_SYNTAX_TOKEN_MANAGER_H
#define LLVM_CLANG_TOOLING_SYNTAX_TOKEN_MANAGER_H

#include "llvm/ADT/StringRef.h"
#include <cstdint>

namespace clang {
namespace syntax {

/// Defines interfaces for operating "Token" in the clang syntax-tree.
class TokenManager {
public:
  virtual ~TokenManager() = default;

  /// Describes what the exact class kind of the TokenManager is.
  virtual llvm::StringLiteral kind() const = 0;

  /// A key to identify a specific token. The token concept depends on the
  /// underlying implementation -- it can be a spelled token from the original
  /// source file or an expanded token.
  /// The syntax-tree Leaf node holds a Key.
  using Key = uintptr_t;
  virtual llvm::StringRef getText(Key K) const = 0;
};

} // namespace syntax
} // namespace clang

#endif // LLVM_CLANG_TOOLING_SYNTAX_TOKEN_MANAGER_H