I slightly altered the way we parse import definitions to ensure we
merge imports from the same modules (that aren't aliased) together.
This prevents an annoying warning with duplicated import lines and
makes it just more convenient overall.
As a trade-off, we can no longer interleave import definitions with
other definitions. This should be a minor setback only since the
formatter was already ensuring that all import definitions would be
grouped at the top.
Note that, I originally attempted to implement this in the formatter
instead of the parser. As it felt more appropriate there. However, the
formatter operates on (unmutable) borrowed definitions, which makes it
annoyingly hard to perform any AST manipulations. The Document
returns by the format carries a lifetime that prevents the creation of
intermediate local values.
So instead, slightly tweaking the parser felt like the right thing to
do.
I slightly altered the way we parse import definitions to ensure we merge imports from the same modules (that aren't aliased) together.
This prevents an annoying warning with duplicated import lines and makes it just more convenient overall.
As a trade-off, we can no longer interleave import definitions with other definitions. This should be a minor setback only since the formatter was already ensuring that all import definitions would be grouped at the top.
Note that, I originally attempted to implement this in the formatter instead of the parser. As it felt more appropriate there. However, the formatter operates on (unmutable) borrowed definitions, which makes it annoyingly hard to perform any AST manipulations. The
Document
returns by the format carries a lifetime that prevents the creation of intermediate local values.So instead, slightly tweaking the parser felt like the right thing to do.