code: func (s *symbol) Symbols(flavors ...string) (out []*symbol, err error) {
  	strct, _ := s.Symbol.(*symbols.Struct)
  	if strct == nil {
  		return nil, fmt.Errorf("%q is not a struct", s.FullName)
  	}
  
  	keepFlavors := stringset.NewFromSlice(flavors...)
  
  	for _, sym := range strct.Symbols() {
  		fullName := ""
  		if s.FullName != "" {
  			fullName = s.FullName + "." + sym.Name()
  		} else {
  			fullName = sym.Name()
  		}
  
  		sym := &symbol{
  			Symbol:   sym,
  			Module:   s.Module,
  			FullName: fullName,
  		}
  
  		if keepFlavors.Len() == 0 || keepFlavors.Has(sym.Flavor()) {
  			out = append(out, sym)
  		}
  	}
  
  	return
  }
docs: // Symbols returns nested symbols.
  //
  // If `flavors` is not empty, it specifies what kinds of symbols to keep.
  // Possible variants: "func", "var", "inv", "struct".