func (l *Linter) Lint() ([]Problem, error) {
	// TODO(mdlayher): support for protobuf exposition format?
	d := expfmt.NewDecoder(l.r, expfmt.FmtText)

	var problems []Problem

	var mf dto.MetricFamily
	for {
		if err := d.Decode(&mf); err != nil {
			if err == io.EOF {
				break
			}

			return nil, err
		}

		problems = append(problems, lint(mf)...)
	}

	// Ensure deterministic output.
	sort.SliceStable(problems, func(i, j int) bool {
		if problems[i].Metric < problems[j].Metric {
			return true
		}

		return problems[i].Text < problems[j].Text
	})

	return problems, nil
}
func (l *Linter) Lint() ([]Problem, error) {
	
	d := expfmt.NewDecoder(l.r, expfmt.FmtText)

	var problems []Problem

	var mf dto.MetricFamily
	for {
		if err := d.Decode(&mf); err != nil {
			if err == io.EOF {
				break
			}

			return nil, err
		}

		problems = append(problems, lint(mf)...)
	}

	
	sort.SliceStable(problems, func(i, j int) bool {
		if problems[i].Metric < problems[j].Metric {
			return true
		}

		return problems[i].Text < problems[j].Text
	})

	return problems, nil
}
func ( l * Linter ) Lint ( ) ( [ ] Problem , error ) { // TODO(mdlayher): support for protobuf exposition format? d := expfmt . NewDecoder ( l . r , expfmt . FmtText ) var problems [ ] Problem var mf dto . MetricFamily for { if err := d . Decode ( & mf ) ; err != nil { if err == io . EOF { break } return nil , err } problems = append ( problems , lint ( mf ) ... ) } // Ensure deterministic output. sort . SliceStable ( problems , func ( i , j int ) bool { if problems [ i ] . Metric < problems [ j ] . Metric { return true } return problems [ i ] . Text < problems [ j ] . Text } ) return problems , nil }
// Lint performs a linting pass, returning a slice of Problems indicating any
// issues found in the metrics stream.  The slice is sorted by metric name
// and issue description.
Lint performs a linting pass returning a slice of Problems indicating any issues found in the metrics stream . The slice is sorted by metric name and issue description .