Do not depend on UltiSnips internals

Use UltiSnips#SnippetsInCurrentScope to fetch snippets.
Add an entry in the FAQ about the :UltiSnipsAddFiletypes command.
This commit is contained in:
micbou 2016-09-08 18:09:27 +02:00
parent e8047050cd
commit 5dca552d5d
No known key found for this signature in database
GPG Key ID: C7E8FD1F3BDA1E05
3 changed files with 47 additions and 42 deletions

View File

@ -2648,6 +2648,16 @@ g:UltiSnipsJumpForwardTrigger
g:UltiSnipsJumpBackwardTrigger g:UltiSnipsJumpBackwardTrigger
``` ```
### Snippets added with `:UltiSnipsAddFiletypes` do not appear in the popup menu
For efficiency, YCM only fetches UltiSnips snippets in specific scenarios like
visiting a buffer or setting its filetype. You can force YCM to retrieve them by
manually triggering the `FileType` autocommand:
```viml
:doautocmd FileType
```
### Why isn't YCM just written in plain VimScript, FFS? ### Why isn't YCM just written in plain VimScript, FFS?
Because of the identifier completion engine and subsequence-based filtering. Because of the identifier completion engine and subsequence-based filtering.

View File

@ -145,23 +145,24 @@ Contents ~
19. YCM does not read identifiers from my tags files |youcompleteme-ycm-does-not-read-identifiers-from-my-tags-files| 19. YCM does not read identifiers from my tags files |youcompleteme-ycm-does-not-read-identifiers-from-my-tags-files|
20. 'CTRL-U' in insert mode does not work |CTRL-sub-U| 20. 'CTRL-U' in insert mode does not work |CTRL-sub-U|
21. YCM conflicts with UltiSnips TAB key usage |youcompleteme-ycm-conflicts-with-ultisnips-tab-key-usage| 21. YCM conflicts with UltiSnips TAB key usage |youcompleteme-ycm-conflicts-with-ultisnips-tab-key-usage|
22. Why isn't YCM just written in plain VimScript, FFS? |youcompleteme-why-isnt-ycm-just-written-in-plain-vimscript-ffs| 22. Snippets added with |:UltiSnipsAddFiletypes| do not appear in the popup menu
23. Why does YCM demand such a recent version of Vim? |youcompleteme-why-does-ycm-demand-such-recent-version-of-vim| 23. Why isn't YCM just written in plain VimScript, FFS? |youcompleteme-why-isnt-ycm-just-written-in-plain-vimscript-ffs|
24. I get annoying messages in Vim's status area when I type |youcompleteme-i-get-annoying-messages-in-vims-status-area-when-i-type| 24. Why does YCM demand such a recent version of Vim? |youcompleteme-why-does-ycm-demand-such-recent-version-of-vim|
25. Nasty bugs happen if I have the 'vim-autoclose' plugin installed |vim-sub-autoclose| 25. I get annoying messages in Vim's status area when I type |youcompleteme-i-get-annoying-messages-in-vims-status-area-when-i-type|
26. Is there some sort of YCM mailing list? I have questions |youcompleteme-is-there-sort-of-ycm-mailing-list-i-have-questions| 26. Nasty bugs happen if I have the 'vim-autoclose' plugin installed |vim-sub-autoclose|
27. I get an internal compiler error when installing |youcompleteme-i-get-an-internal-compiler-error-when-installing| 27. Is there some sort of YCM mailing list? I have questions |youcompleteme-is-there-sort-of-ycm-mailing-list-i-have-questions|
28. I get weird errors when I press 'Ctrl-C' in Vim |Ctrl-sub-C| 28. I get an internal compiler error when installing |youcompleteme-i-get-an-internal-compiler-error-when-installing|
29. Why did YCM stop using Syntastic for diagnostics display? |youcompleteme-why-did-ycm-stop-using-syntastic-for-diagnostics-display| 29. I get weird errors when I press 'Ctrl-C' in Vim |Ctrl-sub-C|
30. Completion doesn't work with the C++ standard library headers |youcompleteme-completion-doesnt-work-with-c-standard-library-headers| 30. Why did YCM stop using Syntastic for diagnostics display? |youcompleteme-why-did-ycm-stop-using-syntastic-for-diagnostics-display|
31. When I open a JavaScript file, I get an annoying warning about '.tern-project' 31. Completion doesn't work with the C++ standard library headers |youcompleteme-completion-doesnt-work-with-c-standard-library-headers|
32. When I open a JavaScript file, I get an annoying warning about '.tern-project'
file |.tern-sub-project| file |.tern-sub-project|
32. When I start vim I get a runtime error saying 'R6034 An application has made an 33. When I start vim I get a runtime error saying 'R6034 An application has made an
attempt to load the C runtime library incorrectly.' |R6034-An-application-has-made-an-attempt-to-load-the-C-runtime-library-incorrectly.| attempt to load the C runtime library incorrectly.' |R6034-An-application-has-made-an-attempt-to-load-the-C-runtime-library-incorrectly.|
33. I hear that YCM only supports Python 2, is that true? |youcompleteme-i-hear-that-ycm-only-supports-python-2-is-that-true| 34. I hear that YCM only supports Python 2, is that true? |youcompleteme-i-hear-that-ycm-only-supports-python-2-is-that-true|
34. On Windows I get "E887: Sorry, this command is disabled, the Python's site 35. On Windows I get "E887: Sorry, this command is disabled, the Python's site
module could not be loaded" |E887:-Sorry-this-command-is-disabled-the-Python-s-site-module-could-not-be-loaded| module could not be loaded" |E887:-Sorry-this-command-is-disabled-the-Python-s-site-module-could-not-be-loaded|
35. I can't complete python packages in a virtual environment. |youcompleteme-i-cant-complete-python-packages-in-virtual-environment.| 36. I can't complete python packages in a virtual environment. |youcompleteme-i-cant-complete-python-packages-in-virtual-environment.|
12. Contributor Code of Conduct |youcompleteme-contributor-code-of-conduct| 12. Contributor Code of Conduct |youcompleteme-contributor-code-of-conduct|
13. Contact |youcompleteme-contact| 13. Contact |youcompleteme-contact|
14. License |youcompleteme-license| 14. License |youcompleteme-license|
@ -2904,6 +2905,15 @@ options:
g:UltiSnipsJumpForwardTrigger g:UltiSnipsJumpForwardTrigger
g:UltiSnipsJumpBackwardTrigger g:UltiSnipsJumpBackwardTrigger
< <
-------------------------------------------------------------------------------
Snippets added with *:UltiSnipsAddFiletypes* do not appear in the popup menu
For efficiency, YCM only fetches UltiSnips snippets in specific scenarios like
visiting a buffer or setting its filetype. You can force YCM to retrieve them
by manually triggering the 'FileType' autocommand:
>
:doautocmd FileType
<
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
*youcompleteme-why-isnt-ycm-just-written-in-plain-vimscript-ffs* *youcompleteme-why-isnt-ycm-just-written-in-plain-vimscript-ffs*
Why isn't YCM just written in plain VimScript, FFS? ~ Why isn't YCM just written in plain VimScript, FFS? ~

