docstr: Analyze the source code.
docstr_tok: ["Analyze","the","source","code","."]
code: def analyze(self) -> None:
      """Analyze the source code."""
      if self._analyzed:
          return
  
      try:
          parser = Parser(self.code)
          parser.parse()
  
          self.attr_docs = {}
          for scope, comment in parser.comments.items():
              if comment:
                  self.attr_docs[scope] = comment.splitlines() + [""]
              else:
                  self.attr_docs[scope] = [""]
  
          self.annotations = parser.annotations
          self.finals = parser.finals
          self.overloads = parser.overloads
          self.tags = parser.definitions
          self.tagorder = parser.deforders
          self._analyzed = True
      except Exception as exc:
          msg = f"parsing {self.srcname!r} failed: {exc!r}"
          raise PycodeError(msg) from exc
  
file_path: sphinx/sphinx/pycode/__init__.py
imports: from __future__ import annotations
  import tokenize
  from importlib import import_module
  from os import path
  from typing import TYPE_CHECKING, Any
  from sphinx.errors import PycodeError
  from sphinx.pycode.parser import Parser
label_desc: Use image node_id 6 for calling the ModuleAnalyzer obj's underlying member method code with example usage: obj.analyze() without return types