LLVM 22.0.0git
llvm::GlobPattern Class Reference

This class implements a glob pattern matcher similar to the one found in bash, but with some key differences. More...

#include "llvm/Support/GlobPattern.h"

Public Member Functions

LLVM_ABI bool match (StringRef S) const
bool isTrivialMatchAll () const

Static Public Member Functions

static LLVM_ABI Expected< GlobPatterncreate (StringRef Pat, std::optional< size_t > MaxSubPatterns={})

Detailed Description

This class implements a glob pattern matcher similar to the one found in bash, but with some key differences.

Namely, that * matches all characters and does not exclude path separators.

  • ? matches a single character.
  • * matches zero or more characters.
  • [<chars>] matches one character in the bracket. Character ranges, e.g., [a-z], and negative sets via [^ab] or [!ab] are also supported.
  • {<glob>,...} matches one of the globs in the list. Nested brace expansions are not supported. If MaxSubPatterns is empty then brace expansions are not supported and characters {,} are treated as literals.
  • \ escapes the next character so it is treated as a literal.

Some known edge cases are:

  • The literal ] is allowed as the first character in a character class, i.e., []] is valid and matches the literal ].
  • The empty character class, i.e., [], is invalid.
  • Empty or singleton brace expansions, e.g., {}, {a}, are invalid.
  • The literals } and , that are not inside a brace expansion are taken as literals, e.g., ,} is valid but { is not.

Examples:

  • *[/\\]foo.{c,cpp} will match (unix or windows) paths to files named foo.c or foo.cpp.
  • _Z{N,NK,}S[tabsoid]* will match mangled C++ standard library functions.

Definition at line 52 of file GlobPattern.h.

Member Function Documentation

◆ create()

Expected< GlobPattern > GlobPattern::create ( StringRef Pat,
std::optional< size_t > MaxSubPatterns = {} )
static
Parameters
Patthe pattern to match against
MaxSubPatternsif provided limit the number of allowed subpatterns created from expanding braces otherwise disable brace expansion

Definition at line 136 of file GlobPattern.cpp.

References llvm::StringRef::find_first_of(), parseBraceExpansions(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::StringRef::substr().

Referenced by llvm::objcopy::NameOrPattern::create(), llvm::ifs::filterIFSSyms(), and llvm::SpecialCaseList::Matcher::insert().

◆ isTrivialMatchAll()

bool llvm::GlobPattern::isTrivialMatchAll ( ) const
inline

Definition at line 65 of file GlobPattern.h.

◆ match()

bool GlobPattern::match ( StringRef S) const
Returns
true if S matches this glob pattern

Definition at line 193 of file GlobPattern.cpp.

References llvm::StringRef::consume_front(), and llvm::StringRef::empty().

Referenced by llvm::SpecialCaseList::Matcher::match().


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