docs: def __check_extension(files, ignore_globs=None, include_globs=None):
          """
          Internal method to filter a list of file changes by extension and ignore_dirs.
  
          :param files:
          :param ignore_globs: a list of globs to ignore (if none falls back to extensions and ignore_dir)
          :param include_globs: a list of globs to include (if none, includes all).
          :return: dict
          """
  
          if include_globs is None or include_globs == []:
              include_globs = ['*']
  
          out = {}
          for key in files.keys():
              # count up the number of patterns in the ignore globs list that match
              if ignore_globs is not None:
                  count_exclude = sum([1 if fnmatch.fnmatch(key, g) else 0 for g in ignore_globs])
              else:
                  count_exclude = 0
  
              # count up the number of patterns in the include globs list that match
              count_include = sum([1 if fnmatch.fnmatch(key, g) else 0 for g in include_globs])
  
              # if we have one vote or more to include and none to exclude, then we use the file.
              if count_include > 0 and count_exclude == 0:
                  out[key] = files[key]
  
          return out