self is always `this` by convention in js, so I think it will get confusing if we start using it for other stuff. Feel free to just rename it to ancestor or file or something though