| // 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 |