Add TypeScript/Go parsers and utils modules
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-01-29 16:53:38 +00:00
parent 61d5555e72
commit c3b499760a

View File

@@ -0,0 +1,107 @@
"""Configuration handling."""
import os
from dataclasses import dataclass, field
from typing import Optional
import toml
@dataclass
class Config:
"""Configuration for code-doc-cli."""
input_patterns: list[str] = field(default_factory=lambda: ["**/*.py", "**/*.ts", "**/*.go"])
output_file: Optional[str] = None
language: Optional[str] = None
template_style: str = "default"
syntax_highlighting: bool = True
theme: str = "default"
fail_on_warning: bool = False
exclude_patterns: list[str] = field(default_factory=list)
include_private: bool = False
output_format: str = "markdown"
def to_dict(self) -> dict:
"""Convert config to dictionary."""
return {
"input_patterns": self.input_patterns,
"output_file": self.output_file,
"language": self.language,
"template_style": self.template_style,
"syntax_highlighting": self.syntax_highlighting,
"theme": self.theme,
"fail_on_warning": self.fail_on_warning,
"exclude_patterns": self.exclude_patterns,
"include_private": self.include_private,
"output_format": self.output_format,
}
def load_config(config_path: Optional[str] = None) -> Config:
"""Load configuration from file.
Args:
config_path: Path to config file (code-doc.toml)
Returns:
Config object
"""
config = Config()
if not config_path:
config_path = os.environ.get("CODE_DOC_CONFIG")
if not config_path:
config_path = os.path.join(os.getcwd(), "code-doc.toml")
if not os.path.exists(config_path):
return config
if not os.path.exists(config_path):
return config
try:
with open(config_path, "r", encoding="utf-8") as f:
data = toml.load(f)
if "tool" in data and "code-doc" in data["tool"]:
config_data = data["tool"]["code-doc"]
if "input_patterns" in config_data:
config.input_patterns = config_data["input_patterns"]
if "output_file" in config_data:
config.output_file = config_data["output_file"]
if "language" in config_data:
config.language = config_data["language"]
if "template_style" in config_data:
config.template_style = config_data["template_style"]
if "syntax_highlighting" in config_data:
config.syntax_highlighting = config_data["syntax_highlighting"]
if "theme" in config_data:
config.theme = config_data["theme"]
if "fail_on_warning" in config_data:
config.fail_on_warning = config_data["fail_on_warning"]
if "exclude_patterns" in config_data:
config.exclude_patterns = config_data["exclude_patterns"]
if "include_private" in config_data:
config.include_private = config_data["include_private"]
if "output_format" in config_data:
config.output_format = config_data["output_format"]
except toml.TomlDecodeError as e:
raise ValueError(f"Invalid TOML in config file: {e}")
except Exception as e:
raise ValueError(f"Error reading config file: {e}")
return config
def save_config(config: Config, config_path: str) -> None:
"""Save configuration to file.
Args:
config: Config object
config_path: Path to save config
"""
data = {"tool": {"code-doc": config.to_dict()}}
with open(config_path, "w", encoding="utf-8") as f:
toml.dump(data, f)