| 1 | //===--- DumpAST.h - Serialize clang AST to LSP -----------------*- 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 | // Exposing clang's AST can give insight into the precise meaning of code. |
| 10 | // (C++ is a complicated language, and very few people know all its rules). |
| 11 | // Despite the name, clang's AST describes *semantics* and so includes nodes |
| 12 | // for implicit behavior like conversions. |
| 13 | // |
| 14 | // It's also useful to developers who work with the clang AST specifically, |
| 15 | // and want to know how certain constructs are represented. |
| 16 | // |
| 17 | // The main representation is not based on the familiar -ast-dump output, |
| 18 | // which is heavy on internal details. |
| 19 | // It also does not use the -ast-dump=json output, which captures the same |
| 20 | // detail in a machine-friendly way, but requires client-side logic to present. |
| 21 | // Instead, the key information is bundled into a few fields (role/kind/detail) |
| 22 | // with weakly-defined semantics, optimized for easy presentation. |
| 23 | // The -ast-dump output is preserved in the 'arcana' field, and may be shown |
| 24 | // e.g. as a tooltip. |
| 25 | // |
| 26 | // The textDocument/ast method implemented here is a clangd extension. |
| 27 | // |
| 28 | //===----------------------------------------------------------------------===// |
| 29 | |
| 30 | #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_DUMPAST_H |
| 31 | #define |
| 32 | |
| 33 | #include "Protocol.h" |
| 34 | #include "clang/AST/ASTContext.h" |
| 35 | |
| 36 | namespace clang { |
| 37 | class DynTypedNode; |
| 38 | namespace syntax { |
| 39 | class TokenBuffer; |
| 40 | } // namespace syntax |
| 41 | namespace clangd { |
| 42 | |
| 43 | // Note: It's safe for the node to be a TranslationUnitDecl, as this function |
| 44 | // does not deserialize the preamble. |
| 45 | ASTNode dumpAST(const DynTypedNode &, const syntax::TokenBuffer &Tokens, |
| 46 | const ASTContext &); |
| 47 | |
| 48 | } // namespace clangd |
| 49 | } // namespace clang |
| 50 | |
| 51 | #endif |
| 52 | |