Includes parenthesized type expressions and type aliases.
Basically looks good.
I'd merge this one in with the previous.. And maybe even the one from above so that we end up with:
(in order for Line.First to be "type", Left->Previous cannot be nullptr, so this should be equivalent)
I'd move the ! into the parentheses, but doesn't matter much.
I think I'd prefer keeping this as is. The way it is now formulated is more verbose, but that's to communicate and keep apart three very different situations (type alias, (async)? function, variable declaration).
Merging the boolean conditions in some clever way will make it very hard to reverse-decipher which partially overlapping boolean clause is for which of these situations, and it's usually non-obvious if test coverage is good enough to make sure nothing breaks if you refactor.
The could would also be harder to read, e.g. the is(kw_function) part is logically related to the endsSeqeunce call, but they end up in different parts of the clause.
So, in the interest of readability and maintainability, I'll keep it like this, and assume by accepting the diff you're cool with that :-) If not, please do push back.