parameters: (self, key, command=None, pre=r'.-^/\<', post='-.', verbatim=False,
                   unresolved='warn', extra_args=None)
docstring: Construct a ToolSubst.
  
          key: The text which is to be substituted.
  
          command: The command to substitute when the key is matched.  By default,
          this will treat `key` as a tool name and search for it.  If it is
          a string, it is intereprted as an exact path.  If it is an instance of
          FindTool, the specified tool name is searched for on disk.
  
          pre: If specified, the substitution will not find matches where
          the character immediately preceding the word-boundary that begins
          `key` is any of the characters in the string `pre`.
  
          post: If specified, the substitution will not find matches where
          the character immediately after the word-boundary that ends `key`
          is any of the characters specified in the string `post`.
  
          verbatim: If True, `key` is an exact regex that is passed to the
          underlying substitution
  
          unresolved: Action to take if the tool substitution cannot be
          resolved.  Valid values:
              'warn' - log a warning but add the substitution anyway.
              'fatal' - Exit the test suite and log a fatal error.
              'break' - Don't add any of the substitutions from the current
                        group, and return a value indicating a failure.
              'ignore' - Don't add the substitution, and don't log an error
  
          extra_args: If specified, represents a list of arguments that will be
          appended to the tool's substitution.
  
          explicit_path: If specified, the exact path will be used as a substitution.
          Otherwise, the tool will be searched for as if by calling which(tool)
docstring_summary: Construct a ToolSubst.
docstring_tokens: Construct a ToolSubst .
function: def __init__(self, key, command=None, pre=r'.-^/\<', post='-.', verbatim=False,
                   unresolved='warn', extra_args=None):
          """Construct a ToolSubst.
  
          key: The text which is to be substituted.
  
          command: The command to substitute when the key is matched.  By default,
          this will treat `key` as a tool name and search for it.  If it is
          a string, it is intereprted as an exact path.  If it is an instance of
          FindTool, the specified tool name is searched for on disk.
  
          pre: If specified, the substitution will not find matches where
          the character immediately preceding the word-boundary that begins
          `key` is any of the characters in the string `pre`.
  
          post: If specified, the substitution will not find matches where
          the character immediately after the word-boundary that ends `key`
          is any of the characters specified in the string `post`.
  
          verbatim: If True, `key` is an exact regex that is passed to the
          underlying substitution
  
          unresolved: Action to take if the tool substitution cannot be
          resolved.  Valid values:
              'warn' - log a warning but add the substitution anyway.
              'fatal' - Exit the test suite and log a fatal error.
              'break' - Don't add any of the substitutions from the current
                        group, and return a value indicating a failure.
              'ignore' - Don't add the substitution, and don't log an error
  
          extra_args: If specified, represents a list of arguments that will be
          appended to the tool's substitution.
  
          explicit_path: If specified, the exact path will be used as a substitution.
          Otherwise, the tool will be searched for as if by calling which(tool)
  
          """
          self.unresolved = unresolved
          self.extra_args = extra_args
          self.key = key
          self.command = command if command is not None else FindTool(key)
          self.was_resolved = False
          if verbatim:
              self.regex = key
              return
  
          def not_in(chars, where=''):
              if not chars:
                  return ''
              pattern_str = '|'.join(re.escape(x) for x in chars)
              return r'(?{}!({}))'.format(where, pattern_str)
  
          def wordify(word):
              match = wordifier.match(word)
              introducer = match.group(1)
              word = match.group(2)
              return introducer + r'\b' + word + r'\b'
  
          self.regex = not_in(pre, '<') + wordify(key) + not_in(post)
function_tokens: def __init__ ( self , key , command = None , pre = r'.-^/\<' , post = '-.' , verbatim = False , unresolved = 'warn' , extra_args = None ) : self . unresolved = unresolved self . extra_args = extra_args self . key = key self . command = command if command is not None else FindTool ( key ) self . was_resolved = False if verbatim : self . regex = key return def not_in ( chars , where = '' ) : if not chars : return '' pattern_str = '|' . join ( re . escape ( x ) for x in chars ) return r'(?{}!({}))' . format ( where , pattern_str ) def wordify ( word ) : match = wordifier . match ( word ) introducer = match . group ( 1 ) word = match . group ( 2 ) return introducer + r'\b' + word + r'\b' self . regex = not_in ( pre , '<' ) + wordify ( key ) + not_in ( post )