Initial upload: Shell History Alias Generator with full test suite
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 08:51:38 +00:00
parent 74eb8b87cc
commit f8f2cea5e9

View File

@@ -0,0 +1,46 @@
"""History parser factory for creating shell-specific parsers."""
from typing import Dict, Optional, Type
from .base import HistoryParser
from .bash import BashHistoryParser
from .zsh import ZshHistoryParser
from .fish import FishHistoryParser
class HistoryParserFactory:
"""Factory for creating shell-specific history parsers."""
_parsers: Dict[str, Type[HistoryParser]] = {
'bash': BashHistoryParser,
'zsh': ZshHistoryParser,
'fish': FishHistoryParser,
}
@classmethod
def get_parser(cls, shell_type: str) -> Optional[HistoryParser]:
"""Get a parser instance for the specified shell type."""
parser_class = cls._parsers.get(shell_type.lower())
if parser_class:
return parser_class()
return None
@classmethod
def register_parser(cls, name: str, parser_class: Type[HistoryParser]) -> None:
"""Register a new parser class."""
cls._parsers[name.lower()] = parser_class
@classmethod
def get_supported_shells(cls) -> list:
"""Return list of supported shell types."""
return list(cls._parsers.keys())
@classmethod
def detect_shell_from_file(cls, filepath: str) -> Optional[str]:
"""Try to detect shell type from file extension or content."""
if filepath.endswith('.json'):
return 'fish'
elif filepath.endswith('.zsh_history'):
return 'zsh'
elif filepath.endswith('.bash_history'):
return 'bash'
return None