docs: def _run_prospector_on(filenames,
                         tools,
                         disabled_linters,
                         show_lint_files,
                         ignore_codes=None):
      """Run prospector on filename, using the specified tools.
  
      This function enables us to run different tools on different
      classes of files, which is necessary in the case of tests.
      """
      from prospector.run import Prospector, ProspectorConfig
  
      assert tools
  
      tools = list(set(tools) - set(disabled_linters))
      return_dict = dict()
      ignore_codes = ignore_codes or list()
  
      # Early return if all tools were filtered out
      if not tools:
          return return_dict
  
      # pylint doesn't like absolute paths, so convert to relative.
      all_argv = (["-F", "-D", "-M", "--no-autodetect", "-s", "veryhigh"] +
                  ("-t " + " -t ".join(tools)).split(" "))
  
      for filename in filenames:
          _debug_linter_status("prospector", filename, show_lint_files)
  
      with _custom_argv(all_argv + [os.path.relpath(f) for f in filenames]):
          prospector = Prospector(ProspectorConfig())
          prospector.execute()
          messages = prospector.get_messages() or list()
          for message in messages:
              message.to_absolute_path(os.getcwd())
              loc = message.location
              code = message.code
  
              if code in ignore_codes:
                  continue
  
              key = _Key(loc.path, loc.line, code)
              return_dict[key] = message
  
      return return_dict