code: func (m *Manager) RuleGroups() []*Group {
  	m.mtx.RLock()
  	defer m.mtx.RUnlock()
  
  	rgs := make([]*Group, 0, len(m.groups))
  	for _, g := range m.groups {
  		rgs = append(rgs, g)
  	}
  
  	// Sort rule groups by file, then by name.
  	sort.Slice(rgs, func(i, j int) bool {
  		if rgs[i].file != rgs[j].file {
  			return rgs[i].file < rgs[j].file
  		}
  		return rgs[i].name < rgs[j].name
  	})
  
  	return rgs
  }
docs: // RuleGroups returns the list of manager's rule groups.