class_docstr: Fill-in metadata and options that can be automatically derived
  (from other metadata/options, the file system or conventions)
class_docstr_tok: ["Fill-in","metadata","and","options","that","can","be","automatically","derived","(","from","other","metadata\/options",",","the","file","system","or","conventions",")"]
docstr: The packages/modules are the essential contribution of the author.
  Therefore the name of the distribution can be derived from them.
code: def analyse_name(self):
      """The packages/modules are the essential contribution of the author.
      Therefore the name of the distribution can be derived from them.
      """
      if self.dist.metadata.name or self.dist.name:
          # get_name() is not reliable (can return "UNKNOWN")
          return None
  
      log.debug(
          "No `name` configuration, performing automatic discovery"
      )
  
      name = (
          self._find_name_single_package_or_module()
          or self._find_name_from_packages()
      )
      if name:
          self.dist.metadata.name = name
  
imports: import itertools
  import os
  from fnmatch import fnmatchcase
  from glob import glob
  from pathlib import Path
  from typing import TYPE_CHECKING, Dict, Iterable, Iterator, List, Mapping, Optional, Tuple, Union
  import _distutils_hack.override
  from distutils import log
  from distutils.util import convert_path
label_desc: Use image node_id 15 for calling the ConfigDiscovery obj's underlying member method code with example usage: obj.analyse_name() and returns: None