Skip to content

Commit

Permalink
Extend completion heuristics for metals' 'implement all members' (#772)
Browse files Browse the repository at this point in the history
- Extend completion heuristics for metals' 'implement all members'
- Remove the very specific metals completion logic
  The replacement is already equal to the textEdit property.
  • Loading branch information
rwols authored Nov 13, 2019
1 parent c0bca2f commit e72085f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
3 changes: 1 addition & 2 deletions plugin/core/completion.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ def format_completion(item: dict, word_col: int, settings: 'Settings') -> 'Tuple
elif trigger[0] == ' ' or trigger[0] == '•':
trigger = trigger[1:] # remove clangd insertion indicator
else:
debug("replacement prefix does not match trigger!")
replacement = item.get("insertText") or trigger
debug("WARNING: Replacement prefix does not match trigger '{}'".format(trigger))

if len(replacement) > 0 and replacement[0] == '$': # sublime needs leading '$' escaped.
replacement = '\\$' + replacement[1:]
Expand Down
38 changes: 38 additions & 0 deletions tests/test_completion.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,23 @@
})
]

metals_implement_all_members = [
dict(label='Implement all members',
textEdit={
'newText': 'def foo: Int \u003d ${0:???}\n def boo: Int \u003d ${0:???}',
'range': {
'start': {
'line': 0,
'character': 0
},
'end': {
'line': 0,
'character': 1
}
}
})
]


class InitializationTests(DeferrableTestCase):
def setUp(self):
Expand Down Expand Up @@ -324,6 +341,27 @@ def test_edit_after_nonword(self):
self.view.substr(sublime.Region(0, self.view.size())),
'List.apply()')

def test_implement_all_members_quirk(self):
"""
Metals: "Implement all members" should just select the newText.
https://github.com/tomv564/LSP/issues/771
"""
yield OPEN_DOCUMENT_DELAY
self.view.run_command('append', {'characters': 'I'})
self.view.run_command('move_to', {'to': 'eol'})
self.client.responses['textDocument/completion'] = metals_implement_all_members
handler = self.get_view_event_listener('on_query_completions')
self.assertIsNotNone(handler)
if handler:
handler.on_query_completions("", [1])
yield 100
handler.on_text_command('insert_best_completion', {})
self.view.run_command('insert_best_completion', {})
yield AFTER_INSERT_COMPLETION_DELAY
self.assertEquals(
self.view.substr(sublime.Region(0, self.view.size())),
'def foo: Int = ???\n def boo: Int = ???')

def test_additional_edits(self):
yield OPEN_DOCUMENT_DELAY
self.client.responses[
Expand Down

0 comments on commit e72085f

Please sign in to comment.