docs: def build(args):
      """Build the documentation for the projects specified in the CLI.
      It will do 4 different things for each project the
      user asks for (see flags):
          1. Update mkdocs's index.md file with links to project
             documentations
          2. Build these documentations
          3. Update the documentations' index.html file to add a link
             back to the home of all documentations
          4. Build mkdoc's home documentation
  
      Args:
          args (ArgumentParser): parsed args from an ArgumentParser
      """
      # Proceed?
      go = False
  
      # Current working directory
      dir_path = Path().resolve()
  
      # Set of all available projects in the dir
      # Projects must contain a PROJECT_MARKER file.
      all_projects = {
          m
          for m in os.listdir(dir_path)
          if os.path.isdir(m) and "source" in os.listdir(dir_path / m)
      }
  
      if args.all and args.projects:
          print(
              "{}Can't use both the 'projects' and 'all' flags{}".format(
                  utils.colors.FAIL, utils.colors.ENDC
              )
          )
          return
  
      if not args.all and not args.projects:
          print(
              "{}You have to specify at least one project (or all){}".format(
                  utils.colors.FAIL, utils.colors.ENDC
              )
          )
          return
  
      if args.force:
          go = True
          projects = (
              all_projects if args.all else all_projects.intersection(set(args.projects))
          )
  
      elif args.projects:
          s = "You are about to build the docs for: "
          s += "\n- {}\nContinue? (y/n) ".format("\n- ".join(args.projects))
          if "y" in input(s):
              go = True
              projects = all_projects.intersection(set(args.projects))
      elif args.all:
          s = "You're about to build the docs for ALL projects."
          s += "\nContinue? (y/n) "
          if "y" in input(s):
              go = True
              projects = all_projects
  
      if go:
          # Update projects links
          listed_projects = utils.get_listed_projects()
  
          # Don't update projects which are not listed in the Documentation's
          # Home if the -o flag was used
          if args.only_index:
              projects = listed_projects.intersection(projects)
          print("projects", projects)
          for project_to_build in projects:
              # Re-build documentation
              warnings.warn("[sphinx]")
              if args.verbose:
                  os.system(
                      "cd {} && make clean && make html".format(
                          dir_path / project_to_build
                      )
                  )
              else:
                  os.system(
                      "cd {} && make clean && make html > /dev/null".format(
                          dir_path / project_to_build
                      )
                  )
  
              # Add link to Documentation's Home
              utils.overwrite_view_source(project_to_build, dir_path)
  
              if args.verbose:
                  print("\n>>>>>> Done {}\n\n\n".format(project_to_build))
          # Build Documentation
          if args.verbose:
              os.system("mkdocs build")
              print("\n\n>>>>>> Build Complete.")
          else:
              warnings.warn("[mkdocs]")
              os.system("mkdocs build > /dev/null")
  
          if args.offline:
              utils.make_offline()