@@ -270,6 +270,7 @@ class CodeContextStructure(BaseModel):
270270 variables :Dict [str , VariableDeclaration ] = Field (default_factory = dict )
271271 functions :Dict [str , ClassDefinition ] = Field (default_factory = dict )
272272 classes :Dict [str , ClassDefinition ] = Field (default_factory = dict )
273+ classes_headers :Dict [str , ClassDefinition ] = Field (default_factory = dict )
273274 class_attributes :Dict [str , ClassAttribute ] = Field (default_factory = dict )
274275 class_methods :Dict [str , MethodDefinition ] = Field (default_factory = dict )
275276 requested_elements :Optional [Dict [str , Union [ImportStatement , VariableDeclaration , FunctionDefinition , ClassDefinition ]]] = Field (default_factory = dict )
@@ -278,6 +279,10 @@ class CodeContextStructure(BaseModel):
278279 _cached_elements :Dict [str , Any ] = dict ()
279280 _unique_class_elements_ids :List [str ] = list ()
280281
282+ @staticmethod
283+ def trim (raw :str , top_lines :int = 50 )-> str :
284+ return "\n " .join (raw .splitlines ()[:top_lines ]+ ["\n ..." ])
285+
281286 def add_requested_element (self , element :Union [ImportStatement , VariableDeclaration , FunctionDefinition , ClassDefinition , ClassAttribute , MethodDefinition ]):
282287 if isinstance (element , (ClassDefinition , ClassAttribute , MethodDefinition )):
283288 element_class_id = element .unique_id if isinstance (element , ClassDefinition ) else element .class_id
@@ -324,6 +329,11 @@ def add_class(self, cls: ClassDefinition):
324329 return
325330 self .classes [cls .unique_id ] = cls
326331
332+ def add_class_header (self , cls : ClassDefinition ):
333+ if cls .unique_id in self .classes or cls .unique_id in self .requested_elements :
334+ return
335+ self .classes_headers [cls .unique_id ] = cls
336+
327337 def add_preloaded (self , preloaded :Dict [str , str ]):
328338 self .preloaded .update (preloaded )
329339
@@ -346,7 +356,11 @@ def as_list_str(self)->List[List[str]]:
346356 for entry in self .classes .values ():
347357 raw_elements_by_file [entry .file_path ].append (entry .raw )
348358
349- unique_class_elements_not_in_classes = set (self ._unique_class_elements_ids ) - set (self .classes .keys ()) - set (self .requested_elements )
359+ for entry in self .classes_headers .values ():
360+ # TODO fix place holder with class definition +attributes
361+ raw_elements_by_file [entry .file_path ].append (self .trim (entry .raw ))
362+
363+ unique_class_elements_not_in_classes = set (self ._unique_class_elements_ids ) - set (self .classes .keys ()) - set (self .classes_headers .keys ()) - set (self .requested_elements )
350364
351365 for target_class in unique_class_elements_not_in_classes :
352366 classObj :ClassDefinition = self ._cached_elements .get (target_class )
@@ -410,7 +424,10 @@ def from_list_of_elements(cls, elements: list, retrieved_elements_reference_type
410424 instance .add_requested_element (element )
411425 elif isinstance (element , ImportStatement ):
412426 instance .add_import (element )
413- elif isinstance (element , ClassDefinition ) :
427+ elif isinstance (element , ClassDefinition ):
428+ if reference_type == "type_hint" :
429+ instance .add_class_header (element )
430+ continue
414431 instance .add_class (element )
415432 elif isinstance (element , MethodDefinition ):
416433 instance .add_class_method (element )
0 commit comments