40 lines
1.0 KiB
Python
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)
|