docs: def get_user_settings_module(project_root: str):
      """Return project-specific user settings module, if it exists.
  
      :param project_root: Absolute path to project root directory.
  
      A project settings file is a file named `YSETTINGS_FILE` found at the top
      level of the project root dir.
  
      Return `None` if project root dir is not specified,
      or if no such file is found.
  
      Raise an exception if a file is found, but not importable.
  
      The YSettings file can define 2 special module-level functions that
      interact with the YABT CLI & config system:
      1. `extend_cli`, if defined, takes the YABT `parser` object and may extend
         it, to add custom command-line flags for the project.
         (careful not to collide with YABT flags...)
      2. `extend_config`, if defined, takes the YABT `config` object and the
         parsed `args` object (returned by the the parser), and may extend the
         config - should be used to reflect custom project CLI flags in the
         config object.
  
      Beyond that, the settings module is available in YBuild's under
      `conf.settings` (except for the 2 special fucntions that are removed).
      """
      if project_root:
          project_settings_file = os.path.join(project_root, YSETTINGS_FILE)
          if os.path.isfile(project_settings_file):
              settings_loader = SourceFileLoader(
                  'settings', project_settings_file)
              return settings_loader.load_module()