on master help sign in
Move `keymap.reverse_keymap()` to `Keytrie`:
b856368gibbz00
helix-term/src/keymap.rs+26−26
@@ -195,6 +195,32 @@ impl<'de> serde::de::Visitor<'de> for KeyTrieVisitor {
195}
195}
196
196
197impl KeyTrie {
197impl 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+
198 pub fn node(&self) -> Option<&KeyTrieNode> {
224 pub fn node(&self) -> Option<&KeyTrieNode> {
199 match *self {
225 match *self {
200 KeyTrie::Node(ref node) => Some(node),
226 KeyTrie::Node(ref node) => Some(node),
@@ -254,32 +280,6 @@ impl Keymap {
254 pub fn new(root: KeyTrie) -> Self {
280 pub fn new(root: KeyTrie) -> Self {
255 Keymap(root)
281 Keymap(root)
256 }
282 }
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− }
283}
283}
284
284
285impl Deref for Keymap {
285impl Deref for Keymap {