Files
depaudit-cli/depaudit/parsers/factory.py

40 lines
1.0 KiB
Python

from __future__ import annotations
from pathlib import Path
from typing import Optional
from depaudit.parsers import Parser
from depaudit.parsers.javascript import JavaScriptParser
from depaudit.parsers.python import PythonParser
from depaudit.parsers.go import GoParser
from depaudit.parsers.rust import RustParser
from depaudit.parsers.java import JavaParser
class ParserFactory:
_parsers: list[Parser] = [
JavaScriptParser(),
PythonParser(),
GoParser(),
RustParser(),
JavaParser(),
]
@classmethod
def get_parser(cls, file_path: Path) -> Optional[Parser]:
for parser in cls._parsers:
if parser.can_parse(file_path):
return parser
return None
@classmethod
def parse(cls, file_path: Path):
parser = cls.get_parser(file_path)
if parser is None:
return None
return parser.parse(file_path)
@classmethod
def register_parser(cls, parser: Parser) -> None:
cls._parsers.insert(0, parser)