on master help sign in
Move `keymap.reverse_keymap()` to `Keytrie`:

The plan is let `Keymaps` simply store `KeyTrie`s, as the `Keymap(Keytrie)` wrapping serves little to no purpose.

commitb8563685ec44fd6958514f478d879ba785e916ad authorgibbz00 <gabrielhansson00@gmail.com> dateSat 3 Jun 2023, 10:59 (3 years ago) parenteda4c79
1 file changed+26−26
helix-term/src/keymap.rs+26−26
helix-term/src/keymap.rs+26−26
@@ -195,6 +195,32 @@ impl<'de> serde::de::Visitor<'de> for KeyTrieVisitor {
195195}
196196
197197impl KeyTrie {
198+ pub fn reverse_map(&self) -> ReverseKeymap {
199+ // recursively visit all nodes in keymap
200+ fn map_node(cmd_map: &mut ReverseKeymap, node: &KeyTrie, keys: &mut Vec<KeyEvent>) {
201+ match node {
202+ KeyTrie::MappableCommand(cmd) => {
203+ let name = cmd.name();
204+ if name != "no_op" {
205+ cmd_map.entry(name.into()).or_default().push(keys.clone())
206+ }
207+ }
208+ KeyTrie::Node(next) => {
209+ for (key, trie) in &next.map {
210+ keys.push(*key);
211+ map_node(cmd_map, trie, keys);
212+ keys.pop();
213+ }
214+ }
215+ KeyTrie::Sequence(_) => {}
216+ };
217+ }
218+
219+ let mut res = HashMap::new();
220+ map_node(&mut res, self, &mut Vec::new());
221+ res
222+ }
223+
198224 pub fn node(&self) -> Option<&KeyTrieNode> {
199225 match *self {
200226 KeyTrie::Node(ref node) => Some(node),
@@ -254,32 +280,6 @@ impl Keymap {
254280 pub fn new(root: KeyTrie) -> Self {
255281 Keymap(root)
256282 }
257−
258− pub fn reverse_map(&self) -> ReverseKeymap {
259− // recursively visit all nodes in keymap
260− fn map_node(cmd_map: &mut ReverseKeymap, node: &KeyTrie, keys: &mut Vec<KeyEvent>) {
261− match node {
262− KeyTrie::MappableCommand(cmd) => {
263− let name = cmd.name();
264− if name != "no_op" {
265− cmd_map.entry(name.into()).or_default().push(keys.clone())
266− }
267− }
268− KeyTrie::Node(next) => {
269− for (key, trie) in &next.map {
270− keys.push(*key);
271− map_node(cmd_map, trie, keys);
272− keys.pop();
273− }
274− }
275− KeyTrie::Sequence(_) => {}
276− };
277− }
278−
279− let mut res = HashMap::new();
280− map_node(&mut res, &self.0, &mut Vec::new());
281− res
282− }
283283}
284284
285285impl Deref for Keymap {