Skip to content

Commit b80a21d

Browse files
committed
Add classes_headers to CodeContextStructure and implement class header management
1 parent 6c2fc9e commit b80a21d

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

codetide/core/models.py

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

Comments
 (0)