fix: ignore pasted @ for file mentions (#1649)

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Nicolas Charpentier
2026-06-23 14:07:09 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent 18744bf723
commit b87de3c5b2
3 changed files with 200 additions and 22 deletions
@@ -0,0 +1,74 @@
import { describe, expect, test } from 'bun:test';
import { getFileMentionAutocompleteQuery } from '../fileMentionAutocompleteState';
describe('getFileMentionAutocompleteQuery', () => {
test('opens file mention autocomplete for manually typed boundary @ text', () => {
expect(getFileMentionAutocompleteQuery({
value: '@config',
cursorPosition: '@config'.length,
inputSource: 'manual',
})).toBe('config');
expect(getFileMentionAutocompleteQuery({
value: 'check @main.ts',
cursorPosition: 'check @main.ts'.length,
inputSource: 'manual',
})).toBe('main.ts');
expect(getFileMentionAutocompleteQuery({
value: 'check @docs',
cursorPosition: 'check @docs'.length,
})).toBe('docs');
});
test('does not open file mention autocomplete when pasted text contains @', () => {
const pastedValues = [
'@config',
'@/path/to/file',
'Use @main.ts',
];
for (const value of pastedValues) {
expect(getFileMentionAutocompleteQuery({
value,
cursorPosition: value.length,
inputSource: 'paste',
insertedText: value,
})).toBeNull();
}
});
test('does not open file mention autocomplete for pasted package and email text', () => {
const pastedValues = [
'user@email.com',
'npx @scope/pkg@latest',
];
for (const value of pastedValues) {
expect(getFileMentionAutocompleteQuery({
value,
cursorPosition: value.length,
inputSource: 'paste',
insertedText: value,
})).toBeNull();
}
});
test('keeps autocomplete open when pasting a query fragment after a manually typed @', () => {
expect(getFileMentionAutocompleteQuery({
value: '@config',
cursorPosition: '@config'.length,
inputSource: 'paste',
insertedText: 'config',
})).toBe('config');
});
test('uses current value when paste source lacks inserted text context', () => {
expect(getFileMentionAutocompleteQuery({
value: '@config',
cursorPosition: '@config'.length,
inputSource: 'paste',
})).toBe('config');
});
});