65 lines
2.5 KiB
C++
65 lines
2.5 KiB
C++
//===- BuildTree.h - build syntax trees -----------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
// Functions to construct a syntax tree from an AST.
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef LLVM_CLANG_TOOLING_SYNTAX_BUILDTREE_H
|
|
#define LLVM_CLANG_TOOLING_SYNTAX_BUILDTREE_H
|
|
|
|
#include "clang/AST/Decl.h"
|
|
#include "clang/Basic/TokenKinds.h"
|
|
#include "clang/Tooling/Syntax/Nodes.h"
|
|
#include "clang/Tooling/Syntax/TokenBufferTokenManager.h"
|
|
#include "clang/Tooling/Syntax/Tree.h"
|
|
|
|
namespace clang {
|
|
namespace syntax {
|
|
|
|
/// Build a syntax tree for the main file.
|
|
/// This usually covers the whole TranslationUnitDecl, but can be restricted by
|
|
/// the ASTContext's traversal scope.
|
|
syntax::TranslationUnit *
|
|
buildSyntaxTree(Arena &A, TokenBufferTokenManager &TBTM, ASTContext &Context);
|
|
|
|
// Create syntax trees from subtrees not backed by the source code.
|
|
|
|
// Synthesis of Leafs
|
|
/// Create `Leaf` from token with `Spelling` and assert it has the desired
|
|
/// `TokenKind`.
|
|
syntax::Leaf *createLeaf(syntax::Arena &A, TokenBufferTokenManager &TBTM,
|
|
tok::TokenKind K, StringRef Spelling);
|
|
|
|
/// Infer the token spelling from its `TokenKind`, then create `Leaf` from
|
|
/// this token
|
|
syntax::Leaf *createLeaf(syntax::Arena &A, TokenBufferTokenManager &TBTM,
|
|
tok::TokenKind K);
|
|
|
|
// Synthesis of Trees
|
|
/// Creates the concrete syntax node according to the specified `NodeKind` `K`.
|
|
/// Returns it as a pointer to the base class `Tree`.
|
|
syntax::Tree *
|
|
createTree(syntax::Arena &A,
|
|
ArrayRef<std::pair<syntax::Node *, syntax::NodeRole>> Children,
|
|
syntax::NodeKind K);
|
|
|
|
// Synthesis of Syntax Nodes
|
|
syntax::EmptyStatement *createEmptyStatement(syntax::Arena &A,
|
|
TokenBufferTokenManager &TBTM);
|
|
|
|
/// Creates a completely independent copy of `N` with its macros expanded.
|
|
///
|
|
/// The copy is:
|
|
/// * Detached, i.e. `Parent == NextSibling == nullptr` and
|
|
/// `Role == Detached`.
|
|
/// * Synthesized, i.e. `Original == false`.
|
|
syntax::Node *deepCopyExpandingMacros(syntax::Arena &A,
|
|
TokenBufferTokenManager &TBTM,
|
|
const syntax::Node *N);
|
|
} // namespace syntax
|
|
} // namespace clang
|
|
#endif
|