43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
"""StubGen 配置模块"""
|
|
from __future__ import annotations
|
|
import json
|
|
from dataclasses import dataclass, field
|
|
from typing import List, Dict, Optional
|
|
|
|
|
|
@dataclass
|
|
class StubGenConfig:
|
|
"""存根生成器配置"""
|
|
InputDir: Optional[str] = None
|
|
OutputDir: str = "./stubs"
|
|
InputFiles: List[str] = field(default_factory=list)
|
|
IncludePatterns: List[str] = field(default_factory=lambda: ["*.h", "*.c", "*.py"])
|
|
ExcludePatterns: List[str] = field(default_factory=list)
|
|
TypeMappings: Dict[str, str] = field(default_factory=dict)
|
|
PreserveStructure: bool = True # 保持目录结构
|
|
GenerateGuards: bool = True # 生成宏守卫
|
|
verbose: bool = False
|
|
DryRun: bool = False
|
|
|
|
@classmethod
|
|
def from_dict(cls, data: dict) -> StubGenConfig:
|
|
"""从字典创建配置"""
|
|
return cls(
|
|
InputDir=data.get('InputDir'),
|
|
OutputDir=data.get('OutputDir', './stubs'),
|
|
InputFiles=data.get('InputFiles', []),
|
|
IncludePatterns=data.get('IncludePatterns', ['*.h', '*.c', '*.py']),
|
|
ExcludePatterns=data.get('ExcludePatterns', []),
|
|
TypeMappings=data.get('TypeMappings', {}),
|
|
PreserveStructure=data.get('PreserveStructure', True),
|
|
GenerateGuards=data.get('GenerateGuards', True),
|
|
verbose=data.get('verbose', False),
|
|
DryRun=data.get('DryRun', False),
|
|
)
|
|
|
|
@classmethod
|
|
def from_file(cls, FilePath: str) -> StubGenConfig:
|
|
"""从 JSON 文件加载配置"""
|
|
with open(FilePath, 'r', encoding='utf-8') as f:
|
|
data: dict = json.load(f)
|
|
return cls.from_dict(data) |