@@ -3011,6 +3011,20 @@ class TranslationUnit(ClangObject):
30113011 # into the set of code completions returned from this translation unit.
30123012 PARSE_INCLUDE_BRIEF_COMMENTS_IN_CODE_COMPLETION = 128
30133013
3014+ @staticmethod
3015+ def process_unsaved_files (unsaved_files ) -> Array [_CXUnsavedFile ] | None :
3016+ unsaved_array = None
3017+ if len (unsaved_files ):
3018+ unsaved_array = (_CXUnsavedFile * len (unsaved_files ))()
3019+ for i , (name , contents ) in enumerate (unsaved_files ):
3020+ if hasattr (contents , "read" ):
3021+ contents = contents .read ()
3022+ binary_contents = b (contents )
3023+ unsaved_array [i ].name = b (os .fspath (name ))
3024+ unsaved_array [i ].contents = binary_contents
3025+ unsaved_array [i ].length = len (binary_contents )
3026+ return unsaved_array
3027+
30143028 @classmethod
30153029 def from_source (
30163030 cls , filename , args = None , unsaved_files = None , options = 0 , index = None
@@ -3067,16 +3081,7 @@ def from_source(
30673081 if len (args ) > 0 :
30683082 args_array = (c_char_p * len (args ))(* [b (x ) for x in args ])
30693083
3070- unsaved_array = None
3071- if len (unsaved_files ) > 0 :
3072- unsaved_array = (_CXUnsavedFile * len (unsaved_files ))()
3073- for i , (name , contents ) in enumerate (unsaved_files ):
3074- if hasattr (contents , "read" ):
3075- contents = contents .read ()
3076- contents = b (contents )
3077- unsaved_array [i ].name = b (os .fspath (name ))
3078- unsaved_array [i ].contents = contents
3079- unsaved_array [i ].length = len (contents )
3084+ unsaved_array = cls .process_unsaved_files (unsaved_files )
30803085
30813086 ptr = conf .lib .clang_parseTranslationUnit (
30823087 index ,
@@ -3257,16 +3262,7 @@ def reparse(self, unsaved_files=None, options=0):
32573262 if unsaved_files is None :
32583263 unsaved_files = []
32593264
3260- unsaved_files_array = 0
3261- if len (unsaved_files ):
3262- unsaved_files_array = (_CXUnsavedFile * len (unsaved_files ))()
3263- for i , (name , contents ) in enumerate (unsaved_files ):
3264- if hasattr (contents , "read" ):
3265- contents = contents .read ()
3266- contents = b (contents )
3267- unsaved_files_array [i ].name = b (os .fspath (name ))
3268- unsaved_files_array [i ].contents = contents
3269- unsaved_files_array [i ].length = len (contents )
3265+ unsaved_files_array = self .process_unsaved_files (unsaved_files )
32703266 ptr = conf .lib .clang_reparseTranslationUnit (
32713267 self , len (unsaved_files ), unsaved_files_array , options
32723268 )
@@ -3329,16 +3325,7 @@ def codeComplete(
33293325 if unsaved_files is None :
33303326 unsaved_files = []
33313327
3332- unsaved_files_array = 0
3333- if len (unsaved_files ):
3334- unsaved_files_array = (_CXUnsavedFile * len (unsaved_files ))()
3335- for i , (name , contents ) in enumerate (unsaved_files ):
3336- if hasattr (contents , "read" ):
3337- contents = contents .read ()
3338- contents = b (contents )
3339- unsaved_files_array [i ].name = b (os .fspath (name ))
3340- unsaved_files_array [i ].contents = contents
3341- unsaved_files_array [i ].length = len (contents )
3328+ unsaved_files_array = self .process_unsaved_files (unsaved_files )
33423329 ptr = conf .lib .clang_codeCompleteAt (
33433330 self ,
33443331 os .fspath (path ),
0 commit comments