Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.12
hooks:
# Run the linter
- id: ruff
args: [--fix]
# Run the formatter
- id: ruff-format
59 changes: 59 additions & 0 deletions SETUP_PRECOMMIT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Pre-commit 设置指南 (Ruff 专用)

## 安装和设置

1. **安装依赖**
```bash
uv sync
```

2. **安装 pre-commit hooks**
```bash
uv run pre-commit install
```

3. **手动运行所有检查**
```bash
uv run pre-commit run --all-files
```

## 配置的检查项

### Ruff 代码检查和格式化
- **ruff**: Python 代码检查和自动修复 (`--fix`)
- **ruff-format**: Python 代码格式化

## 使用说明

### 每次 commit 时自动运行
设置完成后,每次 `git commit` 都会自动运行 ruff 检查和格式化。

### 手动运行检查
```bash
# 对所有文件运行检查
uv run pre-commit run --all-files

# 对暂存的文件运行检查
uv run pre-commit run

# 只运行检查(不格式化)
uv run ruff check

# 只运行格式化
uv run ruff format
```

### 更新 hooks
```bash
uv run pre-commit autoupdate
```

## 注意事项

1. **自动修复**:Ruff 会自动修复大部分代码问题和格式问题
2. **性能**:Ruff 非常快速,通常在几秒内完成
3. **配置**:所有 Ruff 配置都在 `pyproject.toml``[tool.ruff]` 部分

