complete()
local buffer, lines
factory = completion.in_buffer.factory
complete_at = (pos) ->
context = buffer\context_at pos
completer = factory buffer, context
completer\complete context
before_each ->
buffer = Buffer mode.by_name 'default'
lines = buffer.lines
returns completions for local matches in the buffer
buffer.text = [[
Hello there
some symbol (foo) {
if yike {
say_it = 'blarg'
s
}
}
other sion (arg) {
saphire = 'that too'
}
]]
comps = complete_at buffer.lines[5].end_pos
table.sort comps
assert.same { 'saphire', 'say_it', 'sion', 'some', 'symbol' }, comps
does not include the token being completed itself
buffer.text = [[
text
te
noice
test
]]
assert.same { 'text', 'test' }, complete_at lines[2].end_pos - 1
assert.same { 'test' }, complete_at 3
favours matches close to the current position
buffer.text = [[
two
twitter
tw
other
and other
twice
twitter
]]
assert.same { 'twitter', 'two', 'twice' }, complete_at lines[3].end_pos
offers "smart" completions after the local ones
buffer.text = [[
two
twitter
_fatwa
tw
the_water
]]
assert.same { 'twitter', 'two', 'the_water', '_fatwa' }, complete_at lines[4].end_pos
works with unicode
buffer.text = [[
hellö
häst
h
]]
assert.same { 'häst', 'hellö' }, complete_at lines[3].end_pos
detects existing words using the word_pattern mode variable
buffer.text = [[
*foo*/-bar
eat.food.
*
oo
]]
buffer.mode = word_pattern: r'\\*\\w+\\*'
assert.same { '*foo*' }, complete_at lines[3].end_pos
(multiple buffers)
local buffer2, buffer3
before_each ->
close_all_buffers!
buffer2 = Buffer buffer.mode
buffer2.text = 'foo\n'
app\add_buffer buffer2, false
buffer2.last_shown = 123
buffer3 = Buffer buffer.mode
buffer3.text = 'fabulous\n'
buffer3.last_shown = 12
app\add_buffer buffer3, false
after_each ->
app\close_buffer buffer2, true
app\close_buffer buffer3, true
searches up to <config.inbuffer_completion_max_buffers> other buffers
buffer.text = 'fry\nf'
comps = complete_at buffer.lines[2].end_pos
table.sort comps
assert.same { 'fabulous', 'foo', 'fry' }, comps
buffer.config.inbuffer_completion_max_buffers = 2
comps = complete_at buffer.lines[2].end_pos
table.sort comps
assert.same { 'foo', 'fry' }, comps
prefers closer matches
buffer.text = 'fry\nf'
comps = complete_at buffer.lines[2].end_pos
assert.same { 'fry', 'foo', 'fabulous' }, comps
skips buffers with a different mode if <config.inbuffer_completion_same_mode_only> is true
buffer.config.inbuffer_completion_same_mode_only = true
buffer2.mode = mode.by_name 'test_mode'
buffer.text = 'fry\nf'
comps = complete_at buffer.lines[2].end_pos
assert.same { 'fry', 'fabulous' }, comps
buffer.config.inbuffer_completion_same_mode_only = false
comps = complete_at buffer.lines[2].end_pos
assert.same { 'fry', 'foo', 'fabulous' }, comps