Open
Description
Razor parse trees contain semantic information in the nodes themselves, such as whether a node is a tag helper or a regular HTML tag. This is very bad for performance: it means that we need to parse all trees multiple times and need input from the C# compilation in order to parse correctly. We need to restructure this to be closer to roslyn: SyntaxNodes just reflect the syntax structure of a file, needing no compilation input, and then expose a semantic model-type construct for the IDE to use to query semantic info such as whether an HTML tag is a tag helper.