Check for receivers named 'this' or 'self'.
diff --git a/lint.go b/lint.go
index 8691667..49a8753 100644
--- a/lint.go
+++ b/lint.go
@@ -72,6 +72,7 @@
 	f.lintElses()
 	f.lintRanges()
 	f.lintErrorf()
+	f.lintReceiverNames()
 
 	return f.problems
 }
@@ -692,6 +693,28 @@
 	})
 }
 
+var badReceiverNames = map[string]bool{
+	"me":   true,
+	"this": true,
+	"self": true,
+}
+
+// lintReceiverNames examines receiver names. It complains about names such as "this".
+func (f *file) lintReceiverNames() {
+	f.walk(func(n ast.Node) bool {
+		fn, ok := n.(*ast.FuncDecl)
+		if !ok || fn.Recv == nil {
+			return true
+		}
+		names := fn.Recv.List[0].Names
+		if len(names) < 1 || !badReceiverNames[names[0].Name] {
+			return true
+		}
+		f.errorf(n, 1, `receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self"`)
+		return true
+	})
+}
+
 func receiverName(fn *ast.FuncDecl) string {
 	switch e := fn.Recv.List[0].Type.(type) {
 	case *ast.Ident:
diff --git a/testdata/receiver-names.go b/testdata/receiver-names.go
new file mode 100644
index 0000000..a4fcac7
--- /dev/null
+++ b/testdata/receiver-names.go
@@ -0,0 +1,18 @@
+// Test for bad receiver names.
+
+// Package foo ...
+package foo
+
+type foo struct{}
+
+func (this foo) f1() { // MATCH /should be a reflection of its identity/
+}
+
+func (self foo) f2() { // MATCH /should be a reflection of its identity/
+}
+
+func (f foo) f3() {
+}
+
+func (foo) f4() {
+}