Profiling shows output_kythe/7 at 30% and assign_exprs/6 at 52%.
For assign_exprs/6, almost all seems to be in possible_classes_from_attr/5, which ends up spending almost all of its time in conv_symtab_pairs/3.
The cost seems to be in scanning the entire symtab, so probably should have an inverted list for class attributes.
BUT: this probably only applies to sources that have lots of unresolved attributes, so better to first resolve as many attrs as possible.
Profiling shows output_kythe/7 at 30% and assign_exprs/6 at 52%. For assign_exprs/6, almost all seems to be in possible_classes_from_attr/5, which ends up spending almost all of its time in conv_symtab_pairs/3. The cost seems to be in scanning the entire symtab, so probably should have an inverted list for class attributes.
As for output_kythe - see Issue #5.