Commit c1209de
committed
input: revise CustomHighlighter to token-name model + add example
Reshapes the trait per maintainer feedback on PR longbridge#2328:
- fn styles(&self, range: Range<usize>, cx: &App)
- -> Vec<(Range<usize>, HighlightStyle)>;
+ fn tokens(&self, range: Range<usize>)
+ -> Vec<(Range<usize>, SharedString)>;
The previous shape returned pre-resolved `HighlightStyle` and took
`&App`, forcing implementors to resolve theme tokens on the render
thread every frame. That bypassed upstream's own tree-sitter path,
which emits scope-name strings resolved through `HighlightTheme::style()`
at `highlighter.rs:719`.
Per Monaco Editor's design (referenced in review), tokenizers emit
named scopes; a separate theme map resolves names to styles. The trait
now constrains the hot path to a `SharedString` read so heavy parsing
can be arranged off-thread (subscribe to `InputEvent::Change`, cache,
hand back ranges on call) -- addressing the 200k-line performance
concern by construction.
Token names use upstream's existing scope vocabulary
(`"keyword"`, `"string"`, `"comment"`, `"variable.special"`, ...);
`.`-namespaced names fall back to their prefix via
`SyntaxColors::style`. Unrecognized names render with the default
style.
Adds a worked example at `crates/story/examples/editor.rs`
(`MarkerHighlighter`): tags `TODO` / `FIXME` / `XXX` / `HACK` /
`NOTE` markers with `keyword.special`, recomputed on
`InputEvent::Change`. A syntect or language-server consumer would
follow the same shape with a different parser inside `refresh()`.
Tests updated to the new method signature; both still verify
install / clear round-trip and tree-sitter composition through
`combine_highlights`.1 parent 76d9476 commit c1209de
4 files changed
Lines changed: 170 additions & 65 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
17 | 20 | | |
18 | 21 | | |
19 | 22 | | |
| |||
66 | 69 | | |
67 | 70 | | |
68 | 71 | | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
69 | 123 | | |
70 | 124 | | |
71 | 125 | | |
| |||
77 | 131 | | |
78 | 132 | | |
79 | 133 | | |
| 134 | + | |
80 | 135 | | |
81 | 136 | | |
82 | 137 | | |
| |||
690 | 745 | | |
691 | 746 | | |
692 | 747 | | |
| 748 | + | |
693 | 749 | | |
694 | 750 | | |
695 | 751 | | |
| |||
711 | 767 | | |
712 | 768 | | |
713 | 769 | | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
714 | 778 | | |
715 | 779 | | |
716 | 780 | | |
| |||
726 | 790 | | |
727 | 791 | | |
728 | 792 | | |
729 | | - | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
730 | 796 | | |
731 | 797 | | |
732 | 798 | | |
| |||
741 | 807 | | |
742 | 808 | | |
743 | 809 | | |
| 810 | + | |
744 | 811 | | |
745 | 812 | | |
746 | 813 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | | - | |
18 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
19 | 33 | | |
20 | 34 | | |
21 | 35 | | |
| |||
26 | 40 | | |
27 | 41 | | |
28 | 42 | | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
33 | 49 | | |
34 | 50 | | |
35 | | - | |
36 | | - | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
37 | 54 | | |
38 | | - | |
| 55 | + | |
| 56 | + | |
39 | 57 | | |
40 | | - | |
41 | | - | |
42 | | - | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
43 | 63 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
860 | 860 | | |
861 | 861 | | |
862 | 862 | | |
863 | | - | |
864 | | - | |
865 | | - | |
| 863 | + | |
| 864 | + | |
866 | 865 | | |
867 | 866 | | |
868 | 867 | | |
| |||
1126 | 1125 | | |
1127 | 1126 | | |
1128 | 1127 | | |
1129 | | - | |
1130 | | - | |
1131 | | - | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
1132 | 1132 | | |
1133 | | - | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
1134 | 1145 | | |
1135 | 1146 | | |
1136 | 1147 | | |
| |||
1199 | 1210 | | |
1200 | 1211 | | |
1201 | 1212 | | |
1202 | | - | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
1203 | 1217 | | |
1204 | 1218 | | |
1205 | 1219 | | |
| |||
1621 | 1635 | | |
1622 | 1636 | | |
1623 | 1637 | | |
1624 | | - | |
| 1638 | + | |
| 1639 | + | |
1625 | 1640 | | |
1626 | 1641 | | |
1627 | 1642 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
625 | 625 | | |
626 | 626 | | |
627 | 627 | | |
628 | | - | |
629 | | - | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
630 | 631 | | |
631 | 632 | | |
632 | | - | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
633 | 636 | | |
634 | 637 | | |
635 | 638 | | |
| |||
2755 | 2758 | | |
2756 | 2759 | | |
2757 | 2760 | | |
2758 | | - | |
| 2761 | + | |
2759 | 2762 | | |
2760 | 2763 | | |
2761 | 2764 | | |
2762 | | - | |
2763 | | - | |
| 2765 | + | |
| 2766 | + | |
| 2767 | + | |
| 2768 | + | |
2764 | 2769 | | |
2765 | 2770 | | |
2766 | | - | |
2767 | | - | |
2768 | | - | |
2769 | | - | |
2770 | | - | |
2771 | | - | |
2772 | | - | |
2773 | | - | |
2774 | | - | |
2775 | | - | |
2776 | | - | |
2777 | | - | |
2778 | | - | |
2779 | | - | |
2780 | | - | |
2781 | | - | |
2782 | | - | |
2783 | | - | |
| 2771 | + | |
| 2772 | + | |
| 2773 | + | |
2784 | 2774 | | |
2785 | 2775 | | |
2786 | 2776 | | |
| |||
2797 | 2787 | | |
2798 | 2788 | | |
2799 | 2789 | | |
2800 | | - | |
2801 | | - | |
| 2790 | + | |
| 2791 | + | |
2802 | 2792 | | |
2803 | 2793 | | |
2804 | 2794 | | |
2805 | 2795 | | |
2806 | 2796 | | |
2807 | 2797 | | |
2808 | 2798 | | |
2809 | | - | |
2810 | | - | |
| 2799 | + | |
| 2800 | + | |
| 2801 | + | |
2811 | 2802 | | |
2812 | | - | |
2813 | | - | |
| 2803 | + | |
| 2804 | + | |
2814 | 2805 | | |
2815 | 2806 | | |
2816 | 2807 | | |
| |||
2824 | 2815 | | |
2825 | 2816 | | |
2826 | 2817 | | |
2827 | | - | |
| 2818 | + | |
2828 | 2819 | | |
2829 | | - | |
| 2820 | + | |
| 2821 | + | |
| 2822 | + | |
| 2823 | + | |
| 2824 | + | |
| 2825 | + | |
| 2826 | + | |
| 2827 | + | |
2830 | 2828 | | |
2831 | 2829 | | |
2832 | 2830 | | |
| |||
2843 | 2841 | | |
2844 | 2842 | | |
2845 | 2843 | | |
| 2844 | + | |
| 2845 | + | |
| 2846 | + | |
| 2847 | + | |
| 2848 | + | |
| 2849 | + | |
| 2850 | + | |
| 2851 | + | |
| 2852 | + | |
2846 | 2853 | | |
2847 | 2854 | | |
2848 | 2855 | | |
| |||
2865 | 2872 | | |
2866 | 2873 | | |
2867 | 2874 | | |
2868 | | - | |
| 2875 | + | |
2869 | 2876 | | |
2870 | 2877 | | |
2871 | 2878 | | |
2872 | 2879 | | |
2873 | 2880 | | |
2874 | 2881 | | |
2875 | | - | |
2876 | | - | |
2877 | | - | |
2878 | | - | |
2879 | | - | |
2880 | | - | |
| 2882 | + | |
| 2883 | + | |
2881 | 2884 | | |
2882 | 2885 | | |
2883 | 2886 | | |
| |||
0 commit comments