code: func (c *Checker) deduplicate() {
  	m := map[token.Position]struct{ used, quiet bool }{}
  	for _, node := range c.graph.nodes {
  		obj, ok := node.obj.(types.Object)
  		if !ok {
  			continue
  		}
  		pos := c.prog.Fset().Position(obj.Pos())
  		m[pos] = struct{ used, quiet bool }{
  			m[pos].used || node.used,
  			m[pos].quiet || node.quiet,
  		}
  	}
  
  	for _, node := range c.graph.nodes {
  		obj, ok := node.obj.(types.Object)
  		if !ok {
  			continue
  		}
  		pos := c.prog.Fset().Position(obj.Pos())
  		node.used = m[pos].used
  		node.quiet = m[pos].quiet
  	}
  }
docs: // deduplicate merges objects based on their positions. This is done
  // to work around packages existing multiple times in go/packages.