(leaf_nodes: Set[str])
| 293 | |
| 294 | |
| 295 | def concise_node(leaf_nodes: Set[str]) -> Set[str]: |
| 296 | concise_leaf_nodes = set() |
| 297 | for node in leaf_nodes: |
| 298 | if node.endswith("__init__"): |
| 299 | # replace by class name |
| 300 | concise_leaf_nodes.add(node.replace(".__init__", "")) |
| 301 | else: |
| 302 | concise_leaf_nodes.add(node) |
| 303 | |
| 304 | keep_leaf_nodes = [] |
| 305 | |
| 306 | # Determine if we should include functions based on available component types |
| 307 | # For C-based projects, we need to include functions since they don't have classes |
| 308 | available_types = set() |
| 309 | for comp in components.values(): |
| 310 | available_types.add(comp.component_type) |
| 311 | |
| 312 | # Valid types for leaf nodes - include functions for C-based codebases |
| 313 | valid_types = {"class", "interface", "struct"} |
| 314 | # If no classes/interfaces/structs are found, include functions |
| 315 | if not available_types.intersection(valid_types): |
| 316 | valid_types.add("function") |
| 317 | |
| 318 | for leaf_node in leaf_nodes: |
| 319 | # Skip any leaf nodes that are clearly error strings or invalid identifiers |
| 320 | if not isinstance(leaf_node, str) or leaf_node.strip() == "" or any(err_keyword in leaf_node.lower() for err_keyword in ['error', 'exception', 'failed', 'invalid']): |
| 321 | logger.debug(f"Skipping invalid leaf node identifier: '{leaf_node}'") |
| 322 | continue |
| 323 | |
| 324 | if leaf_node in components: |
| 325 | if components[leaf_node].component_type in valid_types: |
| 326 | keep_leaf_nodes.append(leaf_node) |
| 327 | else: |
| 328 | # logger.debug(f"Leaf node {leaf_node} is a {components[leaf_node].component_type}, removing it") |
| 329 | pass |
| 330 | else: |
| 331 | # logger.debug(f"Leaf node {leaf_node} not found in components, removing it") |
| 332 | pass |
| 333 | |
| 334 | return keep_leaf_nodes |
| 335 | |
| 336 | concise_leaf_nodes = concise_node(leaf_nodes) |
| 337 | if len(concise_leaf_nodes) >= 400: |
no test coverage detected