clang 22.0.0git
clang::syntax::List Class Reference

A list of Elements separated or terminated by a fixed token. More...

#include "clang/Tooling/Syntax/Tree.h"

Inheritance diagram for clang::syntax::List:
[legend]

Classes

struct  ElementAndDelimiter

Public Types

enum class  TerminationKind { Terminated , MaybeTerminated , Separated }

Public Member Functions

std::vector< ElementAndDelimiter< Node > > getElementsAsNodesAndDelimiters ()
 Returns the elements and corresponding delimiters.
std::vector< Node * > getElementsAsNodes ()
 Returns the elements of the list.
clang::tok::TokenKind getDelimiterTokenKind () const
 Returns the appropriate delimiter for this list.
TerminationKind getTerminationKind () const
bool canBeEmpty () const
 Whether this list can be empty in syntactically and semantically correct code.
Public Member Functions inherited from clang::syntax::Tree
NodegetFirstChild ()
const NodegetFirstChild () const
NodegetLastChild ()
const NodegetLastChild () const
const LeaffindFirstLeaf () const
LeaffindFirstLeaf ()
const LeaffindLastLeaf () const
LeaffindLastLeaf ()
llvm::iterator_range< ChildIteratorgetChildren ()
llvm::iterator_range< ConstChildIteratorgetChildren () const
const NodefindChild (NodeRole R) const
 Find the first node with a corresponding role.
NodefindChild (NodeRole R)
Public Member Functions inherited from clang::syntax::Node
 Node (const Node &)=delete
 Nodes cannot simply be copied without violating tree invariants.
Nodeoperator= (const Node &)=delete
 Node (Node &&)=delete
 Idiomatically, nodes are allocated on an Arena and never moved.
Nodeoperator= (Node &&)=delete
NodeKind getKind () const
NodeRole getRole () const
bool isDetached () const
 Whether the node is detached from a tree, i.e. does not have a parent.
bool isOriginal () const
 Whether the node was created from the AST backed by the source code rather than added later through mutation APIs or created with factory functions.
bool canModify () const
 If this function return false, the tree cannot be modified because there is no reasonable way to produce the corresponding textual replacements.
const TreegetParent () const
TreegetParent ()
const NodegetNextSibling () const
NodegetNextSibling ()
const NodegetPreviousSibling () const
NodegetPreviousSibling ()
std::string dump (const TokenManager &SM) const
 Dumps the structure of a subtree. For debugging and testing purposes.
std::string dumpTokens (const TokenManager &SM) const
 Dumps the tokens forming this subtree.
void assertInvariants () const
 Asserts invariants on this node of the tree and its immediate children.
void assertInvariantsRecursive () const
 Runs checkInvariants on all nodes in the subtree. No-op if NDEBUG is set.

Static Public Member Functions

static bool classof (const Node *N)
Static Public Member Functions inherited from clang::syntax::Tree
static bool classof (const Node *N)

Additional Inherited Members

Protected Member Functions inherited from clang::syntax::Tree
 Node (NodeKind Kind)
 Newly created nodes are detached from a tree, parent and sibling links are set when the node is added as a child to another one.
 Node (const Node &)=delete
 Nodes cannot simply be copied without violating tree invariants.
 Node (Node &&)=delete
 Idiomatically, nodes are allocated on an Arena and never moved.
Protected Member Functions inherited from clang::syntax::Node
 Node (NodeKind Kind)
 Newly created nodes are detached from a tree, parent and sibling links are set when the node is added as a child to another one.
 ~Node ()=default
 Nodes are allocated on Arenas; the destructor is never called.

Detailed Description

A list of Elements separated or terminated by a fixed token.

This type models the following grammar construct: delimited-list(element, delimiter, termination, canBeEmpty)

Definition at line 254 of file Tree.h.

Member Enumeration Documentation

◆ TerminationKind

Enumerator
Terminated 
MaybeTerminated 
Separated 

Definition at line 261 of file Tree.h.

Member Function Documentation

◆ canBeEmpty()

bool syntax::List::canBeEmpty ( ) const

Whether this list can be empty in syntactically and semantically correct code.

This list may be empty when the source code has errors even if canBeEmpty() returns false.

Definition at line 426 of file Tree.cpp.

References getKind().

◆ classof()

bool clang::syntax::List::classof ( const Node * N)
static

◆ getDelimiterTokenKind()

clang::tok::TokenKind syntax::List::getDelimiterTokenKind ( ) const

Returns the appropriate delimiter for this list.

Useful for discovering the correct delimiter to use when adding elements to empty or one-element lists.

Definition at line 398 of file Tree.cpp.

References getKind().

◆ getElementsAsNodes()

◆ getElementsAsNodesAndDelimiters()

std::vector< syntax::List::ElementAndDelimiter< syntax::Node > > syntax::List::getElementsAsNodesAndDelimiters ( )

Returns the elements and corresponding delimiters.

Missing elements and delimiters are represented as null pointers.

For example, in a separated list: "a, b, c" <=> [("a" , ","), ("b" , "," ), ("c" , null)] "a, , c" <=> [("a" , ","), (null, "," ), ("c" , null)] "a, b c" <=> [("a" , ","), ("b" , null), ("c" , null)] "a, b," <=> [("a" , ","), ("b" , "," ), (null, null)]

In a terminated or maybe-terminated list: "a; b; c;" <=> [("a" , ";"), ("b" , ";" ), ("c" , ";" )] "a; ; c;" <=> [("a" , ";"), (null, ";" ), ("c" , ";" )] "a; b c;" <=> [("a" , ";"), ("b" , null), ("c" , ";" )] "a; b; c" <=> [("a" , ";"), ("b" , ";" ), ("c" , null)]

Definition at line 311 of file Tree.cpp.

References clang::C, clang::cast(), Children, clang::syntax::Tree::getChildren(), clang::syntax::Tree::getFirstChild(), getTerminationKind(), clang::syntax::ListDelimiter, clang::syntax::ListElement, MaybeTerminated, clang::syntax::Tree::Node(), Separated, and Terminated.

Referenced by clang::syntax::CallArguments::getArgumentsAndCommas(), clang::syntax::DeclaratorList::getDeclaratorsAndCommas(), clang::syntax::ParameterDeclarationList::getParametersAndCommas(), and clang::syntax::NestedNameSpecifier::getSpecifiersAndDoubleColons().

◆ getTerminationKind()

syntax::List::TerminationKind syntax::List::getTerminationKind ( ) const

Definition at line 412 of file Tree.cpp.

References getKind(), Separated, and Terminated.

Referenced by getElementsAsNodes(), and getElementsAsNodesAndDelimiters().


The documentation for this class was generated from the following files: