Pārlūkot izejas kodu

Revert "Only removing our signs in buffer, no all"

This reverts commit 182848050e412e3b46f09e928ecc23d32ae9cea1.

The reason we are reverting this is because removing signs in a loop causes
flicker. The only non-flicker approach is to remove all signs in a buffer with
"sign unplace buffer=<buffer-num>".

So no compatibility with other plugins for us.
Strahinja Val Markovic 11 gadi atpakaļ
vecāks
revīzija
9d06a3e54c
2 mainītis faili ar 22 papildinājumiem un 39 dzēšanām
  1. 19 36
      python/ycm/diagnostic_interface.py
  2. 3 3
      python/ycm/vimsupport.py

+ 19 - 36
python/ycm/diagnostic_interface.py

@@ -31,7 +31,6 @@ class DiagnosticInterface( object ):
     self._next_sign_id = 1
     self._previous_line_number = -1
     self._diag_message_needs_clearing = False
-    self._buffer_number_to_sign_ids = defaultdict( set )
 
 
   def OnCursorMoved( self ):
@@ -48,7 +47,8 @@ class DiagnosticInterface( object ):
     self._buffer_number_to_line_to_diags = _ConvertDiagListToDict( diags )
 
     if self._user_options[ 'enable_diagnostic_signs' ]:
-      self._UpdateSigns()
+      self._next_sign_id = _UpdateSigns( self._buffer_number_to_line_to_diags,
+                                         self._next_sign_id )
 
     if self._user_options[ 'enable_diagnostic_highlighting' ]:
       _UpdateSquiggles( self._buffer_number_to_line_to_diags )
@@ -71,40 +71,6 @@ class DiagnosticInterface( object ):
     self._diag_message_needs_clearing = True
 
 
-  def _UnplaceSignsInBuffer( self, buffer_number ):
-    vimsupport.UnplaceSignsInBuffer(
-        buffer_number,
-        self._buffer_number_to_sign_ids[ buffer_number ] )
-
-    self._buffer_number_to_sign_ids[ buffer_number ].clear()
-
-
-  def _PlaceSignInBuffer( self, line, buffer_number, is_error ):
-    vimsupport.PlaceSign( self._next_sign_id,
-                          line,
-                          buffer_number,
-                          is_error )
-    self._buffer_number_to_sign_ids[ buffer_number ].add( self._next_sign_id )
-    self._next_sign_id += 1
-
-
-  def _UpdateSigns( self ):
-    self._UnplaceSignsInBuffer( vim.current.buffer.number )
-
-    for buffer_number, line_to_diags in \
-        self._buffer_number_to_line_to_diags.iteritems():
-      if not vimsupport.BufferIsVisible( buffer_number ):
-        continue
-
-      self._UnplaceSignsInBuffer( buffer_number )
-
-      for line, diags in line_to_diags.iteritems():
-        for diag in diags:
-          self._PlaceSignInBuffer( line,
-                                   buffer_number,
-                                   _DiagnosticIsError( diag ) )
-
-
 def _UpdateSquiggles( buffer_number_to_line_to_diags ):
   vimsupport.ClearYcmSyntaxMatches()
   line_to_diags = buffer_number_to_line_to_diags[ vim.current.buffer.number ]
@@ -136,6 +102,23 @@ def _UpdateSquiggles( buffer_number_to_line_to_diags ):
           is_error = is_error )
 
 
+def _UpdateSigns( buffer_number_to_line_to_diags, next_sign_id ):
+  vimsupport.UnplaceAllSignsInBuffer( vim.current.buffer.number )
+  for buffer_number, line_to_diags in buffer_number_to_line_to_diags.iteritems():
+    if not vimsupport.BufferIsVisible( buffer_number ):
+      continue
+
+    vimsupport.UnplaceAllSignsInBuffer( buffer_number )
+    for line, diags in line_to_diags.iteritems():
+      for diag in diags:
+        vimsupport.PlaceSign( next_sign_id,
+                              line,
+                              buffer_number,
+                              _DiagnosticIsError( diag ) )
+        next_sign_id += 1
+  return next_sign_id
+
+
 def _ConvertDiagListToDict( diag_list ):
   buffer_to_line_to_diags = defaultdict( lambda: defaultdict( list ) )
   for diag in diag_list:

+ 3 - 3
python/ycm/vimsupport.py

@@ -107,11 +107,11 @@ def GetBufferFilepath( buffer_object ):
   return os.path.join( os.getcwd(), str( buffer_object.number ) )
 
 
-def UnplaceSignsInBuffer( buffer_number, signs ):
+# TODO: only unplace our signs, not all signs
+def UnplaceAllSignsInBuffer( buffer_number ):
   if buffer_number < 0:
     return
-  for sign in signs:
-    vim.command( 'sign unplace {0} buffer={1}'.format( sign, buffer_number ) )
+  vim.command( 'sign unplace * buffer={0}'.format( buffer_number ) )
 
 
 def PlaceSign( sign_id, line_num, buffer_num, is_error = True ):