1# Copyright (C) 2013-2020 ycmd contributors 2# 3# This file is part of ycmd. 4# 5# ycmd is free software: you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation, either version 3 of the License, or 8# (at your option) any later version. 9# 10# ycmd is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with ycmd. If not, see <http://www.gnu.org/licenses/>. 17 18from ycmd.completers.completer import Completer 19from ycmd.completers.all.identifier_completer import IdentifierCompleter 20from ycmd.completers.general.filename_completer import FilenameCompleter 21from ycmd.completers.general.ultisnips_completer import UltiSnipsCompleter 22 23 24class GeneralCompleterStore( Completer ): 25 """ 26 Holds a list of completers that can be used in all filetypes. 27 28 It overrides all Completer API methods so that specific calls to 29 GeneralCompleterStore are passed to all general completers. 30 """ 31 32 def __init__( self, user_options ): 33 super().__init__( user_options ) 34 self._identifier_completer = IdentifierCompleter( user_options ) 35 self._filename_completer = FilenameCompleter( user_options ) 36 self._ultisnips_completer = UltiSnipsCompleter( user_options ) 37 self._non_filename_completers = [ self._identifier_completer ] 38 if user_options.get( 'use_ultisnips_completer', True ): 39 self._non_filename_completers.append( self._ultisnips_completer ) 40 self._all_completers = [ self._identifier_completer, 41 self._filename_completer, 42 self._ultisnips_completer ] 43 44 45 def SupportedFiletypes( self ): 46 return set() 47 48 49 def GetIdentifierCompleter( self ): 50 return self._identifier_completer 51 52 53 def ComputeCandidates( self, request_data ): 54 candidates = self._filename_completer.ComputeCandidates( request_data ) 55 if candidates: 56 return candidates 57 for completer in self._non_filename_completers: 58 candidates += completer.ComputeCandidates( request_data ) 59 return candidates 60 61 62 def OnFileReadyToParse( self, request_data ): 63 for completer in self._all_completers: 64 completer.OnFileReadyToParse( request_data ) 65 66 67 def OnBufferVisit( self, request_data ): 68 for completer in self._all_completers: 69 completer.OnBufferVisit( request_data ) 70 71 72 def OnBufferUnload( self, request_data ): 73 for completer in self._all_completers: 74 completer.OnBufferUnload( request_data ) 75 76 77 def OnInsertLeave( self, request_data ): 78 for completer in self._all_completers: 79 completer.OnInsertLeave( request_data ) 80 81 82 def OnCurrentIdentifierFinished( self, request_data ): 83 for completer in self._all_completers: 84 completer.OnCurrentIdentifierFinished( request_data ) 85 86 87 def GettingCompletions( self ): 88 for completer in self._all_completers: 89 completer.GettingCompletions() 90 91 92 def Shutdown( self ): 93 for completer in self._all_completers: 94 completer.Shutdown() 95