Code change:
assert.ok(matchesWords('gipu', 'Category: Git: Pull', true) === null); assert.deepEqual(matchesWords('pu', 'Category: Git: Pull', true), [{ start: 15, end: 17 }]); }); <ins> test('fuzzyMatchAndScore', function () { function assertMatches(pattern: string, word: string, decoratedWord?: string) { let r = fuzzyMatchAndScore(pattern, word); assert.ok(Boolean(r) === Boolean(decoratedWord)); if (r) { const [, matches] = r; let pos = 0; for (let i = 0; i < matches.length; i++) { let actual = matches[i]; let expected = decoratedWord.indexOf('^', pos) - i; assert.equal(actual, expected); pos = expected + 1 + i; } } } assertMatches('no', 'match'); assertMatches('no', ''); assertMatches('', 'match'); assertMatches('BK', 'the_black_knight', 'the_^black_^knight'); assertMatches('bkn', 'the_black_knight', 'the_^black_^k^night'); assertMatches('bt', 'the_black_knight', 'the_^black_knigh^t'); assertMatches('bti', 'the_black_knight'); assertMatches('LLL', 'SVisualLoggerLogsList', 'SVisual^Logger^Logs^List'); assertMatches('LLLL', 'SVisualLoggerLogsList'); assertMatches('sllll', 'SVisualLoggerLogsList', '^SVisua^l^Logger^Logs^List'); assertMatches('sl', 'SVisualLoggerLogsList', '^SVisual^LoggerLogsList'); assertMatches('foobar', 'foobar', '^f^o^o^b^a^r'); assertMatches('fob', 'foobar', '^f^oo^bar'); assertMatches('ob', 'foobar'); assertMatches('gp', 'Git: Pull', '^Git: ^Pull'); assertMatches('gp', 'Git_Git_Pull', '^Git_Git_^Pull'); assertMatches('g p', 'Git: Pull', '^Git:^ ^Pull'); assertMatches('gip', 'Git: Pull', '^G^it: ^Pull'); assertMatches('is', 'isValid', '^i^sValid'); assertMatches('is', 'ImportStatement', '^Import^Statement'); assertMatches('lowrd', 'lowWord', '^l^o^wWo^r^d'); assertMatches('ccm', 'cacmelCase', '^ca^c^melCase'); assertMatches('ccm', 'camelCase'); assertMatches('ccm', 'camelCasecm', '^camel^Casec^m'); }); test('topScore', function () { function assertTopScore(pattern: string, expected: number, ...words: string[]) { let topScore = -1; let topIdx = 0; for (let i = 0; i < words.length; i++) { const word = words[i]; const m = fuzzyMatchAndScore(pattern, word); if (m) { const [score] = m; if (score > topScore) { topScore = score; topIdx = i; } } } assert.equal(topIdx, expected); } assertTopScore('Foo', 1, 'foo', 'Foo', 'foo'); assertTopScore('CC', 1, 'camelCase', 'CamelCase'); assertTopScore('cC', 0, 'camelCase', 'CamelCase'); assertTopScore('cC', 1, 'ccfoo', 'camelCase'); assertTopScore('cC', 1, 'ccfoo', 'camelCase', 'foo-cC-bar'); // issue #17836 assertTopScore('p', 0, 'parse', 'posix', 'pafdsa', 'path', 'p'); assertTopScore('pa', 0, 'parse', 'pafdsa', 'path'); // issue #14583 assertTopScore('log', 3, 'HTMLOptGroupElement', 'ScrollLogicalPosition', 'SVGFEMorphologyElement', 'log'); assertTopScore('e', 2, 'AbstractWorker', 'ActiveXObject', 'else'); // issue #14446 assertTopScore('workbench.sideb', 1, 'workbench.editor.defaultSideBySideLayout', 'workbench.sideBar.location'); // issue #11423 assertTopScore('editor.r', 2, 'diffEditor.renderSideBySide', 'editor.overviewRulerlanes', 'editor.renderControlCharacter', 'editor.renderWhitespace'); // assertTopScore('editor.R', 1, 'diffEditor.renderSideBySide', 'editor.overviewRulerlanes', 'editor.renderControlCharacter', 'editor.renderWhitespace'); // assertTopScore('Editor.r', 0, 'diffEditor.renderSideBySide', 'editor.overviewRulerlanes', 'editor.renderControlCharacter', 'editor.renderWhitespace'); assertTopScore('-mo', 1, '-ms-ime-mode', '-moz-columns'); // // dupe, issue #14861 assertTopScore('convertModelPosition', 0, 'convertModelPositionToViewPosition', 'convertViewToModelPosition'); // // dupe, issue #14942 assertTopScore('is', 0, 'isValidViewletId', 'import statement'); }); </ins> });

Related discussion:
text: <!-- Do you have a question? Please ask it on --- VSCode Version: 1.10.1 OS Version: macOS Is it possible for VSCode to support the following kinds of auto complete, please see screenshots Word completion: <img width="357" alt="screen shot 2017-03-07 at 10 23 19 am" src=""Member function completion: <img width="359" alt="screen shot 2017-03-07 at 10 20 22 am" src=""All auto-completions come with fuzzy matching. Steps to Reproduce:
Agree, actually fuzzy matching only works with camel Case, but in sublime and atom you can get completion by typing any middle letter of the target word. I still miss this feature in vscode
I like, tho will be some work and maybe some adjustment for folks that are used to our current filtering and ranking
This got implemented with <img width="280" alt="screen shot 2017-03-20 at 17 38 54" src=""
And this is valid for all languages then?
Yes, we have changed the default matcher to be more fuzzy.
VSCode: 11.0-insider I appear to be getting stuck in a recursive loop, and according to DevTools (I clicked Pause in the Debugger) it is happening in . I tested this with . I was able to reproduce this with a simple HTML file: After typing the opening and IntelliSense appears, trying to type an additional character will freeze the whole VSCode.
Thanks for the heads-up. You are right, there are situations in which it keeps recursing forever. I have implemented a different approach today and just pushed the last changes. Will be in tomorrows insiders.