Я наверное, подхожу к вопросу не с той стороны, но лучше придумать не смог
Раскрашивается код на основе CompileUnit. То есть берется TopLevelNamespace и рекурсивно раскрашиваются его дети на основе Location'ов.
Но тут проблема. Допустим, у нас есть Decl.Using. Тогда Decl.Using.Location — это локейшн всего оператора. Decl.Usinc.NameLocations и AliasLocation указывають, соответственно на пространства имен и тип. А покрасить нужно только сам кейворд (локейшна которого в Decl'е нету).
Можно, конечно просто посчитать, что using это 5 символов, первый совпадает с началом локейшна, но что-то мне подсказывает, что есть вариант получше.