Resurrect rush

1. Refactor the code
2. Retab
3. Make all specs passed
4. Add some heuristics and aliases

And I really want to maintain it. If noone still doing it, may I?