Skip to content

Commit 5a8d2fd

Browse files
committed
PR feedback
1 parent 1e8f7eb commit 5a8d2fd

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

src/common/emoji.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ const emojiRegex = /:([-+_a-z0-9]+):/g;
1313
let emojiMap: Record<string, string> | undefined;
1414
let emojiMapPromise: Promise<void> | undefined;
1515

16-
export async function ensureEmojis(context: ExtensionContext) {
16+
export async function ensureEmojis(context: ExtensionContext): Promise<Record<string, string>> {
1717
if (emojiMap === undefined) {
1818
if (emojiMapPromise === undefined) {
1919
emojiMapPromise = loadEmojiMap(context);
2020
}
2121
await emojiMapPromise;
2222
}
23+
return emojiMap!;
2324
}
2425

2526
async function loadEmojiMap(context: ExtensionContext) {
@@ -36,10 +37,3 @@ export function emojify(message: string) {
3637
return emojiMap?.[code] || s;
3738
});
3839
}
39-
40-
export function getEmojis(): Record<string, string> {
41-
if (emojiMap === undefined) {
42-
return {};
43-
}
44-
return emojiMap;
45-
}

src/view/emojiCompletionProvider.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as vscode from 'vscode';
7-
import { ensureEmojis, getEmojis } from '../common/emoji';
7+
import { ensureEmojis } from '../common/emoji';
88
import { Schemes } from '../common/uri';
99

1010
export class EmojiCompletionProvider implements vscode.CompletionItemProvider {
11-
private static readonly ID: string = 'EmojiCompletionProvider';
1211
private _emojiCompletions: vscode.CompletionItem[] = [];
1312

14-
constructor(private context: vscode.ExtensionContext) {
13+
constructor(private _context: vscode.ExtensionContext) {
1514
void this.buildEmojiCompletions();
1615
}
1716

1817
private async buildEmojiCompletions(): Promise<void> {
19-
await ensureEmojis(this.context);
20-
const emojis = getEmojis();
18+
const emojis = await ensureEmojis(this._context);
2119

2220
for (const [name, emoji] of Object.entries(emojis)) {
2321
const completionItem = new vscode.CompletionItem({ label: emoji, description: `:${name}:` }, vscode.CompletionItemKind.Text);
@@ -51,10 +49,23 @@ export class EmojiCompletionProvider implements vscode.CompletionItemProvider {
5149
}
5250

5351
// Only provide completions if we're in an emoji context (don't clutter Ctrl+Space results)
54-
if (!wordRange) {
52+
if (!wordRange || !wordAtPos) {
5553
return [];
5654
}
5755

56+
// Ensure the : comes after a space or start of line
57+
const colonPosition = wordRange.start;
58+
if (colonPosition.character > 0) {
59+
const charBeforeColon = document.getText(new vscode.Range(
60+
colonPosition.translate(0, -1),
61+
colonPosition
62+
));
63+
// If the character before : is not whitespace, don't show completions
64+
if (!/\s/.test(charBeforeColon)) {
65+
return [];
66+
}
67+
}
68+
5869
// Update the range on cached items directly
5970
for (const item of this._emojiCompletions) {
6071
item.range = wordRange;

0 commit comments

Comments
 (0)