Writer class Null safety
Manages a tree structure which we use to generate code.
Each leaf in the tree is a StringBuffer that contains some code. A Scope is a non-leaf node in the tree. Why are we doing this? Sometimes, we're in the middle of generating the implementation of a method and we realize we need to introduce another top-level class! When passing a single StringBuffer to the generators that will get ugly to manage, but when passing a Scope we will always be able to write code in a parent scope.