Skip to content

Commit

Permalink
Auto merge of #2321 - micbou:improve-ultisnips-support, r=micbou
Browse files Browse the repository at this point in the history
[READY] Do not depend on UltiSnips internals to fetch snippets

Use the `UltiSnips#SnippetsInCurrentScope` public function instead of the `UltiSnips_Manager` internal object to fetch snippets. Fixes #2320.

Give a workaround in the FAQ for snippets not suggested as candidates if added with the `:UltiSnipsAddFiletypes` command.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/valloric/youcompleteme/2321)
<!-- Reviewable:end -->
  • Loading branch information
homu committed Sep 11, 2016
2 parents e804705 + 5dca552 commit 30871bc
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 43 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2648,6 +2648,16 @@ g:UltiSnipsJumpForwardTrigger
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?

Because of the identifier completion engine and subsequence-based filtering.
Expand Down
38 changes: 24 additions & 14 deletions doc/youcompleteme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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|
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|
22. Why isn't YCM just written in plain VimScript, FFS? |youcompleteme-why-isnt-ycm-just-written-in-plain-vimscript-ffs|
23. Why does YCM demand such a recent version of Vim? |youcompleteme-why-does-ycm-demand-such-recent-version-of-vim|
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|
25. Nasty bugs happen if I have the 'vim-autoclose' plugin installed |vim-sub-autoclose|
26. Is there some sort of YCM mailing list? I have questions |youcompleteme-is-there-sort-of-ycm-mailing-list-i-have-questions|
27. I get an internal compiler error when installing |youcompleteme-i-get-an-internal-compiler-error-when-installing|
28. I get weird errors when I press 'Ctrl-C' in Vim |Ctrl-sub-C|
29. Why did YCM stop using Syntastic for diagnostics display? |youcompleteme-why-did-ycm-stop-using-syntastic-for-diagnostics-display|
30. Completion doesn't work with the C++ standard library headers |youcompleteme-completion-doesnt-work-with-c-standard-library-headers|
31. When I open a JavaScript file, I get an annoying warning about '.tern-project'
22. Snippets added with |:UltiSnipsAddFiletypes| do not appear in the popup menu
23. Why isn't YCM just written in plain VimScript, FFS? |youcompleteme-why-isnt-ycm-just-written-in-plain-vimscript-ffs|
24. Why does YCM demand such a recent version of Vim? |youcompleteme-why-does-ycm-demand-such-recent-version-of-vim|
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. Nasty bugs happen if I have the 'vim-autoclose' plugin installed |vim-sub-autoclose|
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 an internal compiler error when installing |youcompleteme-i-get-an-internal-compiler-error-when-installing|
29. I get weird errors when I press 'Ctrl-C' in Vim |Ctrl-sub-C|
30. Why did YCM stop using Syntastic for diagnostics display? |youcompleteme-why-did-ycm-stop-using-syntastic-for-diagnostics-display|
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|
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.|
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. On Windows I get "E887: Sorry, this command is disabled, the Python's site
34. I hear that YCM only supports Python 2, is that true? |youcompleteme-i-hear-that-ycm-only-supports-python-2-is-that-true|
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|
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|
13. Contact |youcompleteme-contact|
14. License |youcompleteme-license|
Expand Down Expand Up @@ -2904,6 +2905,15 @@ options:
g:UltiSnipsJumpForwardTrigger
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*
Why isn't YCM just written in plain VimScript, FFS? ~
Expand Down
43 changes: 14 additions & 29 deletions python/ycm/youcompleteme.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,6 @@
EventNotification )
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():
current_value = os.environ.get('no_proxy', '')
Expand Down Expand Up @@ -319,7 +313,7 @@ def OnBufferVisit( self ):
if not self.IsServerAlive():
return
extra_data = {}
_AddUltiSnipsDataIfNeeded( extra_data )
self._AddUltiSnipsDataIfNeeded( extra_data )
SendEventNotificationAsync( 'BufferVisit', extra_data )


Expand Down Expand Up @@ -690,25 +684,16 @@ def BuildExtraConfData( extra_conf_vim_data ):
extra_conf_vim_data )


def _AddUltiSnipsDataIfNeeded( extra_data ):
if not USE_ULTISNIPS_DATA:
return

try:
# Since UltiSnips may run in a different python interpreter (python 3) than
# YCM, UltiSnips_Manager singleton is not necessary the same as the one
# used by YCM. In particular, it means that we cannot rely on UltiSnips to
# set the current filetypes to the singleton. We need to do it ourself.
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
]
def _AddUltiSnipsDataIfNeeded( self, extra_data ):
# See :h UltiSnips#SnippetsInCurrentScope.
try:
vim.eval( 'UltiSnips#SnippetsInCurrentScope( 1 )' )

This comment has been minimized.

Copy link
@hotzhangle

hotzhangle Sep 20, 2016

when I upgrade the lastest version of ycm, I find use vim open a file,there always report this exception,like "处理 function youcompleteme#Enable..71_OnBufferRead 时发生错误" and "E117: Unknown function: UltiSnips#SnippetsInCurrentScope" and "E15: 无效的表达式: UltiSnips#SnippetsInCurrentScope( 1 ),that pullzed me,to avoid this problem,I reset YCM version to commit ID:e8047050cd6209374fbb7cd4259801a25a1ee47e

This comment has been minimized.

Copy link
@vheon

vheon Sep 20, 2016

Contributor

upgrade your vim to at least 7.4.104

except vim.error:
return

snippets = vimsupport.GetVariableValue( 'g:current_ulti_dict_info' )
extra_data[ 'ultisnips_snippets' ] = [
{ 'trigger': trigger,
'description': snippet[ 'description' ] }
for trigger, snippet in iteritems( snippets )
]

0 comments on commit 30871bc

Please sign in to comment.