// Copyright 2011 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import (
	"go/ast"
)

func init() {
	register(fix{
		"sorthelpers",
		sorthelpers,
		`Adapt code from sort.Sort[Ints|Float64s|Strings] to sort.[Ints|Float64s|Strings].
`,
	})
}


func sorthelpers(f *ast.File) (fixed bool) {
	if !imports(f, "sort") {
		return
	}

	walk(f, func(n interface{}) {
		s, ok := n.(*ast.SelectorExpr)
		if !ok || !isTopName(s.X, "sort") {
			return
		}

		switch s.Sel.String() {
		case "SortFloat64s":
			s.Sel.Name = "Float64s"
		case "SortInts":
			s.Sel.Name = "Ints"
		case "SortStrings":
			s.Sel.Name = "Strings"
		default:
			return
		}

		fixed = true
	})

	return
}
