[project]
name = "nonebot-plugin-wordcloud"
version = "0.9.0"
description = "适用于 NoneBot2 的词云插件"
authors = [{ name = "uy_sun", email = "hmy0119@gmail.com" }]
readme = "README.md"
license = { file = "LICENSE" }
requires-python = ">= 3.9"
dependencies = [
  "nonebot2[fastapi]>=2.2.0",
  "nonebot-plugin-apscheduler>=0.4.0",
  "nonebot-plugin-localstore>=0.6.0",
  "nonebot-plugin-orm>=0.7.0",
  "nonebot-plugin-alconna>=0.49.0",
  "nonebot-plugin-uninfo>=0.6.2",
  "nonebot-plugin-cesaa>=0.5.0,<0.6.0",
  "wordcloud>=1.8.1",
  "jieba>=0.42.1",
  "tzdata",
  "emoji>=1.6.3",
]

[project.urls]
Homepage = "https://github.com/he0119/nonebot-plugin-wordcloud"
Repository = "https://github.com/he0119/nonebot-plugin-wordcloud.git"
Issues = "https://github.com/he0119/nonebot-plugin-wordcloud/issues"
Changelog = "https://github.com/he0119/nonebot-plugin-wordcloud/blob/main/CHANGELOG.md"

[project.optional-dependencies]
datastore = ["nonebot-plugin-datastore>=1.2.0"]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.metadata]
allow-direct-references = true

[tool.hatch.build.targets.wheel]
packages = ["nonebot_plugin_wordcloud"]

[tool.hatch.build.targets.sdist]
only-include = ["nonebot_plugin_wordcloud"]

[tool.uv]
dev-dependencies = [
  "nb-cli>=1.4.1",
  "nonebug>=0.4.3",
  "nonebug-saa>=0.5.0",
  "nonebot-adapter-onebot>=2.4.4",
  "nonebot-plugin-orm[default]>=0.7.4",
  "nonebot-plugin-datastore>=1.3.0",
  "asyncpg>=0.29.0",
  "aiomysql>=0.2.0",
  "pytest-cov>=5.0.0",
  "pytest-xdist>=3.6.1",
  "pytest-mock>=3.14.0",
  "pytest-asyncio>=0.23.7",
  "respx>=0.21.1",
  "httpx>=0.27.0,<0.28.0",
  "gevent>=24.2.1",
  "cryptography>=42.0.8",
  "bump-my-version>=0.25.4",
  "poethepoet>=0.31.1",
]

[tool.uv.pip]
universal = true

[tool.poe.tasks]
test = "pytest --cov=nonebot_plugin_wordcloud --cov-report xml --junitxml=./junit.xml -n auto"
"test:single" = "pytest --cov=nonebot_plugin_wordcloud --cov-report xml --junitxml=./junit.xml"
# async sqlalchemy 需要使用 gevent 才能获得正确覆盖率
# https://github.com/nedbat/coveragepy/issues/1082
"test:gevent" = "coverage run --concurrency=thread,gevent -m pytest --cov=nonebot_plugin_wordcloud --cov-report xml --junitxml=./junit.xml -n auto"
# Python 3.12 下需要启用 sysmon 模式,否则测试速度非常慢
# https://github.com/nedbat/coveragepy/issues/1665
"test:sysmon".ref = "test"
"test:sysmon".env = { "COVERAGE_CORE" = "sysmon" }
bump = "bump-my-version bump"
show-bump = "bump-my-version show-bump"

[tool.pyright]
pythonVersion = "3.9"
pythonPlatform = "All"
typeCheckingMode = "standard"
defineConstant = { PYDANTIC_V2 = true }

[tool.ruff]
line-length = 88
target-version = "py39"

[tool.ruff.lint]
select = [
  "W",   # pycodestyle warnings
  "E",   # pycodestyle errors
  "F",   # pyflakes
  "UP",  # pyupgrade
  "C4",  # flake8-comprehensions
  "T10", # flake8-debugger
  "T20", # flake8-print
  "PYI", # flake8-pyi
  "PT",  # flake8-pytest-style
  "Q",   # flake8-quotes
  "TC",  # flake8-type-checking
  "RUF", # Ruff-specific rules
  "I",   # isort
]
ignore = [
  "E402",   # module-import-not-at-top-of-file
  "RUF001", # ambiguous-unicode-character-string
  "RUF002", # ambiguous-unicode-character-docstring
  "RUF003", # ambiguous-unicode-character-comment
]

[tool.nonebot]
plugins = ["nonebot_plugin_wordcloud"]
adapters = [
  { name = "OneBot V12", module_name = "nonebot.adapters.onebot.v12", project_link = "nonebot-adapter-onebot", desc = "OneBot V12 协议" },
  { name = "OneBot V11", module_name = "nonebot.adapters.onebot.v11", project_link = "nonebot-adapter-onebot", desc = "OneBot V11 协议" },
]

[tool.coverage.report]
exclude_lines = [
  "pragma: no cover",
  "raise NotImplementedError",
  "if __name__ == .__main__.:",
  "if TYPE_CHECKING:",
  "@overload",
  "except ImportError:",
]
omit = ["*/compat.py", "*/migrations/*"]

[tool.pytest.ini_options]
addopts = ["--import-mode=importlib"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "session"

[tool.bumpversion]
current_version = "0.9.0"
commit = true
message = "chore(release): {new_version}"

[[tool.bumpversion.files]]
filename = "pyproject.toml"
search = "version = \"{current_version}\""
replace = "version = \"{new_version}\""

[[tool.bumpversion.files]]
filename = "CHANGELOG.md"
search = "## [Unreleased]"
replace = "## [Unreleased]\n\n## [{new_version}] - {now:%Y-%m-%d}"

[[tool.bumpversion.files]]
filename = "CHANGELOG.md"
regex = true
search = "\\[Unreleased\\]: (https://.+?)v{current_version}\\.\\.\\.HEAD"
replace = "[Unreleased]: \\1v{new_version}...HEAD\n[{new_version}]: \\1v{current_version}...v{new_version}"