Source code for statick_tool.plugins.discovery.pddl

"""Discover PDDL files to analyze."""

import logging
from typing import Optional

from statick_tool.discovery_plugin import DiscoveryPlugin
from statick_tool.exceptions import Exceptions
from statick_tool.package import Package


[docs] class PDDLDiscoveryPlugin(DiscoveryPlugin): """Discover PDDL files to analyze."""
[docs] def get_name(self) -> str: """Get name of discovery type. Returns: Name of the discovery type. """ return "pddl"
[docs] def scan( self, package: Package, level: str, exceptions: Optional[Exceptions] = None ) -> None: """Scan package looking for PDDL files. Args: package: The package to scan. level: The level of scanning. exceptions: Optional exceptions to apply. """ pddl_files: list[str] = [] self.find_files(package) for file_dict in package.files.values(): if file_dict["name"].endswith(".pddl"): pddl_files.append(file_dict["path"]) logging.info(" %d PDDL files found.", len(pddl_files)) if exceptions: original_file_count: int = len(pddl_files) pddl_files = exceptions.filter_file_exceptions_early(package, pddl_files) if original_file_count > len(pddl_files): logging.info( " After filtering, %d PDDL files will be scanned.", len(pddl_files) ) package["pddl_domain_src"] = [] package["pddl_problem_src"] = [] for filename in pddl_files: if self.discover_pddl_file_type(filename) == "domain": package["pddl_domain_src"].append(filename) elif self.discover_pddl_file_type(filename) == "problem": package["pddl_problem_src"].append(filename)
[docs] @classmethod def discover_pddl_file_type(cls, filename: str) -> str: """Determine the type of PDDL file that was discovered. Args: filename: The name of the file to check. Returns: The type of PDDL file. """ with open(filename, encoding="utf-8") as f_pddl: for line in f_pddl.readlines(): if "(define" in line and "domain" in line: return "domain" if "(define" in line and "problem" in line: return "problem" return ""