Skip to content

Commit 4c670b2

Browse files
authored
[libclang/python] Factor out unsaved files processing (#101308)
Factor out the processing of unsaved files into its own function as suggested by @Endilll [here](https://github.com/llvm/llvm-project/pull/78114/files#r1697730196)
1 parent 22ce333 commit 4c670b2

File tree

1 file changed

+17
-30
lines changed

1 file changed

+17
-30
lines changed

clang/bindings/python/clang/cindex.py

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)