Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VLS uses snippet completion even when the client doesn't support them #1478

Open
3 tasks done
bstaletic opened this issue Oct 23, 2019 · 0 comments
Open
3 tasks done

Comments

@bstaletic
Copy link

  • I have searched through existing issues
  • I have read through docs
  • I have read FAQ

Info

  • Platform: Linux
  • Vetur version: 0.0.61
  • VS Code version: N/A

Problem

Sending snippet completions for clients that don't declare that capability can break said clients.

Ycmd client capabilities:

{"textDocument":{"completion":{"completionItem":{"documentationFormat":["plaintext","markdown"]},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"hover":{"contentFormat":["plaintext","markdown"]},"signatureHelp":{"signatureInformation":{"documentationFormat":["plaintext","markdown"],"parameterInformation":{"labelOffsetSupport":false}}}}}

As you can see, completionItem doesn't mention snippetSupport. However, this is how vls responds to textDocument/completion request:

2019-10-23 23:53:58,733 - DEBUG - TX: Sending message: b'Content-Length: 176\r\n\r\n{"id":2,"jsonrpc":"2.0","method":"textDocument/completion","params":{"position":{"character":0,"line":0},"textDocument":{"uri":"file:///home/bstaletic/work/test/vue/foo.vue"}}}'
2019-10-23 23:53:58,737 - DEBUG - RX: Received message: b'{"jsonrpc":"2.0","id":2,"result":{"isIncomplete":false,"items":[{"label":"<vue> with default.vue \xe2\x9c\x8c","insertText":"<template>\\n  ${0}\\n</template>\\n\\n<script>\\nexport default {\\n\\n}\\n</script>\\n\\n<style>\\n\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<template>\\n  ${0}\\n</template>\\n\\n<script>\\nexport default {\\n\\n}\\n</script>\\n\\n<style>\\n\\n</style>\\n```"},"detail":"default.vue | .vue","sortText":"2a<vue> with default.vue \xe2\x9c\x8c"},{"label":"<template> html.vue \xe2\x9c\x8c","insertText":"<template>\\n\\t${0}\\n</template>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<template>\\n\\t${0}\\n</template>\\n```"},"detail":"html.vue | .html","sortText":"2b<template> html.vue \xe2\x9c\x8c"},{"label":"<template> pug.vue \xe2\x9c\x8c","insertText":"<template lang=\\"pug\\">\\n\\t${0}\\n</template>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<template lang=\\"pug\\">\\n\\t${0}\\n</template>\\n```"},"detail":"pug.vue | .html","sortText":"2b<template> pug.vue \xe2\x9c\x8c"},{"label":"<style> css-scoped.vue \xe2\x9c\x8c","insertText":"<style scoped>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style scoped>\\n${0}\\n</style>\\n```"},"detail":"css-scoped.vue | .css","sortText":"2c<style> css-scoped.vue \xe2\x9c\x8c"},{"label":"<style> css.vue \xe2\x9c\x8c","insertText":"<style>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style>\\n${0}\\n</style>\\n```"},"detail":"css.vue | .css","sortText":"2c<style> css.vue \xe2\x9c\x8c"},{"label":"<style> less-scoped.vue \xe2\x9c\x8c","insertText":"<style lang=\\"less\\" scoped>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"less\\" scoped>\\n${0}\\n</style>\\n```"},"detail":"less-scoped.vue | .css","sortText":"2c<style> less-scoped.vue \xe2\x9c\x8c"},{"label":"<style> less.vue \xe2\x9c\x8c","insertText":"<style lang=\\"less\\">\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"less\\">\\n${0}\\n</style>\\n```"},"detail":"less.vue | .css","sortText":"2c<style> less.vue \xe2\x9c\x8c"},{"label":"<style> postcss-scoped.vue \xe2\x9c\x8c","insertText":"<style lang=\\"postcss\\" scoped>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"postcss\\" scoped>\\n${0}\\n</style>\\n```"},"detail":"postcss-scoped.vue | .css","sortText":"2c<style> postcss-scoped.vue \xe2\x9c\x8c"},{"label":"<style> postcss.vue \xe2\x9c\x8c","insertText":"<style lang=\\"postcss\\">\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"postcss\\">\\n${0}\\n</style>\\n```"},"detail":"postcss.vue | .css","sortText":"2c<style> postcss.vue \xe2\x9c\x8c"},{"label":"<style> sass-scoped.vue \xe2\x9c\x8c","insertText":"<style lang=\\"sass\\" scoped>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"sass\\" scoped>\\n${0}\\n</style>\\n```"},"detail":"sass-scoped.vue | .css","sortText":"2c<style> sass-scoped.vue \xe2\x9c\x8c"},{"label":"<style> sass.vue \xe2\x9c\x8c","insertText":"<style lang=\\"sass\\">\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"sass\\">\\n${0}\\n</style>\\n```"},"detail":"sass.vue | .css","sortText":"2c<style> sass.vue \xe2\x9c\x8c"},{"label":"<style> scss-scoped.vue \xe2\x9c\x8c","insertText":"<style lang=\\"scss\\" scoped>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"scss\\" scoped>\\n${0}\\n</style>\\n```"},"detail":"scss-scoped.vue | .css","sortText":"2c<style> scss-scoped.vue \xe2\x9c\x8c"},{"label":"<style> scss.vue \xe2\x9c\x8c","insertText":"<style lang=\\"scss\\">\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"scss\\">\\n${0}\\n</style>\\n```"},"detail":"scss.vue | .css","sortText":"2c<style> scss.vue \xe2\x9c\x8c"},{"label":"<style> stylus-scoped.vue \xe2\x9c\x8c","insertText":"<style lang=\\"stylus\\" scoped>\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"stylus\\" scoped>\\n${0}\\n</style>\\n```"},"detail":"stylus-scoped.vue | .css","sortText":"2c<style> stylus-scoped.vue \xe2\x9c\x8c"},{"label":"<style> stylus.vue \xe2\x9c\x8c","insertText":"<style lang=\\"stylus\\">\\n${0}\\n</style>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<style lang=\\"stylus\\">\\n${0}\\n</style>\\n```"},"detail":"stylus.vue | .css","sortText":"2c<style> stylus.vue \xe2\x9c\x8c"},{"label":"<script> javascript.vue \xe2\x9c\x8c","insertText":"<script>\\nexport default {\\n\\t${0}\\n}\\n</script>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<script>\\nexport default {\\n\\t${0}\\n}\\n</script>\\n```"},"sortText":"2d<script> javascript.vue \xe2\x9c\x8c"},{"label":"<script> typescript.vue \xe2\x9c\x8c","insertText":"<script lang=\\"ts\\">\\nimport Vue from \'vue\'\\nexport default Vue.extend({\\n\\t${0}\\n})\\n</script>","insertTextFormat":2,"kind":17,"documentation":{"kind":"markdown","value":"```vue\\n<script lang=\\"ts\\">\\nimport Vue from \'vue\'\\nexport default Vue.extend({\\n\\t${0}\\n})\\n</script>\\n```"},"sortText":"2d<script> typescript.vue \xe2\x9c\x8c"}]}}'
Traceback (most recent call last):
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/third_party/bottle/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/third_party/bottle/bottle.py", line 1740, in wrapper
    rv = callback(*a, **ka)
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/watchdog_plugin.py", line 104, in wrapper
    return callback( *args, **kwargs )
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/hmac_plugin.py", line 68, in wrapper
    body = callback( *args, **kwargs )
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/handlers.py", line 120, in GetCompletions
    completions = filetype_completer.ComputeCandidates( request_data )
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/completers/completer.py", line 271, in ComputeCandidates
    candidates = self._GetCandidatesFromSubclass( request_data )
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/completers/language_server/language_server_completer.py", line 933, in _GetCandidatesFromSubclass
    codepoint )
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/completers/language_server/language_server_completer.py", line 920, in ComputeCandidatesInner
    request_data ),
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/completers/language_server/language_server_completer.py", line 1033, in _CandidatesFromCompletionItems
    _InsertionTextForItem( request_data, item ) )
  File "/home/bstaletic/.vim/pack/bundle/start/YouCompleteMe/third_party/ycmd/ycmd/completers/language_server/language_server_completer.py", line 2089, in _InsertionTextForItem
    item.get( 'insertTextFormat' ) or 1 ] == 'PlainText'
AssertionError

The completion items contain "insertTextFormat":2 which indicates snippets instead of plain text completion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants