Allow for searching by tag, description#47
Conversation
mattbierner
left a comment
There was a problem hiding this comment.
Thanks for looking into this! I think the general idea makes sense but needs a bit of polish. A few things I noticed when testing:
- There are now duplicate suggestions:
Ideally there should be a single suggestion that matches the different possible keywords
-
It seems like
::aren't working when I tried them? The idea is that accepting these inserts the:emoji:directly -
Are there any emoji in gemoji that have duplicate keys or are these all unique?
|
Thanks for taking a look. I will give it another go, and see if I can fix up those issues. |
2c2d0db to
1c87e6e
Compare
|
@mattbierner Took a bit of research and poking around, but I think I have a better approach here. The key is the I also updated the Markdown preview to show the category, tags, and description. And I verified that it works with |
| readonly emoji: string; | ||
| readonly tags: string[]; | ||
| readonly description: string; | ||
| readonly category: string; |
There was a problem hiding this comment.
Category is useful to search for something like animal
| return this.getMarkupEmojiCompletions(document, replacementSpan); | ||
| } | ||
|
|
||
| return this.getUnicodeEmojiCompletions(document, replacementSpan) |
There was a problem hiding this comment.
This change prevented duplicate suggestions, like:
:wink:
::wink::
It still seems to work with either : or :: prefixes. Is there anything else I'm missing here?
mattbierner
left a comment
There was a problem hiding this comment.
I'm seeing odd sorting in a few cases when matching on the tags, such as :rich for example:
If filterText / sortText isn't working, as a last resort you could also look into returning a vscode.CompletionList that marks isIncomplete. This will re-request completions as the user types, which would let you update the completion list based on the current word instead
| label: `::${x.name} ${x.emoji}`, | ||
| description: x.tags.join(', ') | ||
| }, kind); | ||
| item.filterText = `::${x.name} ${x.tags.join(' ')} ${x.description} ${x.category}`; |
There was a problem hiding this comment.
I don't think category should be included in the filter text as it is shared between too many emoji
Also I don't think description should be included because it will also match in some unexpected cases
|
@eschwartz @mattbierner hello! Is there any update on this? I believe that this is an amazing feature and would be amazingly helpful to have it. If @eschwartz is not interested anymore in doing that, I can try to continue from where he stopped. Please, let me know! |




Allow searching by tag or description, in addition to the actual emoji name.
For example, we can search by the
:rich:tag to get 🤑 , by the:flirt:tag to get either 😉 or 😘 , or the:downcastdescription to get 😓To support this, our
emojiMapneeds to support multiple matching emojis for each lookup term. I also updated the completion provider to show the search term to the right of the actual emoji name.BTW, I love this extension thanks @mattbierner for sharing all your hard work on this! I teach at a programming bootcamp, and it adds some needed fun to remote lectures 😄
Demo

Gemoji Data
For the demo's emojis
{ "emoji": "🤑", "names": [ "money_mouth_face" ], "tags": [ "rich" ], "description": "money-mouth face", "category": "Smileys & Emotion" }, { "emoji": "😘", "names": [ "kissing_heart" ], "tags": [ "flirt" ], "description": "face blowing a kiss", "category": "Smileys & Emotion" }, { "emoji": "😉", "names": [ "wink" ], "tags": [ "flirt" ], "description": "winking face", "category": "Smileys & Emotion" }, { "emoji": "😓", "names": [ "sweat" ], "tags": [], "description": "downcast face with sweat", "category": "Smileys & Emotion" },