Before: Save g:ale_completion_excluded_words let g:ale_completion_excluded_words = [] After: Restore unlet! b:ale_completion_excluded_words unlet! b:suggestions Execute(Prefix filtering should work for Lists of strings): AssertEqual \ ['FooBar', 'foo'], \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], 'foo', 0) AssertEqual \ ['FooBar', 'FongBar', 'baz', 'foo'], \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], '.', 0) AssertEqual \ ['FooBar', 'FongBar', 'baz', 'foo'], \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], '', 0) Execute(Exact filtering should work): AssertEqual \ ['foo'], \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], 'foo', 1) AssertEqual \ ['FooBar', 'FongBar', 'baz', 'foo'], \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], '.', 1) AssertEqual \ ['Foo'], \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'Foo', 'foo'], 'Foo', 1) Execute(Prefix filtering should work for completion items): AssertEqual \ [{'word': 'FooBar'}, {'word': 'foo'}], \ ale#completion#Filter( \ bufnr(''), \ '', \ [ \ {'word': 'FooBar'}, \ {'word': 'FongBar'}, \ {'word': 'baz'}, \ {'word': 'foo'}, \ ], \ 'foo', \ 0, \ ) AssertEqual \ [ \ {'word': 'FooBar'}, \ {'word': 'FongBar'}, \ {'word': 'baz'}, \ {'word': 'foo'}, \ ], \ ale#completion#Filter( \ bufnr(''), \ '', \ [ \ {'word': 'FooBar'}, \ {'word': 'FongBar'}, \ {'word': 'baz'}, \ {'word': 'foo'}, \ ], \ '.', \ 0, \ ) Execute(Excluding words from completion results should work): let b:ale_completion_excluded_words = ['it', 'describe'] AssertEqual \ [{'word': 'Italian'}], \ ale#completion#Filter( \ bufnr(''), \ '', \ [ \ {'word': 'Italian'}, \ {'word': 'it'}, \ ], \ 'it', \ 0, \ ) AssertEqual \ [{'word': 'Deutsch'}], \ ale#completion#Filter( \ bufnr(''), \ '', \ [ \ {'word': 'describe'}, \ {'word': 'Deutsch'}, \ ], \ 'de', \ 0, \ ) AssertEqual \ [{'word': 'Deutsch'}], \ ale#completion#Filter( \ bufnr(''), \ '', \ [ \ {'word': 'describe'}, \ {'word': 'Deutsch'}, \ ], \ '.', \ 0, \ ) Execute(Excluding words from completion results should work with lists of Strings): let b:ale_completion_excluded_words = ['it', 'describe'] AssertEqual \ ['Italian'], \ ale#completion#Filter(bufnr(''), '', ['Italian', 'it'], 'it', 0) AssertEqual \ ['Deutsch'], \ ale#completion#Filter(bufnr(''), '', ['describe', 'Deutsch'], 'de', 0) AssertEqual \ ['Deutsch'], \ ale#completion#Filter(bufnr(''), '', ['describe', 'Deutsch'], '.', 0) AssertEqual \ ['Deutsch'], \ ale#completion#Filter(bufnr(''), '', ['Deutsch'], '', 0) Execute(Filtering shouldn't modify the original list): let b:ale_completion_excluded_words = ['it', 'describe'] let b:suggestions = [{'word': 'describe'}] AssertEqual [], ale#completion#Filter(bufnr(''), '', b:suggestions, '.', 0) AssertEqual b:suggestions, [{'word': 'describe'}] AssertEqual [], ale#completion#Filter(bufnr(''), '', b:suggestions, 'de', 0) AssertEqual b:suggestions, [{'word': 'describe'}] Execute(Filtering should respect filetype triggers): let b:suggestions = [{'word': 'describe'}] AssertEqual b:suggestions, ale#completion#Filter(bufnr(''), '', b:suggestions, '.', 0) AssertEqual b:suggestions, ale#completion#Filter(bufnr(''), 'rust', b:suggestions, '.', 0) AssertEqual b:suggestions, ale#completion#Filter(bufnr(''), 'rust', b:suggestions, '::', 0)