func isUnsafePointer(node *ast.SelectorExpr) bool {
	switch X := node.X.(type) {
	case *ast.Ident:
		if X.Name == "unsafe" && node.Sel.Name == "Pointer" {
			return true
		}
	}
	return false
}
Types of unsafe usages to be counted

- unsafe.Pointer
- unsafe.Offsetof
- unsafe.Sizeof
- unsafe.Alignof
- reflect.SliceHeader
- reflect.StringHeader
- uintptr

- plain count
- usage as variable definition, possibly in struct
- usage as function parameter type
- usage in assignment
- usage call argument


returns true if the specified node is an unsafe.Pointer selector node by checking if the selector is an identifier
and the identifier names match.
package counter
import (
	"go/ast"
)