Skip to content

Commit cff0e09

Browse files
authored
Merge pull request #1707 from bstaletic/empty_truthy_thingy
Handle empty object capabilities as truthy where applicable
2 parents 18b4d49 + 61e3b82 commit cff0e09

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

ycmd/completers/language_server/language_server_completer.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1496,7 +1496,8 @@ def SignatureHelpAvailable( self ):
14961496
if not self.ServerIsReady():
14971497
return responses.SignatureHelpAvailalability.PENDING
14981498

1499-
if bool( self._server_capabilities.get( 'signatureHelpProvider' ) ):
1499+
if _IsCapabilityProvided( self._server_capabilities,
1500+
'signatureHelpProvider' ):
15001501
return responses.SignatureHelpAvailalability.AVAILABLE
15011502
else:
15021503
return responses.SignatureHelpAvailalability.NOT_AVAILABLE
@@ -1506,7 +1507,8 @@ def ComputeSignaturesInner( self, request_data ):
15061507
if not self.ServerIsReady():
15071508
return {}
15081509

1509-
if not self._server_capabilities.get( 'signatureHelpProvider' ):
1510+
if not _IsCapabilityProvided( self._server_capabilities,
1511+
'signatureHelpProvider' ):
15101512
return {}
15111513

15121514
self._UpdateServerWithCurrentFileContents( request_data )
@@ -1551,8 +1553,9 @@ def ComputeSemanticTokens( self, request_data ):
15511553
if not self._semantic_token_atlas:
15521554
return {}
15531555

1554-
range_supported = self._server_capabilities[ 'semanticTokensProvider' ].get(
1555-
'range', False )
1556+
range_supported = _IsCapabilityProvided(
1557+
self._server_capabilities[ 'semanticTokensProvider' ],
1558+
'range' )
15561559

15571560
self._UpdateServerWithCurrentFileContents( request_data )
15581561

@@ -1588,7 +1591,8 @@ def ComputeInlayHints( self, request_data ):
15881591
if not self._ServerIsInitialized():
15891592
return []
15901593

1591-
if 'inlayHintProvider' not in self._server_capabilities:
1594+
if not _IsCapabilityProvided( self._server_capabilities,
1595+
'inlayHintProvider' ):
15921596
return []
15931597

15941598
self._UpdateServerWithCurrentFileContents( request_data )
@@ -1763,7 +1767,8 @@ def GetSubcommandsMap( self ):
17631767
)
17641768

17651769
if ( self._server_capabilities and
1766-
'callHierarchyProvider' in self._server_capabilities ):
1770+
_IsCapabilityProvided( self._server_capabilities,
1771+
'callHierarchyProvider' ) ):
17671772
commands[ 'GoToCallees' ] = (
17681773
lambda self, request_data, args:
17691774
self.CallHierarchy( request_data, [ 'outgoing' ] )
@@ -1787,9 +1792,10 @@ def _GetSubcommandProvider( self, provider_list ):
17871792

17881793
for providers in provider_list:
17891794
if isinstance( providers, tuple ):
1790-
if all( capabilities.get( provider ) for provider in providers ):
1795+
if all( _IsCapabilityProvided( capabilities, provider )
1796+
for provider in providers ):
17911797
return providers
1792-
if capabilities.get( providers ):
1798+
if _IsCapabilityProvided( capabilities, providers ):
17931799
return providers
17941800
return None
17951801

@@ -2202,9 +2208,9 @@ def OnFileSave( self, request_data ):
22022208
if not self.ServerIsReady():
22032209
return
22042210

2205-
if 'textDocumentSync' in self._server_capabilities:
2206-
sync = self._server_capabilities[ 'textDocumentSync' ]
2207-
if isinstance( sync, dict ) and sync.get( 'save' ) not in [ None, False ]:
2211+
sync = self._server_capabilities.get( 'textDocumentSync' )
2212+
if sync is not None:
2213+
if isinstance( sync, dict ) and _IsCapabilityProvided( sync, 'save' ):
22082214
save = sync[ 'save' ]
22092215
file_name = request_data[ 'filepath' ]
22102216
contents = None
@@ -2345,11 +2351,7 @@ def _SetUpSemanticTokenAtlas( self, capabilities: dict ):
23452351
if server_config is None:
23462352
return
23472353

2348-
server_full_support = server_config.get( 'full' )
2349-
if server_full_support == {}:
2350-
server_full_support = True
2351-
2352-
if not server_full_support:
2354+
if not _IsCapabilityProvided( server_config, 'full' ):
23532355
return
23542356

23552357
self._semantic_token_atlas = TokenAtlas( server_config[ 'legend' ] )
@@ -2374,8 +2376,8 @@ def _HandleInitializeInPollThread( self, response ):
23742376

23752377
self._SetUpSemanticTokenAtlas( self._server_capabilities )
23762378

2377-
if 'textDocumentSync' in self._server_capabilities:
2378-
sync = self._server_capabilities[ 'textDocumentSync' ]
2379+
sync = self._server_capabilities.get( 'textDocumentSync' )
2380+
if sync is not None:
23792381
SYNC_TYPE = [
23802382
'None',
23812383
'Full',
@@ -3539,6 +3541,11 @@ def DecodeModifiers( self, tokenModifiers ):
35393541
return tokens
35403542

35413543

3544+
def _IsCapabilityProvided( capabilities, query ):
3545+
capability = capabilities.get( query )
3546+
return bool( capability ) or capability == {}
3547+
3548+
35423549
def RetryOnFailure( expected_error_codes, num_retries = 3 ):
35433550
for i in range( num_retries ):
35443551
try:

0 commit comments

Comments
 (0)