## 配置文件位置
- 主配置:`.pre-commit-config.yaml`
- Ruff 配置:`pyproject.toml` 中的 `[tool.ruff]` 部分
112 changes: 58 additions & 54 deletions alembic/versions/74ee1818bd42_init_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,63 +23,67 @@
def upgrade() -> None:
"""执行升级操作"""
# ### commands auto generated by Alembic - please adjust! ###
op.create_table("apl_configs",
sa.Column("id", sa.String(length=64), nullable=False),
sa.Column("title", sa.String(length=255), nullable=False),
sa.Column("author", sa.String(length=255), nullable=True),
sa.Column("comment", sa.Text(), nullable=True),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("latest_change_time", sa.String(length=32), nullable=False),
sa.Column("content", sa.Text(), nullable=False),
sa.PrimaryKeyConstraint("id")
op.create_table(
"apl_configs",
sa.Column("id", sa.String(length=64), nullable=False),
sa.Column("title", sa.String(length=255), nullable=False),
sa.Column("author", sa.String(length=255), nullable=True),
sa.Column("comment", sa.Text(), nullable=True),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("latest_change_time", sa.String(length=32), nullable=False),
sa.Column("content", sa.Text(), nullable=False),
sa.PrimaryKeyConstraint("id"),
)
op.create_table("character_configs",
sa.Column("config_id", sa.String(length=128), nullable=False),
sa.Column("name", sa.String(length=255), nullable=False),
sa.Column("config_name", sa.String(length=255), nullable=False),
sa.Column("weapon", sa.String(length=255), nullable=False),
sa.Column("weapon_level", sa.Integer(), nullable=False),
sa.Column("cinema", sa.Integer(), nullable=False),
sa.Column("crit_balancing", sa.Boolean(), nullable=False),
sa.Column("crit_rate_limit", sa.Float(), nullable=False),
sa.Column("scATK_percent", sa.Integer(), nullable=False),
sa.Column("scATK", sa.Integer(), nullable=False),
sa.Column("scHP_percent", sa.Integer(), nullable=False),
sa.Column("scHP", sa.Integer(), nullable=False),
sa.Column("scDEF_percent", sa.Integer(), nullable=False),
sa.Column("scDEF", sa.Integer(), nullable=False),
sa.Column("scAnomalyProficiency", sa.Integer(), nullable=False),
sa.Column("scPEN", sa.Integer(), nullable=False),
sa.Column("scCRIT", sa.Integer(), nullable=False),
sa.Column("scCRIT_DMG", sa.Integer(), nullable=False),
sa.Column("drive4", sa.Text(), nullable=False),
sa.Column("drive5", sa.Text(), nullable=False),
sa.Column("drive6", sa.Text(), nullable=False),
sa.Column("equip_style", sa.String(length=255), nullable=False),
sa.Column("equip_set4", sa.String(length=255), nullable=True),
sa.Column("equip_set2_a", sa.String(length=255), nullable=True),
sa.Column("equip_set2_b", sa.String(length=255), nullable=True),
sa.Column("equip_set2_c", sa.String(length=255), nullable=True),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("update_time", sa.String(length=32), nullable=False),
sa.PrimaryKeyConstraint("config_id")
op.create_table(
"character_configs",
sa.Column("config_id", sa.String(length=128), nullable=False),
sa.Column("name", sa.String(length=255), nullable=False),
sa.Column("config_name", sa.String(length=255), nullable=False),
sa.Column("weapon", sa.String(length=255), nullable=False),
sa.Column("weapon_level", sa.Integer(), nullable=False),
sa.Column("cinema", sa.Integer(), nullable=False),
sa.Column("crit_balancing", sa.Boolean(), nullable=False),
sa.Column("crit_rate_limit", sa.Float(), nullable=False),
sa.Column("scATK_percent", sa.Integer(), nullable=False),
sa.Column("scATK", sa.Integer(), nullable=False),
sa.Column("scHP_percent", sa.Integer(), nullable=False),
sa.Column("scHP", sa.Integer(), nullable=False),
sa.Column("scDEF_percent", sa.Integer(), nullable=False),
sa.Column("scDEF", sa.Integer(), nullable=False),
sa.Column("scAnomalyProficiency", sa.Integer(), nullable=False),
sa.Column("scPEN", sa.Integer(), nullable=False),
sa.Column("scCRIT", sa.Integer(), nullable=False),
sa.Column("scCRIT_DMG", sa.Integer(), nullable=False),
sa.Column("drive4", sa.Text(), nullable=False),
sa.Column("drive5", sa.Text(), nullable=False),
sa.Column("drive6", sa.Text(), nullable=False),
sa.Column("equip_style", sa.String(length=255), nullable=False),
sa.Column("equip_set4", sa.String(length=255), nullable=True),
sa.Column("equip_set2_a", sa.String(length=255), nullable=True),
sa.Column("equip_set2_b", sa.String(length=255), nullable=True),
sa.Column("equip_set2_c", sa.String(length=255), nullable=True),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("update_time", sa.String(length=32), nullable=False),
sa.PrimaryKeyConstraint("config_id"),
)
op.create_table("enemy_configs",
sa.Column("config_id", sa.String(length=128), nullable=False),
sa.Column("enemy_index", sa.Integer(), nullable=False),
sa.Column("enemy_adjust", sa.Text(), nullable=False),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("update_time", sa.String(length=32), nullable=False),
sa.PrimaryKeyConstraint("config_id")
op.create_table(
"enemy_configs",
sa.Column("config_id", sa.String(length=128), nullable=False),
sa.Column("enemy_index", sa.Integer(), nullable=False),
sa.Column("enemy_adjust", sa.Text(), nullable=False),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("update_time", sa.String(length=32), nullable=False),
sa.PrimaryKeyConstraint("config_id"),
)
op.create_table("sessions",
sa.Column("session_id", sa.String(length=128), nullable=False),
sa.Column("session_name", sa.String(length=255), nullable=False),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("status", sa.String(length=32), nullable=False),
sa.Column("session_run", sa.Text(), nullable=True),
sa.Column("session_result", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("session_id")
op.create_table(
"sessions",
sa.Column("session_id", sa.String(length=128), nullable=False),
sa.Column("session_name", sa.String(length=255), nullable=False),
sa.Column("create_time", sa.String(length=32), nullable=False),
sa.Column("status", sa.String(length=32), nullable=False),
sa.Column("session_run", sa.Text(), nullable=True),
sa.Column("session_result", sa.Text(), nullable=True),
sa.PrimaryKeyConstraint("session_id"),
)
# ### end Alembic commands ###

Expand Down
33 changes: 32 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,39 @@ dependencies = [
line-length = 100

[tool.ruff.lint]
select = ["E", "F", "W", "B", "B9", "I", "Q"]
select = ["E", "F", "W", "I", "Q"]
ignore = ["E501"]
exclude = ["build", "dist", ".venv", "__pypackages__"]
per-file-ignores = { "__init__.py" = ["F401"] }

[tool.black]
line-length = 100
target-version = ['py312']
include = '\.pyi?$'
extend-exclude = '''
/(
# directories
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| build
| dist
)/
'''

[tool.isort]
profile = "black"
line_length = 100
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
ensure_newline_before_comments = true
skip_glob = ["*/migrations/*", "venv/*", ".venv/*"]

[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
Expand All @@ -86,6 +114,9 @@ dev = [
"pytest-asyncio>=1.1.0",
"mypy>=1.17.1",
"ruff>=0.12.12",
"black>=25.11.0",
"isort>=7.0.0",
"pre-commit>=4.2.0",
]

[project.optional-dependencies]
Expand Down
Loading