Habitual non-elimination of unused variable patterns is very noisy. This could be written
```
def typeSig(tpe: Type): Type = tpe match {
  case SingleType(_, sym)                     => sym.companionSymbol.typeSignature
  case ExistentialType(_, TypeRef(_, sym, _)) => sym.typeSignature
  case TypeRef(_, sym, _)                     => sym.typeSignature
  case ClassInfoType(_, _, sym)               => sym.typeSignature
  case ThisType(sym)                          => sym.typeSignature
  case _                                      => tpe
}
```
Much of the logic in that method could use some explanation.