View File

@ -51,12 +51,6 @@ from ycm.client.event_notification import ( SendEventNotificationAsync,
EventNotification ) EventNotification )
from ycm.client.shutdown_request import SendShutdownRequest from ycm.client.shutdown_request import SendShutdownRequest
try:
from UltiSnips import UltiSnips_Manager
USE_ULTISNIPS_DATA = True
except ImportError:
USE_ULTISNIPS_DATA = False
def PatchNoProxy(): def PatchNoProxy():
current_value = os.environ.get('no_proxy', '') current_value = os.environ.get('no_proxy', '')
@ -319,7 +313,7 @@ class YouCompleteMe( object ):
if not self.IsServerAlive(): if not self.IsServerAlive():
return return
extra_data = {} extra_data = {}
_AddUltiSnipsDataIfNeeded( extra_data ) self._AddUltiSnipsDataIfNeeded( extra_data )
SendEventNotificationAsync( 'BufferVisit', extra_data ) SendEventNotificationAsync( 'BufferVisit', extra_data )
@ -690,25 +684,16 @@ class YouCompleteMe( object ):
extra_conf_vim_data ) extra_conf_vim_data )
def _AddUltiSnipsDataIfNeeded( extra_data ): def _AddUltiSnipsDataIfNeeded( self, extra_data ):
if not USE_ULTISNIPS_DATA: # See :h UltiSnips#SnippetsInCurrentScope.
return try:
vim.eval( 'UltiSnips#SnippetsInCurrentScope( 1 )' )
except vim.error:
return
try: snippets = vimsupport.GetVariableValue( 'g:current_ulti_dict_info' )
# Since UltiSnips may run in a different python interpreter (python 3) than extra_data[ 'ultisnips_snippets' ] = [
# YCM, UltiSnips_Manager singleton is not necessary the same as the one { 'trigger': trigger,
# used by YCM. In particular, it means that we cannot rely on UltiSnips to 'description': snippet[ 'description' ] }
# set the current filetypes to the singleton. We need to do it ourself. for trigger, snippet in iteritems( snippets )
UltiSnips_Manager.reset_buffer_filetypes() ]
UltiSnips_Manager.add_buffer_filetypes(
vimsupport.GetVariableValue( '&filetype' ) )
rawsnips = UltiSnips_Manager._snips( '', True )
except:
return
# UltiSnips_Manager._snips() returns a class instance where:
# class.trigger - name of snippet trigger word ( e.g. defn or testcase )
# class.description - description of the snippet
extra_data[ 'ultisnips_snippets' ] = [
{ 'trigger': x.trigger, 'description': x.description } for x in rawsnips
]