Преглед на файлове

don't check file size on unsupported filetypes

Previously, this was providing a false negatives. Now,
if the filetype is not approved, we immediately return
without trying to finish opening it.

Signed-off-by: Kevin Morris <kevr.gtalk@gmail.com>
Kevin Morris преди 4 години
родител
ревизия
48a5d21452
променени са 2 файла, в които са добавени 54 реда и са изтрити 4 реда
  1. 5 4
      autoload/youcompleteme.vim
  2. 49 0
      test/filesize.test.vim

+ 5 - 4
autoload/youcompleteme.vim

@@ -446,10 +446,6 @@ function! s:AllowedToCompleteInBuffer( buffer )
 
   let filetype = getbufvar( a:buffer, '&filetype' )
 
-  if empty( filetype ) || s:DisableOnLargeFile( a:buffer )
-    return 0
-  endif
-
   let whitelist_allows = type( g:ycm_filetype_whitelist ) != type( {} ) ||
         \ has_key( g:ycm_filetype_whitelist, '*' ) ||
         \ s:HasAnyKey( g:ycm_filetype_whitelist, split( filetype, '\.' ) )
@@ -457,6 +453,11 @@ function! s:AllowedToCompleteInBuffer( buffer )
         \ !s:HasAnyKey( g:ycm_filetype_blacklist, split( filetype, '\.' ) )
 
   let allowed = whitelist_allows && blacklist_allows
+
+  if empty( filetype ) || !allowed || s:DisableOnLargeFile( a:buffer )
+    return 0
+  endif
+
   if allowed
     let s:previous_allowed_buffer_number = bufnr( a:buffer )
   endif

+ 49 - 0
test/filesize.test.vim

@@ -0,0 +1,49 @@
+function! SetUp()
+  let g:ycm_use_clangd = 1
+  let g:ycm_confirm_extra_conf = 0
+  let g:ycm_auto_trigger = 1
+  let g:ycm_keep_logfiles = 1
+  let g:ycm_always_populate_location_list = 1
+
+  " diagnostics take ages
+  let g:ycm_test_min_delay = 7 
+  call youcompleteme#test#setup#SetUp()
+endfunction
+
+function! TearDown()
+  call youcompleteme#test#setup#CleanUp()
+endfunction
+
+function! Test_Open_Unsupported_Filetype_Messages()
+  messages clear
+  enew
+
+  let X = join( map( range( 0, 1000 * 1024 + 1 ), {->'X'} ), '' )
+  call append( line( '$' ), X )
+
+  w! Xtest
+
+  let l:stderr = substitute( execute( 'messages' ), '\n', '\t', 'g' )
+  call assert_notmatch( 'the file exceeded the max size', stderr )
+
+  %bwipeout!
+  call delete( 'Xtest' )
+endfunction
+
+function! Test_Open_Supported_Filetype_Messages()
+  enew
+
+  let X = join( map( range( 0, 1000 * 1024 + 1 ), {->'X'} ), '' )
+  call append( line( '$' ), X )
+
+  w! Xtest
+  messages clear
+  setf cpp
+
+  let l:stderr = substitute( execute( 'messages' ), '\n', '\t', 'g' )
+  call assert_match( 'the file exceeded the max size', stderr )
+  call assert_equal( 1, b:ycm_largefile )
+
+  %bwipeout!
+  call delete( 'Xtest' )
+endfunction