code: def type_description_from_node(gi_node):
      '''
      Parse a typed node, returns a usable description
      '''
      ctype_name, gi_name, array_nesting = unnest_type (gi_node)
  
      cur_ns = get_namespace(gi_node)
  
      if ctype_name is not None:
          type_tokens = __type_tokens_from_cdecl (ctype_name)
      else:
          type_tokens = __type_tokens_from_gitype (cur_ns, gi_name)
  
      namespaced = '%s.%s' % (cur_ns, gi_name)
      if namespaced in ALL_GI_TYPES:
          gi_name = namespaced
  
      return SymbolTypeDesc(type_tokens, gi_name, ctype_name, array_nestingf type_description_from_node(gi_node):
      '''
      Parse a typed node, returns a usable description
      '''
      ctype_name, gi_name, array_nesting = unnest_type (gi_node)
  
      cur_ns = get_namespace(gi_node)
  
      if ctype_name is not None:
          type_tokens = __type_tokens_from_cdecl (ctype_name)
      else:
          type_tokens = __type_tokens_from_gitype (cur_ns, gi_name)
  
      namespaced = '%s.%s' % (cur_ns, gi_name)
      if namespaced in ALL_GI_TYPES:
          gi_name = namespaced
  
      return SymbolTypeDesc(type_tokens, gi_name, ctype_name, array_nesting)
docs: Parse a typed node, returns a usable description