code: def get_sorted_source_files(
              self,
              source_filenames_or_globs: Union[str, List[str]],
              recursive: bool = True) -> List[str]:
          
          if isinstance(source_filenames_or_globs, str):
              source_filenames_or_globs = [source_filenames_or_globs]
          final_filenames = []  # type: List[str]
          for sfg in source_filenames_or_globs:
              sfg_expanded = expanduser(sfg)
              log.debug("Looking for: {!r}", sfg_expanded)
              for filename in glob.glob(sfg_expanded, recursive=recursive):
                  log.debug("Trying: {!r}", filename)
                  if self.should_exclude(filename):
                      log.info("Skipping file {!r}", filename)
                      continue
                  final_filenames.append(filename)
          final_filenames.sort()
          return final_filenames
docs: Returns a sorted list of filenames to process, from a filename,
          a glob string, or a list of filenames/globs.
  
          Args:
              source_filenames_or_globs: filename/glob, or list of them
              recursive: use :func:`glob.glob` in recursive mode?
  
          Returns:
              sorted list of files to process