blob: 32f342b97f66fb88d583d03fa7a16be4a275a95d [file] [log] [blame]
// Copyright 2023 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 reflectvaluecompare defines an Analyzer that checks for accidentally
// using == or reflect.DeepEqual to compare reflect.Value values.
// See issues 43993 and 18871.
//
// # Analyzer reflectvaluecompare
//
// reflectvaluecompare: check for comparing reflect.Value values with == or reflect.DeepEqual
//
// The reflectvaluecompare checker looks for expressions of the form:
//
// v1 == v2
// v1 != v2
// reflect.DeepEqual(v1, v2)
//
// where v1 or v2 are reflect.Values. Comparing reflect.Values directly
// is almost certainly not correct, as it compares the reflect package's
// internal representation, not the underlying value.
// Likely what is intended is:
//
// v1.Interface() == v2.Interface()
// v1.Interface() != v2.Interface()
// reflect.DeepEqual(v1.Interface(), v2.Interface())
package reflectvaluecompare