diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 71ce364..5373d7e 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -30,7 +30,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: "3.11.6"
+ python-version: "3.11.7"
- name: Install project dependencies
run: |
diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml
deleted file mode 100644
index 298eb1b..0000000
--- a/.github/workflows/pytest.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: "PyTest & Codecov | Testing and Code Coverage"
-
-on:
- push:
- branches: [dev]
- pull_request:
- types: [opened, reopened, edited, synchronize]
- workflow_dispatch:
-
-env:
- default_branch: dev
-
-jobs:
- pytest:
- name: pytest
- runs-on: ubuntu-latest
- permissions:
- actions: read
- contents: read
- security-events: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.11.6"
-
- - name: Install project dependencies
- run: |
- python -m pip install --upgrade pip
- if [ -f requirements.txt ];
- then pip install -r requirements.txt;
- fi
-
- - name: Run pytest
- uses: pavelzw/pytest-action@v2
- with:
- custom-arguments: "--cov --cov-report=xml"
- env:
- GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
-
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@v3
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/conftest.py b/conftest.py
deleted file mode 100644
index b5620d7..0000000
--- a/conftest.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import asyncio
-
-import pytest
-from sanic import Sanic
-
-from api import api
-
-
-@pytest.fixture
-def app() -> Sanic:
- app: Sanic = Sanic("ReVanced-API")
- app.blueprint(api)
- app.config.TOUCHUP = False
- return app
-
-
-@pytest.fixture(scope="session")
-def event_loop():
- try:
- loop = asyncio.get_running_loop()
- except RuntimeError:
- loop = asyncio.new_event_loop()
- yield loop
- loop.close()
diff --git a/poetry.lock b/poetry.lock
index 20c6f70..33faf8d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -137,26 +137,6 @@ files = [
[package.dependencies]
frozenlist = ">=1.1.0"
-[[package]]
-name = "anyio"
-version = "4.2.0"
-description = "High level compatibility layer for multiple asynchronous event loop implementations"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"},
- {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"},
-]
-
-[package.dependencies]
-idna = ">=2.8"
-sniffio = ">=1.1"
-
-[package.extras]
-doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
-test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
-trio = ["trio (>=0.23)"]
-
[[package]]
name = "argon2-cffi"
version = "23.1.0"
@@ -486,81 +466,6 @@ files = [
[package.dependencies]
pycparser = "*"
-[[package]]
-name = "colorama"
-version = "0.4.6"
-description = "Cross-platform colored terminal text."
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
-files = [
- {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
- {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
-]
-
-[[package]]
-name = "coverage"
-version = "7.4.0"
-description = "Code coverage measurement for Python"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"},
- {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"},
- {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"},
- {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"},
- {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"},
- {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"},
- {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"},
- {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"},
- {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"},
- {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"},
- {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"},
- {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"},
- {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"},
- {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"},
- {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"},
- {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"},
- {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"},
- {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"},
- {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"},
- {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"},
- {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"},
- {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"},
- {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"},
- {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"},
- {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"},
- {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"},
- {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"},
- {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"},
- {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"},
- {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"},
- {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"},
- {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"},
- {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"},
- {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"},
- {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"},
- {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"},
- {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"},
- {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"},
- {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"},
- {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"},
- {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"},
- {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"},
- {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"},
- {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"},
- {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"},
- {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"},
- {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"},
- {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"},
- {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"},
- {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"},
- {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"},
- {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"},
-]
-
-[package.extras]
-toml = ["tomli"]
-
[[package]]
name = "cryptography"
version = "41.0.7"
@@ -902,17 +807,6 @@ files = [
docs = ["Sphinx", "furo"]
test = ["objgraph", "psutil"]
-[[package]]
-name = "h11"
-version = "0.14.0"
-description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
- {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
-]
-
[[package]]
name = "html5tagger"
version = "1.3.0"
@@ -924,27 +818,6 @@ files = [
{file = "html5tagger-1.3.0.tar.gz", hash = "sha256:84fa3dfb49e5c83b79bbd856ab7b1de8e2311c3bb46a8be925f119e3880a8da9"},
]
-[[package]]
-name = "httpcore"
-version = "1.0.2"
-description = "A minimal low-level HTTP client."
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"},
- {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"},
-]
-
-[package.dependencies]
-certifi = "*"
-h11 = ">=0.13,<0.15"
-
-[package.extras]
-asyncio = ["anyio (>=4.0,<5.0)"]
-http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (==1.*)"]
-trio = ["trio (>=0.22.0,<0.23.0)"]
-
[[package]]
name = "httptools"
version = "0.6.1"
@@ -993,30 +866,6 @@ files = [
[package.extras]
test = ["Cython (>=0.29.24,<0.30.0)"]
-[[package]]
-name = "httpx"
-version = "0.26.0"
-description = "The next generation HTTP client."
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"},
- {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"},
-]
-
-[package.dependencies]
-anyio = "*"
-certifi = "*"
-httpcore = "==1.*"
-idna = "*"
-sniffio = "*"
-
-[package.extras]
-brotli = ["brotli", "brotlicffi"]
-cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
-http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (==1.*)"]
-
[[package]]
name = "idna"
version = "3.6"
@@ -1043,17 +892,6 @@ files = [
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"]
-[[package]]
-name = "iniconfig"
-version = "2.0.0"
-description = "brain-dead simple config-ini parsing"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
- {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
-]
-
[[package]]
name = "iso8601"
version = "2.1.0"
@@ -1540,21 +1378,6 @@ tzdata = ">=2020.1"
[package.extras]
test = ["time-machine (>=2.6.0)"]
-[[package]]
-name = "pluggy"
-version = "1.3.0"
-description = "plugin and hook calling mechanisms for python"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"},
- {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"},
-]
-
-[package.extras]
-dev = ["pre-commit", "tox"]
-testing = ["pytest", "pytest-benchmark"]
-
[[package]]
name = "py-buzz"
version = "4.1.0"
@@ -1684,58 +1507,6 @@ files = [
{file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"},
]
-[[package]]
-name = "pydantic"
-version = "1.10.13"
-description = "Data validation and settings management using python type hints"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"},
- {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"},
- {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"},
- {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"},
- {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"},
- {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"},
- {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"},
- {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"},
- {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"},
- {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"},
- {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"},
- {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"},
- {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"},
- {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"},
- {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"},
- {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"},
- {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"},
- {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"},
- {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"},
- {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"},
- {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"},
- {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"},
- {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"},
- {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"},
- {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"},
- {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"},
- {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"},
- {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"},
- {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"},
- {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"},
- {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"},
- {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"},
- {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"},
- {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"},
- {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"},
- {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"},
-]
-
-[package.dependencies]
-typing-extensions = ">=4.2.0"
-
-[package.extras]
-dotenv = ["python-dotenv (>=0.10.4)"]
-email = ["email-validator (>=1.0.3)"]
-
[[package]]
name = "pyjwt"
version = "2.8.0"
@@ -1773,90 +1544,6 @@ pycryptodomex = ">=3.18.0,<4.0.0"
[package.extras]
docs = ["Sphinx[docs] (>=6,<8)", "sphinx-autodoc-typehints[docs] (>=1.21.0,<2.0.0)", "sphinx-rtd-theme[docs] (>=1.2.1,<2.0.0)"]
-[[package]]
-name = "pytest"
-version = "7.4.4"
-description = "pytest: simple powerful testing with Python"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"},
- {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"},
-]
-
-[package.dependencies]
-colorama = {version = "*", markers = "sys_platform == \"win32\""}
-iniconfig = "*"
-packaging = "*"
-pluggy = ">=0.12,<2.0"
-
-[package.extras]
-testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
-
-[[package]]
-name = "pytest-asyncio"
-version = "0.23.3"
-description = "Pytest support for asyncio"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "pytest-asyncio-0.23.3.tar.gz", hash = "sha256:af313ce900a62fbe2b1aed18e37ad757f1ef9940c6b6a88e2954de38d6b1fb9f"},
- {file = "pytest_asyncio-0.23.3-py3-none-any.whl", hash = "sha256:37a9d912e8338ee7b4a3e917381d1c95bfc8682048cb0fbc35baba316ec1faba"},
-]
-
-[package.dependencies]
-pytest = ">=7.0.0"
-
-[package.extras]
-docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"]
-testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"]
-
-[[package]]
-name = "pytest-cov"
-version = "4.1.0"
-description = "Pytest plugin for measuring coverage."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"},
- {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"},
-]
-
-[package.dependencies]
-coverage = {version = ">=5.2.1", extras = ["toml"]}
-pytest = ">=4.6"
-
-[package.extras]
-testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"]
-
-[[package]]
-name = "pytest-emoji"
-version = "0.2.0"
-description = "A pytest plugin that adds emojis to your test result report"
-optional = false
-python-versions = ">=3.4"
-files = [
- {file = "pytest-emoji-0.2.0.tar.gz", hash = "sha256:e1bd4790d87649c2d09c272c88bdfc4d37c1cc7c7a46583087d7c510944571e8"},
- {file = "pytest_emoji-0.2.0-py3-none-any.whl", hash = "sha256:6e34ed21970fa4b80a56ad11417456bd873eb066c02315fe9df0fafe6d4d4436"},
-]
-
-[package.dependencies]
-pytest = ">=4.2.1"
-
-[[package]]
-name = "pytest-md"
-version = "0.2.0"
-description = "Plugin for generating Markdown reports for pytest results"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "pytest-md-0.2.0.tar.gz", hash = "sha256:3b248d5b360ea5198e05b4f49c7442234812809a63137ec6cdd3643a40cf0112"},
- {file = "pytest_md-0.2.0-py3-none-any.whl", hash = "sha256:4c4cd16fea6d1485e87ee254558712c804a96d2aa9674b780e7eb8fb6526e1d1"},
-]
-
-[package.dependencies]
-pytest = ">=4.2.1"
-
[[package]]
name = "python-dateutil"
version = "2.8.2"
@@ -2035,23 +1722,6 @@ files = [
{file = "sanic_routing-23.12.0-py3-none-any.whl", hash = "sha256:1558a72afcb9046ed3134a5edae02fc1552cff08f0fff2e8d5de0877ea43ed73"},
]
-[[package]]
-name = "sanic-testing"
-version = "23.12.0"
-description = "Core testing clients for Sanic"
-optional = false
-python-versions = "*"
-files = [
- {file = "sanic-testing-23.12.0.tar.gz", hash = "sha256:2b9c52b7314b7e1807958f41581e18b8254c5161c953e70fcf492e0dd2fe133f"},
- {file = "sanic_testing-23.12.0-py3-none-any.whl", hash = "sha256:d809911fca49cba93e1df9de5c6ab8d95d91bdc03b18ba8a25b4e0b66c4e4c73"},
-]
-
-[package.dependencies]
-httpx = ">=0.18"
-
-[package.extras]
-dev = ["pytest", "pytest-asyncio", "sanic (>=22.12)", "setuptools"]
-
[[package]]
name = "sentry-sdk"
version = "1.39.2"
@@ -2098,22 +1768,6 @@ starlette = ["starlette (>=0.19.1)"]
starlite = ["starlite (>=1.48)"]
tornado = ["tornado (>=5)"]
-[[package]]
-name = "setuptools"
-version = "69.0.3"
-description = "Easily download, build, install, upgrade, and uninstall Python packages"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"},
- {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"},
-]
-
-[package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
-testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
-
[[package]]
name = "six"
version = "1.16.0"
@@ -2125,17 +1779,6 @@ files = [
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
-[[package]]
-name = "sniffio"
-version = "1.3.0"
-description = "Sniff out which async library your code is running under"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
- {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
-]
-
[[package]]
name = "soupsieve"
version = "2.5"
@@ -2728,4 +2371,4 @@ multidict = ">=4.0"
[metadata]
lock-version = "2.0"
python-versions = ">=3.11,<3.13"
-content-hash = "e735cdc35f6e3bf00b37549b3d23e33096ff22c636a0e9c4a20692501d5ea42d"
+content-hash = "4a896f731f6556e3f6c75463d4778b2f473c34dd5f8466cd62223d380e90d10f"
diff --git a/pyproject.toml b/pyproject.toml
index 6cdbe16..7b51eca 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -12,22 +12,9 @@ aiohttp = { version = "^3.9.1", extras = ["speedups"] }
sanic = { version = "^23.12.1", extras = ["ext"] }
ujson = "^5.9.0"
asyncstdlib = "^3.12.0"
-pydantic = "^1.10.13"
cytoolz = "^0.12.2"
beautifulsoup4 = "^4.12.2"
-setuptools = "^69.0.3"
lxml = "^5.1.0"
-mypy = "^1.8.0"
-types-ujson = "^5.9.0.0"
-types-aiofiles = "^23.2.0.20240106"
-sanic-testing = "^23.12.0"
-pytest-asyncio = "^0.23.3"
-types-beautifulsoup4 = "^4.12.0.20240106"
-pytest-md = "^0.2.0"
-pytest-emoji = "^0.2.0"
-coverage = "^7.4.0"
-pytest-cov = "^4.1.0"
-pytest = "^7.4.4"
sqlalchemy = "^2.0.25"
sanic-beskar = "^2.3.2"
bson = "^0.5.10"
@@ -36,6 +23,12 @@ cryptography = "^41.0.7"
sanic-limiter = { git = "https://github.com/Omegastick/sanic-limiter" }
sentry-sdk = { extras = ["sanic"], version = "^1.39.2" }
+[tool.poetry.dev-dependencies]
+mypy = "^1.8.0"
+types-ujson = "^5.9.0.0"
+types-aiofiles = "^23.2.0.20240106"
+types-beautifulsoup4 = "^4.12.0.20240106"
+
[tool.pytest.ini_options]
asyncio_mode = "auto"
filterwarnings = [
diff --git a/qodana.sarif.json b/qodana.sarif.json
deleted file mode 100644
index 71fb81e..0000000
--- a/qodana.sarif.json
+++ /dev/null
@@ -1,12194 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/schemastore/schemastore/master/src/schemas/json/sarif-2.1.0-rtm.5.json",
- "version": "2.1.0",
- "runs": [
- {
- "tool": {
- "driver": {
- "name": "QDPY",
- "fullName": "Qodana for Python",
- "version": "231.8866.71",
- "rules": [],
- "taxa": [
- {
- "id": "EditorConfig",
- "name": "EditorConfig"
- },
- {
- "id": "Jupyter",
- "name": "Jupyter"
- },
- {
- "id": "Python",
- "name": "Python"
- },
- {
- "id": "PostgreSQL",
- "name": "PostgreSQL"
- },
- {
- "id": "Google App Engine (Python)",
- "name": "Google App Engine (Python)"
- },
- {
- "id": "SQL",
- "name": "SQL"
- },
- {
- "id": "Shell script",
- "name": "Shell script"
- },
- {
- "id": "XML",
- "name": "XML"
- },
- {
- "id": "YAML",
- "name": "YAML"
- },
- {
- "id": "JSON and JSON5",
- "name": "JSON and JSON5"
- },
- {
- "id": "MongoJS",
- "name": "MongoJS"
- },
- {
- "id": "RegExp",
- "name": "RegExp"
- },
- {
- "id": "Properties files",
- "name": "Properties files"
- },
- {
- "id": "MySQL",
- "name": "MySQL"
- },
- {
- "id": "CSS",
- "name": "CSS"
- },
- {
- "id": "Django",
- "name": "Django"
- },
- {
- "id": "HTML",
- "name": "HTML"
- },
- {
- "id": "CSS/Probable bugs",
- "name": "Probable bugs",
- "relationships": [
- {
- "target": {
- "id": "CSS",
- "index": 14,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "General",
- "name": "General"
- },
- {
- "id": "HTML/Accessibility",
- "name": "Accessibility",
- "relationships": [
- {
- "target": {
- "id": "HTML",
- "index": 16,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "SQL server",
- "name": "SQL server"
- },
- {
- "id": "CSS/Invalid elements",
- "name": "Invalid elements",
- "relationships": [
- {
- "target": {
- "id": "CSS",
- "index": 14,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "Structural search",
- "name": "Structural search"
- },
- {
- "id": "Dependency analysis",
- "name": "Dependency analysis"
- },
- {
- "id": "CSS/Code style issues",
- "name": "Code style issues",
- "relationships": [
- {
- "target": {
- "id": "CSS",
- "index": 14,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "Ini files",
- "name": "Ini files"
- },
- {
- "id": "RELAX NG",
- "name": "RELAX NG"
- },
- {
- "id": "Proofreading",
- "name": "Proofreading"
- },
- {
- "id": "Pyramid",
- "name": "Pyramid"
- },
- {
- "id": "Oracle",
- "name": "Oracle"
- },
- {
- "id": "Internationalization",
- "name": "Internationalization"
- },
- {
- "id": "Version control",
- "name": "Version control"
- }
- ],
- "language": "en-US",
- "contents": [
- "localizedData",
- "nonLocalizedData"
- ],
- "isComprehensive": false
- },
- "extensions": [
- {
- "name": "org.editorconfig.editorconfigjetbrains",
- "version": "231.8866",
- "rules": [
- {
- "id": "EditorConfigCharClassRedundancy",
- "shortDescription": {
- "text": "Unnecessary character class"
- },
- "fullDescription": {
- "text": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example '[a]'→'a'.",
- "markdown": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigDeprecatedDescriptor",
- "shortDescription": {
- "text": "Deprecated property"
- },
- "fullDescription": {
- "text": "Reports EditorConfig properties that are no longer supported.",
- "markdown": "Reports EditorConfig properties that are no longer supported."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigRootDeclarationUniqueness",
- "shortDescription": {
- "text": "Extra top-level declaration"
- },
- "fullDescription": {
- "text": "Reports multiple top-level declarations. There can be only one optional “root=true” top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed.",
- "markdown": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigNumerousWildcards",
- "shortDescription": {
- "text": "Too many wildcards"
- },
- "fullDescription": {
- "text": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues.",
- "markdown": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigWildcardRedundancy",
- "shortDescription": {
- "text": "Redundant wildcard"
- },
- "fullDescription": {
- "text": "Reports wildcards that become redundant when the “**” wildcard is used in the same section. The “**” wildcard defines a broader set of files than any other wildcard. That is why, any other wildcard used in the same section has no affect and can be removed.",
- "markdown": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigPartialOverride",
- "shortDescription": {
- "text": "Overlapping sections"
- },
- "fullDescription": {
- "text": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: '[{foo,bar}]' and '[{foo,bas}]' both contain “foo”.",
- "markdown": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\"."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigEmptySection",
- "shortDescription": {
- "text": "Empty section"
- },
- "fullDescription": {
- "text": "Reports sections that do not contain any EditorConfig properties.",
- "markdown": "Reports sections that do not contain any EditorConfig properties."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigHeaderUniqueness",
- "shortDescription": {
- "text": "EditorConfig section is not unique"
- },
- "fullDescription": {
- "text": "Reports sections that define the same file pattern as other sections.",
- "markdown": "Reports sections that define the same file pattern as other sections."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigShadowingOption",
- "shortDescription": {
- "text": "Overriding property"
- },
- "fullDescription": {
- "text": "Reports properties that override the same properties defined earlier in the file. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes the same files as '[*.java]' but also sets indent_size to value 2. Thus the first declaration 'indent_size=4'will be ignored.",
- "markdown": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigListAcceptability",
- "shortDescription": {
- "text": "Unexpected value list"
- },
- "fullDescription": {
- "text": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified.",
- "markdown": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigShadowedOption",
- "shortDescription": {
- "text": "Overridden property"
- },
- "fullDescription": {
- "text": "Reports properties that are already defined in other sections. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes all '*.java' files too but it also redefines indent_size. As a result the value 2 will be used for files matching '*.java'.",
- "markdown": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigEmptyHeader",
- "shortDescription": {
- "text": "Empty header"
- },
- "fullDescription": {
- "text": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by 'gitignore'.",
- "markdown": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigValueCorrectness",
- "shortDescription": {
- "text": "Invalid property value"
- },
- "fullDescription": {
- "text": "Reports property values that do not meet value restrictions. For example, some properties may be only “true” or “false”, others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them.",
- "markdown": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigValueUniqueness",
- "shortDescription": {
- "text": "Non-unique list value"
- },
- "fullDescription": {
- "text": "Reports duplicates in lists of values.",
- "markdown": "Reports duplicates in lists of values."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigMissingRequiredDeclaration",
- "shortDescription": {
- "text": "Required declarations are missing"
- },
- "fullDescription": {
- "text": "Reports properties that miss the required declarations. Refer to the documentation for more information.",
- "markdown": "Reports properties that miss the required declarations. Refer to the documentation for more information."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigCharClassLetterRedundancy",
- "shortDescription": {
- "text": "Duplicate character class letter"
- },
- "fullDescription": {
- "text": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example '[aa]'.",
- "markdown": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigKeyCorrectness",
- "shortDescription": {
- "text": "Unknown property"
- },
- "fullDescription": {
- "text": "Reports properties that are not supported by the IDE. Note: some “ij” domain properties may require specific language plugins.",
- "markdown": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigPatternEnumerationRedundancy",
- "shortDescription": {
- "text": "Unnecessary braces"
- },
- "fullDescription": {
- "text": "Reports pattern lists that are either empty '{}' or contain just one pattern, for example '{foo}' in contrast to a list containing multiple patterns, for example '{foo,bar}'. In this case braces are handled as a part of the name. For example, the pattern '*.{a}' will match the file 'my.{a}' but not 'my.a'.",
- "markdown": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}` in contrast to a list containing multiple patterns, for example `{foo,bar}`. In this case braces are handled as a part of the name. For example, the pattern `*.{a}` will match the file `my.{a}` but not `my.a`."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigEncoding",
- "shortDescription": {
- "text": "File encoding doesn't match EditorConfig charset"
- },
- "fullDescription": {
- "text": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file.",
- "markdown": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigSpaceInHeader",
- "shortDescription": {
- "text": "Space in file pattern"
- },
- "fullDescription": {
- "text": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed.",
- "markdown": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigOptionRedundancy",
- "shortDescription": {
- "text": "Redundant property"
- },
- "fullDescription": {
- "text": "Reports properties that are redundant when another applicable section already contains the same property and value. For example: '[*]\nindent_size=4\n[*.java]\nindent_size=4' are both applicable to '*.java' files and define the same 'indent_size' value.",
- "markdown": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigRootDeclarationCorrectness",
- "shortDescription": {
- "text": "Unexpected top-level declaration"
- },
- "fullDescription": {
- "text": "Reports unexpected top-level declarations. Top-level declarations other than “root=true” are not allowed in the EditorConfig file.",
- "markdown": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigReferenceCorrectness",
- "shortDescription": {
- "text": "Invalid reference"
- },
- "fullDescription": {
- "text": "Reports identifiers that are either unknown or have a wrong type.",
- "markdown": "Reports identifiers that are either unknown or have a wrong type."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigUnusedDeclaration",
- "shortDescription": {
- "text": "Unused declaration"
- },
- "fullDescription": {
- "text": "Reports unused declarations. Such declarations can be removed.",
- "markdown": "Reports unused declarations. Such declarations can be removed."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigPairAcceptability",
- "shortDescription": {
- "text": "Unexpected key-value pair"
- },
- "fullDescription": {
- "text": "Reports key-value pairs that are not allowed in the current context.",
- "markdown": "Reports key-value pairs that are not allowed in the current context."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigPatternRedundancy",
- "shortDescription": {
- "text": "Duplicate or redundant pattern"
- },
- "fullDescription": {
- "text": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in '[{*.java,*}]' the first '*.java' pattern defines a narrower scope compared to '*'. That is why it is redundant and can be removed.",
- "markdown": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigNoMatchingFiles",
- "shortDescription": {
- "text": "No matching files"
- },
- "fullDescription": {
- "text": "Reports sections with wildcard patterns that do not match any files under the directory in which the '.editorconfig' file is located.",
- "markdown": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EditorConfigUnexpectedComma",
- "shortDescription": {
- "text": "Unexpected comma"
- },
- "fullDescription": {
- "text": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists.",
- "markdown": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "error",
- "parameters": {
- "ideaSeverity": "ERROR",
- "qodanaSeverity": "Critical"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "EditorConfig",
- "index": 0,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- }
- ],
- "language": "en-US",
- "contents": [
- "localizedData",
- "nonLocalizedData"
- ],
- "isComprehensive": false
- },
- {
- "name": "Pythonid",
- "version": "231.8866",
- "rules": [
- {
- "id": "JupyterPackageInspection",
- "shortDescription": {
- "text": "The 'jupyter' package is not installed"
- },
- "fullDescription": {
- "text": "Reports cases when the 'jupyter' package is not installed for the selected Python interpreter. Without a properly installed 'jupyter' package, you cannot execute Jupyter notebooks. Click the corresponding link on the warning banner to install the missing package. You can also install the package in the Project Settings/Preferences or in the Python Packages tool window. See Installing Python package for more details.",
- "markdown": "Reports cases when the `jupyter` package is not installed for the selected\nPython interpreter. Without a properly installed `jupyter` package, you cannot\nexecute Jupyter notebooks.\n\nClick the corresponding link on the warning banner to install the missing\npackage. You can also install the package in the Project **Settings/Preferences** or in the\n**Python Packages** tool window.\n\nSee [Installing Python package](https://www.jetbrains.com/help/pycharm/installing-uninstalling-and-upgrading-packages.html) for more details."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Jupyter",
- "index": 1,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PySetFunctionToLiteralInspection",
- "shortDescription": {
- "text": "Function call can be replaced with set literal"
- },
- "fullDescription": {
- "text": "Reports calls to the 'set' function that can be replaced with the 'set' literal. Example: def do_mult(a, b):\n c = a * b\n return set([c, a, b])\n When the quick-fix is applied, the code changes to: def do_mult(a, b):\n c = a * b\n return {c, a, b}",
- "markdown": "Reports calls to the `set` function that can be replaced with\nthe `set` literal.\n\n**Example:**\n\n```\ndef do_mult(a, b):\n c = a * b\n return set([c, a, b])\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndef do_mult(a, b):\n c = a * b\n return {c, a, b}\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyStatementEffectInspection",
- "shortDescription": {
- "text": "Statement has no effect"
- },
- "fullDescription": {
- "text": "Reports statements that have no effect. Example: class Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n2 + 3 # has no effect\n In this example, you can either add a field 'time' to the 'Car' class or introduce variables for the problematic statements.",
- "markdown": "Reports statements that have no effect.\n\n**Example:**\n\n```\nclass Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n2 + 3 # has no effect\n```\n\nIn this example, you can either add a field `time` to the `Car` class or\nintroduce variables for the problematic statements."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "Query_index_required",
- "shortDescription": {
- "text": "Query does not have the required index"
- },
- "fullDescription": {
- "text": "Reports GQL queries for which an index is not defined in 'index.yaml'. Such queries will fail on the production server. The quick-fix allows you to add the necessary index definitions.",
- "markdown": "Reports GQL queries for which an index is not defined in `index.yaml`.\nSuch queries will fail on the production server.\nThe quick-fix allows you to add the necessary index definitions."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Google App Engine (Python)",
- "index": 4,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMandatoryEncodingInspection",
- "shortDescription": {
- "text": "No encoding specified for file"
- },
- "fullDescription": {
- "text": "Reports a missing encoding comment in Python 2. Example: class Book(object):\n def __init__(self):\n pass\n When the quick-fix is applied, the missing comment is added: # coding=utf-8\nclass Book(object):\n def __init__(self):\n pass",
- "markdown": "Reports a missing encoding comment in Python 2.\n\n**Example:**\n\n```\nclass Book(object):\n def __init__(self):\n pass\n```\n\nWhen the quick-fix is applied, the missing comment is added:\n\n```\n# coding=utf-8\nclass Book(object):\n def __init__(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyInconsistentIndentationInspection",
- "shortDescription": {
- "text": "Inconsistent indentation"
- },
- "fullDescription": {
- "text": "Reports inconsistent indentation in Python source files when, for example, you use a mixture of tabs and spaces in your code.",
- "markdown": "Reports inconsistent indentation in Python source files when, for example,\nyou use a mixture of tabs and spaces in your code."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyAttributeOutsideInitInspection",
- "shortDescription": {
- "text": "An instance attribute is defined outside `__init__`"
- },
- "fullDescription": {
- "text": "Reports a problem when instance attribute definition is outside '__init__' method. Example: class Book:\n def __init__(self):\n self.author = 'Mark Twain'\n\n def release(self):\n self.year = '1889'\n When the quick-fix is applied, the code sample changes to: class Book:\n def __init__(self):\n self.year = '1889'\n self.author = 'Mark Twain'\n\n def release(self):\n pass",
- "markdown": "Reports a problem when instance attribute definition is outside `__init__` method.\n\n**Example:**\n\n```\n class Book:\n def __init__(self):\n self.author = 'Mark Twain'\n\n def release(self):\n self.year = '1889'\n```\n\n\nWhen the quick-fix is applied, the code sample changes to:\n\n```\n class Book:\n def __init__(self):\n self.year = '1889'\n self.author = 'Mark Twain'\n\n def release(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTypedDictInspection",
- "shortDescription": {
- "text": "Invalid TypedDict definition and usages"
- },
- "fullDescription": {
- "text": "Reports invalid definition and usage of TypedDict. Example: from typing import TypedDict\n\n\nclass Movie(TypedDict):\n name: str\n year: int\n rate: int = 10 # Right-hand side values are not supported\n\n def method(self): # Invalid statement in TypedDict\n pass\n\n\nm = Movie(name=\"name\", year=1000, rate=9)\nprint(m[\"director\"]) # There is no the 'director' key in 'Movie'\ndel m[\"name\"] # The 'name' key cannot be deleted\nm[\"year\"] = \"1001\" # Expected 'int', got 'str'",
- "markdown": "Reports invalid definition and usage of\n[TypedDict](https://www.python.org/dev/peps/pep-0589/).\n\n**Example:**\n\n```\nfrom typing import TypedDict\n\n\nclass Movie(TypedDict):\n name: str\n year: int\n rate: int = 10 # Right-hand side values are not supported\n\n def method(self): # Invalid statement in TypedDict\n pass\n\n\nm = Movie(name=\"name\", year=1000, rate=9)\nprint(m[\"director\"]) # There is no the 'director' key in 'Movie'\ndel m[\"name\"] # The 'name' key cannot be deleted\nm[\"year\"] = \"1001\" # Expected 'int', got 'str'\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyPep8Inspection",
- "shortDescription": {
- "text": "PEP 8 coding style violation"
- },
- "fullDescription": {
- "text": "Reports violations of the PEP 8 coding style guide by running the bundled pycodestyle.py tool.",
- "markdown": "Reports violations of the [PEP 8 coding style guide](https://www.python.org/dev/peps/pep-0008/) by running the bundled [pycodestyle.py](https://github.com/PyCQA/pycodestyle) tool."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMissingTypeHintsInspection",
- "shortDescription": {
- "text": "Missing type hinting for function definition"
- },
- "fullDescription": {
- "text": "Reports missing type hints for function declaration in one of the two formats: parameter annotations or a type comment. Select the Only when types are known checkbox if you want the inspection check the types collected from runtime or inferred.",
- "markdown": "Reports missing type hints for function declaration in\none of the two formats: parameter annotations or a type comment.\n\nSelect the **Only when types are known** checkbox if you want the inspection check\nthe types collected from runtime or inferred."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTupleItemAssignmentInspection",
- "shortDescription": {
- "text": "Tuple item assignment is prohibited"
- },
- "fullDescription": {
- "text": "Reports assignments to a tuple item. t = ('red', 'blue', 'green', 'white')\nt[3] = 'black'\n A quick-fix offers to replace the tuple with a list.",
- "markdown": "Reports assignments to a tuple item.\n\n```\nt = ('red', 'blue', 'green', 'white')\nt[3] = 'black'\n```\n\nA quick-fix offers to replace the tuple with a list."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoUnresolvedUrlInspection",
- "shortDescription": {
- "text": "Django {% url %} tag arguments are unresolved"
- },
- "fullDescription": {
- "text": "Reports a missing url in the 'url' tag. Example: {% url 'url_name' %}\n The IDE shows a warning if 'url_name' is not defined in the 'urls' file.",
- "markdown": "Reports a missing url in the `url` tag.\n\n**Example:**\n\n```\n{% url 'url_name' %}\n```\n\nThe IDE shows a warning if `url_name` is not defined in the `urls` file."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoUnresolvedStaticReferenceInspection",
- "shortDescription": {
- "text": "Unresolved static reference"
- },
- "fullDescription": {
- "text": "Reports unresolved references to static resources. Example: {% load staticfiles %}\n\n In this example, 'style.css' is highlighted if there is no such a file in the 'static/poll' directory.",
- "markdown": "Reports unresolved references to static resources.\n\n**Example:**\n\n```\n{% load staticfiles %}\n\n```\n\nIn this example, `style.css` is highlighted if there is no such a file in the `static/poll`\ndirectory."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyInitNewSignatureInspection",
- "shortDescription": {
- "text": "Incompatible signatures of __new__ and __init__"
- },
- "fullDescription": {
- "text": "Reports incompatible signatures of the '__new__' and '__init__' methods. Example: class MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass\n If the '__new__' and '__init__' have different arguments, then the 'MyClass' cannot be instantiated. As a fix, the IDE offers to apply the Change Signature refactoring.",
- "markdown": "Reports incompatible signatures of the `__new__` and `__init__` methods.\n\n**Example:**\n\n```\nclass MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass\n```\n\nIf the `__new__` and `__init__` have different arguments, then the `MyClass`\ncannot be instantiated.\n\nAs a fix, the IDE offers to apply the Change Signature refactoring."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyDunderSlotsInspection",
- "shortDescription": {
- "text": "Invalid usages of classes with '__slots__' definitions"
- },
- "fullDescription": {
- "text": "Reports invalid usages of a class with '__slots__' definitions. Example: class Foo:\n __slots__ = ['foo', 'bar']\n\n\nfoo = Foo()\nfoo.baz = 'spam'",
- "markdown": "Reports invalid usages of a class with `__slots__` definitions.\n\n**Example:**\n\n```\nclass Foo:\n __slots__ = ['foo', 'bar']\n\n\nfoo = Foo()\nfoo.baz = 'spam'\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "EndBlockNamesInspection",
- "shortDescription": {
- "text": "Django endblock name doesn't match the block name"
- },
- "fullDescription": {
- "text": "Reports incorrect names of the closing blocks. Example: {% block my_block %}\n {% endblock not_correct %}",
- "markdown": "Reports incorrect names of the closing blocks.\n\n**Example:**\n\n```\n {% block my_block %}\n {% endblock not_correct %}\n```"
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyDefaultArgumentInspection",
- "shortDescription": {
- "text": "The default argument is mutable"
- },
- "fullDescription": {
- "text": "Reports a problem when a mutable value as a list or dictionary is detected in a default value for an argument. Default argument values are evaluated only once at function definition time, which means that modifying the default value of the argument will affect all subsequent calls of that function. Example: def func(s, cache={}):\n cache[s] = None\n When the quick-fix is applied, the code changes to: def func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None",
- "markdown": "Reports a problem when a mutable value as a list or dictionary is detected in a default value for\nan argument. \n\nDefault argument values are evaluated only once at function definition time,\nwhich means that modifying the\ndefault value of the argument will affect all subsequent calls of that function.\n\n**Example:**\n\n```\ndef func(s, cache={}):\n cache[s] = None\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndef func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMissingConstructorInspection",
- "shortDescription": {
- "text": "Missed call to '__init__' of the super class"
- },
- "fullDescription": {
- "text": "Reports cases when a call to the 'super' constructor in a class is missed. Example: class Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n pass\n The 'Pear' class should have a 'super' call in the '__init__' method. When the quick-fix is applied, the code changes to: class Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n super().__init__()",
- "markdown": "Reports cases when a call to the `super` constructor in a class is missed.\n\n**Example:**\n\n```\nclass Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n pass\n```\n\nThe `Pear` class should have a `super` call in the `__init__`\nmethod.\n\nWhen the quick-fix is applied, the code changes to:\n\n```\nclass Fruit:\n def __init__(self):\n pass\n\n\nclass Pear(Fruit):\n def __init__(self):\n super().__init__()\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyShadowingBuiltinsInspection",
- "shortDescription": {
- "text": "Shadowing built-in names"
- },
- "fullDescription": {
- "text": "Reports shadowing built-in names, such as 'len' or 'list'. Example: def len(a, b, c):\n d = a + b + c\n return d\n In this code fragment, the 'len' built-in name is used. The IDE offers to apply the Rename refactoring as a fix.",
- "markdown": "Reports shadowing built-in names, such as `len` or `list`.\n\n**Example:**\n\n```\ndef len(a, b, c):\n d = a + b + c\n return d\n```\n\nIn this code fragment, the `len` built-in name is used. The IDE offers to\napply the Rename refactoring as a fix."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PySimplifyBooleanCheckInspection",
- "shortDescription": {
- "text": "Redundant boolean variable check"
- },
- "fullDescription": {
- "text": "Reports equality comparison with a boolean literal. Example: def func(s):\n if s.isdigit() == True:\n return int(s)\n With the quick-fix applied, the code fragment will be simplified to: def func(s):\n if s.isdigit():\n return int(s)",
- "markdown": "Reports equality comparison with a boolean literal.\n\n**Example:**\n\n```\ndef func(s):\n if s.isdigit() == True:\n return int(s)\n```\n\nWith the quick-fix applied, the code fragment will be simplified to:\n\n```\ndef func(s):\n if s.isdigit():\n return int(s)\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMethodOverridingInspection",
- "shortDescription": {
- "text": "Method signature does not match signature of overridden method"
- },
- "fullDescription": {
- "text": "Reports inconsistencies in overriding method signatures. Example: class Book:\n def add_title(self):\n pass\n\n\nclass Novel(Book):\n def add_title(self, text):\n pass\n Parameters of the 'add_title' method in the 'Novel' class do not match the method signature specified in the 'Book' class. As a fix, the IDE offers to apply the Change Signature refactoring.",
- "markdown": "Reports inconsistencies in overriding method signatures.\n\n**Example:**\n\n```\nclass Book:\n def add_title(self):\n pass\n\n\nclass Novel(Book):\n def add_title(self, text):\n pass\n```\n\nParameters of the `add_title` method in the `Novel` class do not match the method\nsignature specified in the `Book` class. As a fix, the IDE offers to apply the Change Signature\nrefactoring."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTestParametrizedInspection",
- "shortDescription": {
- "text": "Incorrect arguments in @pytest.mark.parametrize"
- },
- "fullDescription": {
- "text": "Reports functions that are decorated with @pytest.mark.parametrize but do not have arguments to accept parameters of the decorator.",
- "markdown": "Reports functions that are decorated with [@pytest.mark.parametrize](https://docs.pytest.org/en/stable/parametrize.html) but do not have arguments to accept\nparameters of the decorator."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyDecoratorInspection",
- "shortDescription": {
- "text": "Class-specific decorator is used outside the class"
- },
- "fullDescription": {
- "text": "Reports usages of '@classmethod' or '@staticmethod' decorators in methods outside a class. Example: class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n@classmethod\ndef change_state(self):\n pass\n The 'change_state' method should not use the '@classmethod' decorator or it should be moved to the 'State' class declaration. If you apply the 'Remove decorator' action, the code changes to: class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\ndef change_state(self):\n pass",
- "markdown": "Reports usages of `@classmethod` or `@staticmethod` decorators\nin methods outside a class.\n\n**Example:**\n\n```\nclass State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n@classmethod\ndef change_state(self):\n pass\n```\n\nThe `change_state` method should not use the `@classmethod` decorator or it should be\nmoved to the `State` class declaration.\n\nIf you apply the `Remove decorator` action, the code changes to:\n\n```\nclass State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\ndef change_state(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyAsyncCallInspection",
- "shortDescription": {
- "text": "Missing `await` syntax in coroutine calls"
- },
- "fullDescription": {
- "text": "Reports coroutines that were called without using the 'await' syntax. Example: async def bar():\n pass\n\n\nasync def foo():\n bar()\n After the quick-fix is applied, the code changes to: async def bar():\n pass\n\n\nasync def foo():\n await bar()",
- "markdown": "Reports coroutines that were called\nwithout using the `await` syntax.\n\n**Example:**\n\n```\nasync def bar():\n pass\n\n\nasync def foo():\n bar()\n```\n\nAfter the quick-fix is applied, the code changes to:\n\n```\nasync def bar():\n pass\n\n\nasync def foo():\n await bar()\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "CommandLineInspection",
- "shortDescription": {
- "text": "Incorrect CLI syntax"
- },
- "fullDescription": {
- "text": "Reports the problems if the arguments of the command you type in the console are not in the proper order. The inspection also verifies that option names and arguments are correct. Do not disable the inspection if you are going to use command-line interfaces like manage.py in Django.",
- "markdown": "Reports the problems if the arguments of the command you type in the console are not in the proper order. The inspection also verifies\nthat option names and arguments are correct.\n\nDo not disable the inspection if you are going to use command-line interfaces like [manage.py in Django](https://www.jetbrains.com/help/pycharm/running-manage-py.html)."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyComparisonWithNoneInspection",
- "shortDescription": {
- "text": "Using equality operators to compare with None"
- },
- "fullDescription": {
- "text": "Reports comparisons with 'None'. That type of comparisons should always be done with 'is' or 'is not', never the equality operators. Example: a = 2\n\n\nif a == None:\n print(\"Success\")\n Once the quick-fix is applied, the code changes to: a = 2\n\n\nif a is None:\n print(\"Success\")",
- "markdown": "Reports comparisons with `None`. That type of comparisons\nshould always be done with `is` or `is not`, never\nthe equality operators.\n\n**Example:**\n\n```\na = 2\n\n\nif a == None:\n print(\"Success\")\n```\n\nOnce the quick-fix is applied, the code changes to:\n\n```\na = 2\n\n\nif a is None:\n print(\"Success\")\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyCallingNonCallableInspection",
- "shortDescription": {
- "text": "Attempt to call a non-callable object"
- },
- "fullDescription": {
- "text": "Reports a problem when you are trying to call objects that are not callable, like, for example, properties: class Record:\n @property\n def as_json(self):\n\njson = Record().as_json()",
- "markdown": "Reports a problem when you are trying\nto call objects that are not callable, like, for example, properties:\n\n```\nclass Record:\n @property\n def as_json(self):\n\njson = Record().as_json()\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyUnreachableCodeInspection",
- "shortDescription": {
- "text": "Unreachable code"
- },
- "fullDescription": {
- "text": "Reports code fragments that cannot be normally reached. Example: if True:\n print('Yes')\nelse:\n print('No')\n As a fix, you might want to check and modify the algorithm to ensure it implements the expected logic.",
- "markdown": "Reports code fragments that cannot be normally reached.\n\n**Example:**\n\n```\nif True:\n print('Yes')\nelse:\n print('No')\n```\n\nAs a fix, you might want to check and modify the algorithm to ensure it implements\nthe expected logic."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMethodParametersInspection",
- "shortDescription": {
- "text": "Improper first parameter"
- },
- "fullDescription": {
- "text": "Reports methods that lack the first parameter that is usually named 'self'. Example: class Movie:\n\n def show():\n pass\n When the quick-fix is applied, the code changes to: class Movie:\n\n def show(self):\n pass\n The inspection also reports naming issues in class methods. Example: class Movie:\n @classmethod\n def show(abc):\n pass\n Since the first parameter of a class method should be 'cls', the IDE provides a quick-fix to rename it.",
- "markdown": "Reports methods that lack the first parameter that is usually\nnamed `self`.\n\n**Example:**\n\n```\nclass Movie:\n\n def show():\n pass\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\nclass Movie:\n\n def show(self):\n pass\n```\n\nThe inspection also reports naming issues in class methods.\n\n**Example:**\n\n```\nclass Movie:\n @classmethod\n def show(abc):\n pass\n```\n\nSince the first parameter of a class method should be `cls`, the IDE provides a quick-fix\nto rename it."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyChainedComparisonsInspection",
- "shortDescription": {
- "text": "Too complex chained comparisons"
- },
- "fullDescription": {
- "text": "Reports chained comparisons that can be simplified. Example: 'def do_comparison(x):\n xmin = 10\n xmax = 100\n if x >= xmin and x <= xmax:\n pass' The IDE offers to simplify 'if x >= xmin and x <= xmax'. When the quick-fix is applied, the code changes to: 'def do_comparison(x):\n xmin = 10\n xmax = 100\n if xmin <= x <= xmax:\n pass'",
- "markdown": "Reports chained comparisons that can be simplified.\n\n**Example:**\n\n\n def do_comparison(x):\n xmin = 10\n xmax = 100\n if x >= xmin and x <= xmax:\n pass\n\nThe IDE offers to simplify `if x >= xmin and x <= xmax`.\nWhen the quick-fix is applied, the code changes to:\n\n\n def do_comparison(x):\n xmin = 10\n xmax = 100\n if xmin <= x <= xmax:\n pass\n"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyDocstringTypesInspection",
- "shortDescription": {
- "text": "Type in docstring does not match inferred type"
- },
- "fullDescription": {
- "text": "Reports types in docstring that do not match dynamically inferred types.",
- "markdown": "Reports types in docstring that do not match dynamically inferred types."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoBrokenLineCommentInspection",
- "shortDescription": {
- "text": "Broken line comment"
- },
- "fullDescription": {
- "text": "Reports '#}' line comment ends in Django templates that do not have a matching line comment start. Example: comment #}\n The IDE highlights '#}' as it requires the corresponding '{#' token.",
- "markdown": "Reports `#}` line comment ends in Django templates that do not have a\nmatching line comment start.\n\n**Example:**\n\n```\ncomment #}\n```\n\nThe IDE highlights `#}` as it requires the corresponding `{#` token."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyCompatibilityInspection",
- "shortDescription": {
- "text": "Code is incompatible with specific Python versions"
- },
- "fullDescription": {
- "text": "Reports incompatibility with the specified versions of Python. Enable this inspection if you need your code to be compatible with a range of Python versions, for example, if you are building a library. To define the range of the inspected Python versions, select the corresponding checkboxes in the Options section. For more information about the Python versions supported by the IDE, see the web help.",
- "markdown": "Reports incompatibility with the specified versions of Python.\nEnable this inspection if you need your code to be compatible with a range of Python versions, for example,\nif you are building a library.\n\nTo define the range of the inspected Python versions, select the corresponding checkboxes in the **Options**\nsection.\n\nFor more information about the Python versions supported by the IDE, see the\n[web help](https://www.jetbrains.com/help/pycharm/python.html#support)."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyGlobalUndefinedInspection",
- "shortDescription": {
- "text": "Global variable is not defined at the module level"
- },
- "fullDescription": {
- "text": "Reports problems when a variable defined through the 'global' statement is not defined in the module scope. Example: def foo():\n global bar\n print(bar)\n\nfoo()\n As a fix, you can move the global variable declaration: global bar\n\n\ndef foo():\n print(bar)",
- "markdown": "Reports problems when a variable defined through the `global`\nstatement is not defined in the module scope.\n\n**Example:**\n\n```\ndef foo():\n global bar\n print(bar)\n\nfoo()\n```\n\nAs a fix, you can move the global variable declaration:\n\n```\nglobal bar\n\n\ndef foo():\n print(bar)\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMethodFirstArgAssignmentInspection",
- "shortDescription": {
- "text": "First argument of the method is reassigned"
- },
- "fullDescription": {
- "text": "Reports cases when the first parameter, such as 'self' or 'cls', is reassigned in a method. Because in most cases, there are no objectives in such reassignment, the IDE indicates an error. Example: class Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self\n As a fix, you might want to check and modify the algorithm to ensure that reassignment is needed. If everything is correct, you can invoke intention actions for this code and opt to ignore the warning.",
- "markdown": "Reports cases when the first parameter,\nsuch as `self` or `cls`, is reassigned in a method.\nBecause in most cases, there are no objectives in such reassignment, the\nIDE indicates an error.\n\n**Example:**\n\n```\nclass Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self\n```\n\nAs a fix, you might want to check and modify the algorithm to ensure that reassignment is needed. If everything is correct,\nyou can invoke intention actions for this code and opt to ignore the warning."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyProtocolInspection",
- "shortDescription": {
- "text": "Invalid protocol definitions and usages"
- },
- "fullDescription": {
- "text": "Reports invalid definitions and usages of protocols introduced in PEP-544. Example: from typing import Protocol\n\n\nclass MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\nclass MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\nclass MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass",
- "markdown": "Reports invalid definitions and usages of protocols introduced in\n[PEP-544](https://www.python.org/dev/peps/pep-0544/).\n\n**Example:**\n\n```\nfrom typing import Protocol\n\n\nclass MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\nclass MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\nclass MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass\n\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTypeHintsInspection",
- "shortDescription": {
- "text": "Invalid type hints definitions and usages"
- },
- "fullDescription": {
- "text": "Reports invalid usages of type hints. Example: from typing import TypeVar\n\nT0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\ndef b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\ndef c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass\n Available quick-fixes offer various actions. You can rename, remove, or move problematic elements. You can also manually modify type declarations to ensure no warning is shown.",
- "markdown": "Reports invalid usages of type hints.\n\n**Example:**\n\n```\nfrom typing import TypeVar\n\nT0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\ndef b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\ndef c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass\n```\n\nAvailable quick-fixes offer various actions. You can rename, remove, or move problematic elements. You can also manually modify type declarations to ensure no warning is shown."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMethodMayBeStaticInspection",
- "shortDescription": {
- "text": "Method is not declared static"
- },
- "fullDescription": {
- "text": "Reports any methods that do not require a class instance creation and can be made static. Example: class MyClass(object):\n def my_method(self, x):\n print(x)\n If a Make function from method quick-fix is applied, the code changes to: def my_method(x):\n print(x)\n\n\nclass MyClass(object):\n pass\n If you select the Make method static quick-fix, the '@staticmethod' decorator is added: class MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)",
- "markdown": "Reports any methods that do not require a class instance creation and can be\nmade static.\n\n**Example:**\n\n```\nclass MyClass(object):\n def my_method(self, x):\n print(x)\n```\n\nIf a **Make function from method** quick-fix is applied, the code changes to:\n\n```\ndef my_method(x):\n print(x)\n\n\nclass MyClass(object):\n pass\n```\n\nIf you select the **Make method static** quick-fix, the `@staticmethod` decorator is added:\n\n```\nclass MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTupleAssignmentBalanceInspection",
- "shortDescription": {
- "text": "Tuple assignment balance is incorrect"
- },
- "fullDescription": {
- "text": "Reports cases when the number of expressions on the right-hand side and targets on the left-hand side are not the same. Example: t = ('red', 'blue', 'green', 'white')\n(c1, c2, c3) = t\n As a quick-fix, you can modify the highlighted code fragment to restore the tuple balance.",
- "markdown": "Reports cases when the number of expressions on the right-hand side\nand targets on the left-hand side are not the same.\n\n**Example:**\n\n```\nt = ('red', 'blue', 'green', 'white')\n(c1, c2, c3) = t\n```\n\nAs a quick-fix, you can modify the highlighted code fragment to restore the tuple\nbalance."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyClassHasNoInitInspection",
- "shortDescription": {
- "text": "Class has no `__init__` method"
- },
- "fullDescription": {
- "text": "Reports cases in Python 2 when a class has no '__init__' method, neither its parent classes. Example: class Book():\n pass\n The quick-fix adds the '__init__' method: class Book():\n def __init__(self):\n pass",
- "markdown": "Reports cases in Python 2 when a class has no `__init__` method, neither its parent\nclasses.\n\n**Example:**\n\n```\nclass Book():\n pass\n```\n\nThe quick-fix adds the `__init__` method:\n\n```\nclass Book():\n def __init__(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "CythonUsageBeforeDeclarationInspection",
- "shortDescription": {
- "text": "Cython variable is used before its declaration"
- },
- "fullDescription": {
- "text": "Reports Cython variables being referenced before declaration. Example: cdef int c_x\n\nprint(c_x, c_y) # Variable 'c_y' is used before its declaration\n\ncdef int c_y = 0",
- "markdown": "Reports Cython variables being referenced before declaration.\n\n**Example:**\n\n```\ncdef int c_x\n\nprint(c_x, c_y) # Variable 'c_y' is used before its declaration\n\ncdef int c_y = 0\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyArgumentEqualDefaultInspection",
- "shortDescription": {
- "text": "The function argument is equal to the default parameter value"
- },
- "fullDescription": {
- "text": "Reports a problem when an argument passed to the function is equal to the default parameter value. This inspection is disabled by default to avoid performance degradation. Example: def my_function(a: int = 2):\n print(a)\n\n\nmy_function(2)",
- "markdown": "Reports a problem when an argument\npassed to the function is equal to the default parameter value.\n\nThis inspection is disabled by default to avoid performance degradation.\n\n**Example:**\n\n```\ndef my_function(a: int = 2):\n print(a)\n\n\nmy_function(2)\n```"
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyClassVarInspection",
- "shortDescription": {
- "text": "Invalid usage of ClassVar variables"
- },
- "fullDescription": {
- "text": "Reports invalid usages of ClassVar annotations. Example: from typing import ClassVar\n\n\nclass Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\nCat.color = \"black\" # OK\nmy_cat = Cat(5)\nmy_cat.color = \"gray\" # Error, setting class variable on instance",
- "markdown": "Reports invalid usages of [ClassVar](https://docs.python.org/3/library/typing.html#typing.ClassVar) annotations.\n\n**Example:**\n\n```\nfrom typing import ClassVar\n\n\nclass Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\nCat.color = \"black\" # OK\nmy_cat = Cat(5)\nmy_cat.color = \"gray\" # Error, setting class variable on instance\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyDictCreationInspection",
- "shortDescription": {
- "text": "Dictionary creation can be rewritten by dictionary literal"
- },
- "fullDescription": {
- "text": "Reports situations when you can rewrite dictionary creation by using a dictionary literal. This approach brings performance improvements. Example: dic = {}\ndic['var'] = 1\n When the quick-fix is applied, the code changes to: dic = {'var': 1}",
- "markdown": "Reports situations when you can rewrite dictionary creation\nby using a dictionary literal.\n\nThis approach brings performance improvements.\n\n**Example:**\n\n```\ndic = {}\ndic['var'] = 1\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndic = {'var': 1}\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyStringFormatInspection",
- "shortDescription": {
- "text": "Errors in string formatting operations"
- },
- "fullDescription": {
- "text": "Reports errors in string formatting operations. Example 1: \"Hello {1}\".format(\"people\")\n Example 2: def bar():\n return 1\n\n\n\"%s %s\" % bar()\n As a fix, you need to rewrite string formatting fragments to adhere to the formatting syntax.",
- "markdown": "Reports errors in string formatting operations.\n\n**Example 1:**\n\n```\n\"Hello {1}\".format(\"people\")\n```\n\n**Example 2:**\n\n```\ndef bar():\n return 1\n\n\n\"%s %s\" % bar()\n```\n\nAs a fix, you need to rewrite string formatting fragments to\nadhere to the [formatting syntax](https://docs.python.org/3/library/string.html#format-string-syntax)."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyExceptionInheritInspection",
- "shortDescription": {
- "text": "Exceptions do not inherit from standard 'Exception' class"
- },
- "fullDescription": {
- "text": "Reports cases when a custom exception class is raised but does not inherit from the builtin Exception class. Example: class A:\n pass\n\n\ndef me_exception():\n raise A()\n The proposed quick-fix changes the code to: class A(Exception):\n pass\n\n\ndef me_exception():\n raise A()",
- "markdown": "Reports cases when a custom exception class is\nraised but does not inherit from the\n[builtin Exception class](https://docs.python.org/3/library/exceptions.html).\n\n**Example:**\n\n```\nclass A:\n pass\n\n\ndef me_exception():\n raise A()\n```\n\nThe proposed quick-fix changes the code to:\n\n```\nclass A(Exception):\n pass\n\n\ndef me_exception():\n raise A()\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyAssignmentToLoopOrWithParameterInspection",
- "shortDescription": {
- "text": "Assignments to 'for' loop or 'with' statement parameter"
- },
- "fullDescription": {
- "text": "Reports the cases when you rewrite a loop variable with an inner loop: for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)\n It also warns you if a variable declared in the 'with' statement is redeclared inside of the statement body: with open(\"file\") as f:\n f.read()\n with open(\"file\") as f:",
- "markdown": "Reports the cases when you rewrite a loop variable with an inner loop:\n\n```\n for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)\n \n```\n\nIt also warns you if a variable declared in the `with` statement is redeclared inside of the statement body:\n\n```\n with open(\"file\") as f:\n f.read()\n with open(\"file\") as f:\n \n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoUnresolvedFilterInspection",
- "shortDescription": {
- "text": "Unresolved filter"
- },
- "fullDescription": {
- "text": "Reports unresolved filters in Django templates. Example: {{ my_value|cool_filter:\"arg\" }}",
- "markdown": "Reports unresolved filters in Django templates.\n\n**Example:**\n\n```\n {{ my_value|cool_filter:\"arg\" }}\n```"
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "AppEngineThreadsafeCGIHandlerInspection",
- "shortDescription": {
- "text": "Threadsafe cannot be enabled with the CGI handler"
- },
- "fullDescription": {
- "text": "Reports cases when threadsafe is not enabled with the CGI handler.",
- "markdown": "Reports cases when threadsafe is not enabled with the CGI handler."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Google App Engine (Python)",
- "index": 4,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoRelationInspection",
- "shortDescription": {
- "text": "Incorrect comparison expression in Django templates"
- },
- "fullDescription": {
- "text": "Reports missing whitespaces before and after comparison operators in Django templates. Example: {% if my_var==1 %}\n{% endif %}",
- "markdown": "Reports missing whitespaces before and after comparison operators in Django templates.\n\n**Example:**\n\n```\n{% if my_var==1 %}\n{% endif %}\n```"
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoUnresolvedTagInspection",
- "shortDescription": {
- "text": "Unresolved tag"
- },
- "fullDescription": {
- "text": "Reports unresolved tags in Django templates. Example:
{{ question.question_text }}
\n\n The IDE highlights ''. You can either remove the tag or apply the quick-fix to add '' to custom HTML tags.",
- "markdown": "Reports unresolved tags in Django templates.\n\n**Example:**\n\n```\n
{{ question.question_text }}
\n\n```\n\nThe IDE highlights ``. You can either remove the tag or apply the quick-fix to\nadd `` to custom HTML tags."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyFromFutureImportInspection",
- "shortDescription": {
- "text": "Improper position of from __future__ import"
- },
- "fullDescription": {
- "text": "Reports 'from __future__ import' statements that are used not at the beginning of a file. Example: a = 1\nfrom __future__ import print_function\nprint()\n When the quick-fix is applied, the code changes to: from __future__ import print_function\n\na = 1\nprint()",
- "markdown": "Reports `from __future__ import`\nstatements that are used not at\nthe beginning of a file.\n\n**Example:**\n\n```\na = 1\nfrom __future__ import print_function\nprint()\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\nfrom __future__ import print_function\n\na = 1\nprint()\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyUnresolvedReferencesInspection",
- "shortDescription": {
- "text": "Unresolved references"
- },
- "fullDescription": {
- "text": "Reports references in your code that cannot be resolved. In a dynamically typed language, this is possible in a limited number of cases. If a reference type is unknown, then its attributes are not highlighted as unresolved even if you know that they should be: def print_string(s):\n print(s.abc())\n In this code fragment 's' is always a string and 'abc' should be highlighted as unresolved. However, 's' type is inferred as 'Any' and no warning is reported. The IDE provides quick-fix actions to add missing references on-the-fly.",
- "markdown": "Reports references in your code that cannot be resolved.\n\nIn a dynamically typed language, this is possible in a limited number of cases.\n\nIf a reference type is unknown, then its attributes are not highlighted as unresolved even if you know that they should be:\n\n```\ndef print_string(s):\n print(s.abc())\n```\n\nIn this code fragment `s` is always a string and `abc` should be highlighted as unresolved. However, `s`\ntype is inferred as `Any` and no warning is reported.\n\nThe IDE provides quick-fix actions to add missing references on-the-fly."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PySuperArgumentsInspection",
- "shortDescription": {
- "text": "Wrong arguments to call super"
- },
- "fullDescription": {
- "text": "Reports cases when any call to 'super(A, B)' does not meet the following requirements: 'B' is an instance of 'A' 'B' a subclass of 'A' Example: class Figure:\n def color(self):\n pass\n\n\nclass Rectangle(Figure):\n def color(self):\n pass\n\n\nclass Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle\n As a fix, you can make the 'Square' an instance of the 'Rectangle' class.",
- "markdown": "Reports cases when any call to `super(A, B)` does not meet the\nfollowing requirements:\n\n* `B` is an instance of `A`\n* `B` a subclass of `A`\n\n**Example:**\n\n```\nclass Figure:\n def color(self):\n pass\n\n\nclass Rectangle(Figure):\n def color(self):\n pass\n\n\nclass Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle\n```\n\nAs a fix, you can make the `Square` an instance of the `Rectangle` class."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyPackageRequirementsInspection",
- "shortDescription": {
- "text": "Unsatisfied package requirements"
- },
- "fullDescription": {
- "text": "Reports packages mentioned in requirements files (for example, 'requirements.txt' or 'Pipfile') but not installed, or imported but not mentioned in requirements files. The IDE shows a quick-fix banner so that you can install the missing packages in one click.",
- "markdown": "Reports packages mentioned in requirements files (for example, `requirements.txt` or `Pipfile`) but not installed,\nor imported but not mentioned in requirements files.\n\n\nThe IDE shows a quick-fix banner so that you can install the missing packages in one click."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoOrmInspection",
- "shortDescription": {
- "text": "Django ORM error"
- },
- "fullDescription": {
- "text": "Reports several methods that may not be called due to some ORM reasons. Example: class Choice:\n question = ForeignKey(Question, null=False)\n\n\nchoice_set = Question.objects.get(id=1).choice_set.remove()\n The 'remove' function can not be called if the foreign key has 'null=False'.",
- "markdown": "Reports several methods that may not be called due to some ORM reasons.\n\n**Example:**\n\n```\nclass Choice:\n question = ForeignKey(Question, null=False)\n\n\nchoice_set = Question.objects.get(id=1).choice_set.remove()\n```\n\nThe `remove` function can not be called if the foreign key has `null=False`."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoUnresolvedTemplateReferenceInspection",
- "shortDescription": {
- "text": "Unresolved template reference"
- },
- "fullDescription": {
- "text": "Reports unresolved file references in string literals of 'extends'> and 'include'> Django tags. Example: {% extends \"../DjangoApp/templatetags/base.html\"%}\n In this example, the 'base.html' tag is highlighted, because it is not available in the specified location.",
- "markdown": "Reports unresolved file references in string literals of\n`extends`\\> and `include`\\> Django tags.\n\n**Example:**\n\n```\n{% extends \"../DjangoApp/templatetags/base.html\"%}\n```\n\nIn this example, the `base.html` tag is highlighted, because it is not available in the\nspecified location."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyNonAsciiCharInspection",
- "shortDescription": {
- "text": "File contains non-ASCII character"
- },
- "fullDescription": {
- "text": "Reports cases in Python 2 when a file contains non-ASCII characters and does not have an encoding declaration at the top. Example: class A(object):\n# №5\n def __init__(self):\n pass\n In this example, the IDE reports a non-ASCII symbol in a comment and a lack of encoding declaration. Apply the proposed quick-fix to add a missing encoding declaration: # coding=utf-8\nclass A(object)\n# №5\n def __init__(self):\n pass",
- "markdown": "Reports cases in Python 2 when a file contains non-ASCII characters and does not\nhave an encoding declaration at the top.\n\n**Example:**\n\n```\nclass A(object):\n# №5\n def __init__(self):\n pass\n```\n\nIn this example, the IDE reports a non-ASCII symbol in a comment and a lack of encoding\ndeclaration. Apply the proposed quick-fix to add a missing encoding declaration:\n\n```\n# coding=utf-8\nclass A(object)\n# №5\n def __init__(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "Restricted_Python_calls",
- "shortDescription": {
- "text": "Feature is not supported in the App Engine sandbox"
- },
- "fullDescription": {
- "text": "Reports usages of Python features that are restricted by the Google App Engine sandbox and will cause a failure on the production server.",
- "markdown": "Reports usages of Python features that are restricted by the Google App\nEngine sandbox and will cause a failure on the production server."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Google App Engine (Python)",
- "index": 4,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyRedundantParenthesesInspection",
- "shortDescription": {
- "text": "Redundant parentheses"
- },
- "fullDescription": {
- "text": "Reports about redundant parentheses in expressions. The IDE provides the quick-fix action to remove the redundant parentheses.",
- "markdown": "Reports about redundant parentheses in expressions.\n\nThe IDE provides the quick-fix action to remove the redundant parentheses."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTrailingSemicolonInspection",
- "shortDescription": {
- "text": "Prohibited trailing semicolon in a statement"
- },
- "fullDescription": {
- "text": "Reports trailing semicolons in statements. Example: def my_func(a):\n c = a ** 2;\n return c\n IDE provides a quick-fix that removes a trailing semicolon. When you apply it, the code changes to: def my_func(a):\n c = a ** 2\n return c",
- "markdown": "Reports trailing semicolons in statements.\n\n**Example:**\n\n```\ndef my_func(a):\n c = a ** 2;\n return c\n```\n\nIDE provides a quick-fix that removes a trailing semicolon. When you\napply it, the code changes to:\n\n```\ndef my_func(a):\n c = a ** 2\n return c\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyOldStyleClassesInspection",
- "shortDescription": {
- "text": "Old-style class contains new-style class features"
- },
- "fullDescription": {
- "text": "Reports occurrences of new-style class features in old-style classes. The inspection highlights '__slots__', '__getattribute__', and 'super()' inside old-style classes.",
- "markdown": "Reports occurrences of\n[new-style class features](https://www.python.org/doc/newstyle/)\nin old-style classes. The inspection highlights\n`__slots__`, `__getattribute__`, and `super()`\ninside old-style classes."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyAbstractClassInspection",
- "shortDescription": {
- "text": "Class must implement all abstract methods"
- },
- "fullDescription": {
- "text": "Reports cases when not all abstract properties or methods are defined in a subclass. Example: from abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure):\n def do_triangle(self):\n pass\n When the quick-fix is applied, the IDE implements an abstract method for the 'Triangle' class: from abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass",
- "markdown": "Reports cases when not all abstract properties or methods are defined in\na subclass.\n\n**Example:**\n\n```\nfrom abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure):\n def do_triangle(self):\n pass\n```\n\nWhen the quick-fix is applied, the IDE implements an abstract method for the `Triangle` class:\n\n```\nfrom abc import abstractmethod, ABC\n\n\nclass Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\nclass Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoIncompatibleInspection",
- "shortDescription": {
- "text": "Incompatible code in Django templates"
- },
- "fullDescription": {
- "text": "Reports features that are not available in the current Django version. Example: {% if my_var is True %}\n{% endif %}\n Available since 1.10. The IDE shows warning when discovered in the earlier versions.",
- "markdown": "Reports features that are not available in the current Django version.\n\n**Example:**\n\n```\n{% if my_var is True %}\n{% endif %}\n```\n\nAvailable since 1.10. The IDE shows warning when discovered in the earlier versions."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "ExtendsTagPositionInspection",
- "shortDescription": {
- "text": "Misplaced {% extends %} tag"
- },
- "fullDescription": {
- "text": "Reports the '{% extends %}' tag that is not the first tag in a Django template. Example: {% load my_custom_tags %}\n{% extends \"../DjangoApp/templatetags/my_custom_tags.py\"%}\n In this example, the '{% extends %}' tag is highlighted, because it should be placed before the '{% load %}' tag.",
- "markdown": "Reports the `{% extends %}` tag that is not the first tag in a\nDjango template.\n\n**Example:**\n\n```\n{% load my_custom_tags %}\n{% extends \"../DjangoApp/templatetags/my_custom_tags.py\"%}\n```\n\nIn this example, the `{% extends %}` tag is highlighted, because it should be placed before\nthe `{% load %}` tag."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyArgumentListInspection",
- "shortDescription": {
- "text": "Incorrect call arguments"
- },
- "fullDescription": {
- "text": "Reports discrepancies between declared parameters and actual arguments, as well as incorrect arguments, for example, duplicate named arguments, and incorrect argument order. Example: class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__() # unfilled parameter\nbar(5, \"#\") # unexpected argument\n The correct code fragment looks at follows: class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__(5)\nbar(5, p2=\"#\")",
- "markdown": "Reports discrepancies between declared parameters and actual arguments, as well as\nincorrect arguments, for example, duplicate named arguments, and incorrect argument order.\n\n**Example:**\n\n```\nclass Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__() # unfilled parameter\nbar(5, \"#\") # unexpected argument\n```\n\nThe correct code fragment looks at follows:\n\n```\nclass Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\nbar = Foo()\nbar.__call__(5)\nbar(5, p2=\"#\")\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "Query_bound_parameters",
- "shortDescription": {
- "text": "Query does not have required bound parameters"
- },
- "fullDescription": {
- "text": "Reports GQL queries with bound parameters that don't have the necessary parameters passed to the query method call.",
- "markdown": "Reports GQL queries with bound parameters that don't have the necessary\nparameters passed to the query method call."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Google App Engine (Python)",
- "index": 4,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyInterpreterInspection",
- "shortDescription": {
- "text": "An invalid interpreter"
- },
- "fullDescription": {
- "text": "Reports problems if there is no Python interpreter configured for the project or if the interpreter is invalid. Without a properly configured interpreter, you cannot execute your Python scripts and benefit from some Python code insight features. The IDE provides quick access to the interpreter settings.",
- "markdown": "Reports problems if there is no Python interpreter configured for the project or if the interpreter is invalid. Without a properly\nconfigured interpreter, you cannot execute your Python scripts and benefit from some Python code insight features.\n\nThe IDE provides quick access to the interpreter settings."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyBroadExceptionInspection",
- "shortDescription": {
- "text": "Unclear exception clauses"
- },
- "fullDescription": {
- "text": "Reports exception clauses that do not provide specific information about the problem. Example: Clauses that do not specify an exception class Clauses that are specified as 'Exception'",
- "markdown": "Reports exception clauses that do not provide specific information\nabout the problem.\n\n**Example:**\n\n* Clauses that do not specify an exception class\n* Clauses that are specified as `Exception`"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyTypeCheckerInspection",
- "shortDescription": {
- "text": "Incorrect type"
- },
- "fullDescription": {
- "text": "Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases. Types of function parameters can be specified in docstrings or in Python 3 function annotations. Example: def foo() -> int:\n return \"abc\" # Expected int, got str\n\n\na: str\na = foo() # Expected str, got int\n With the quick-fix, you can modify the problematic types: def foo() -> str:\n return \"abc\"\n\n\na: str\na = foo()",
- "markdown": "Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases.\n\nTypes of function parameters can be specified in\ndocstrings or in Python 3 function annotations.\n\n**Example:**\n\n```\ndef foo() -> int:\n return \"abc\" # Expected int, got str\n\n\na: str\na = foo() # Expected str, got int\n```\n\nWith the quick-fix, you can modify the problematic types:\n\n```\ndef foo() -> str:\n return \"abc\"\n\n\na: str\na = foo()\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyPropertyAccessInspection",
- "shortDescription": {
- "text": "Inappropriate access to properties"
- },
- "fullDescription": {
- "text": "Reports cases when properties are accessed inappropriately: Read-only properties are set Write-only properties are read Non-deletable properties are deleted Example: class MyClass:\n @property\n def read_only(self): return None\n\n def __write_only_setter(self, value): pass\n\n write_only = property(None, __write_only_setter)\n\n\na = MyClass()\na.read_only = 10 # property cannot be set\ndel a.read_only # property cannot be deleted\nprint(a.write_only) # property cannot be read",
- "markdown": "Reports cases when properties are accessed inappropriately:\n\n* Read-only properties are set\n* Write-only properties are read\n* Non-deletable properties are deleted\n\n**Example:**\n\n```\nclass MyClass:\n @property\n def read_only(self): return None\n\n def __write_only_setter(self, value): pass\n\n write_only = property(None, __write_only_setter)\n\n\na = MyClass()\na.read_only = 10 # property cannot be set\ndel a.read_only # property cannot be deleted\nprint(a.write_only) # property cannot be read\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyStubPackagesAdvertiser",
- "shortDescription": {
- "text": "Stub packages advertiser"
- },
- "fullDescription": {
- "text": "Reports availability of stub packages. Stub package is a package that contains type information for the corresponding runtime package. Using stub packages ensures better coding assistance for the corresponding python package.",
- "markdown": "Reports availability of stub packages.\n\n\n[Stub package](https://www.python.org/dev/peps/pep-0561/) is a package that contains type information for the corresponding\nruntime package.\n\nUsing stub packages ensures better coding assistance for the corresponding python package."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyByteLiteralInspection",
- "shortDescription": {
- "text": "A byte literal contains a non-ASCII character"
- },
- "fullDescription": {
- "text": "Reports characters in byte literals that are outside ASCII range. Example: 's = b'№5''",
- "markdown": "Reports characters in byte literals that are outside ASCII range.\n\n**Example:**\n`s = b'№5'`"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyRelativeImportInspection",
- "shortDescription": {
- "text": "Suspicious relative imports"
- },
- "fullDescription": {
- "text": "Reports usages of relative imports inside plain directories, for example, directories neither containing '__init__.py' nor explicitly marked as namespace packages.",
- "markdown": "Reports usages of relative imports inside plain directories, for example, directories neither containing `__init__.py` nor\nexplicitly marked as namespace packages."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyAugmentAssignmentInspection",
- "shortDescription": {
- "text": "Assignment can be replaced with augmented assignment"
- },
- "fullDescription": {
- "text": "Reports assignments that can be replaced with augmented assignments. Example: a = 23\nb = 3\na = a + b\n After the quick-fix is applied, the code changes to: a = 23\nb = 3\na += b",
- "markdown": "Reports assignments that can be replaced with augmented assignments.\n\n**Example:**\n\n```\na = 23\nb = 3\na = a + b\n```\n\nAfter the quick-fix is applied, the code changes to:\n\n```\na = 23\nb = 3\na += b\n```"
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyDeprecationInspection",
- "shortDescription": {
- "text": "Deprecated function, class, or module"
- },
- "fullDescription": {
- "text": "Reports usages of Python functions, or methods that are marked as deprecated and raise the 'DeprecationWarning' or 'PendingDeprecationWarning' warning. Also, this inspection highlights usages of 'abc.abstractstaticmethod', 'abc.abstractproperty', and 'abc.abstractclassmethod' decorators. Example: class Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\nfoo = Foo()\nprint(foo.bar)",
- "markdown": "Reports usages of Python functions, or methods that are marked as\ndeprecated and raise the `DeprecationWarning` or `PendingDeprecationWarning` warning.\n\nAlso, this inspection highlights usages of `abc.abstractstaticmethod`, `abc.abstractproperty`, and `abc.abstractclassmethod`\ndecorators.\n\n**Example:**\n\n```\nclass Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\nfoo = Foo()\nprint(foo.bar)\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyUnnecessaryBackslashInspection",
- "shortDescription": {
- "text": "Unnecessary backslash"
- },
- "fullDescription": {
- "text": "Reports backslashes in places where line continuation is implicit inside '()', '[]', and '{}'. Example: a = ('first', \\\n 'second', 'third')\n When the quick-fix is applied, the redundant backslash is deleted.",
- "markdown": "Reports backslashes in places where line continuation is implicit inside `()`,\n`[]`, and `{}`.\n\n**Example:**\n\n```\na = ('first', \\\n 'second', 'third')\n```\n\nWhen the quick-fix is applied, the redundant backslash is deleted."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyRedeclarationInspection",
- "shortDescription": {
- "text": "Redeclared names without usages"
- },
- "fullDescription": {
- "text": "Reports unconditional redeclarations of names without being used in between. Example: def x(): pass\n\n\nx = 2\n It applies to function and class declarations, and top-level assignments. When the warning is shown, you can try a recommended action, for example, you might be prompted to rename the variable.",
- "markdown": "Reports unconditional redeclarations of names without being used in between.\n\n**Example:**\n\n```\ndef x(): pass\n\n\nx = 2\n```\n\nIt applies to function and class declarations, and top-level assignments.\n\nWhen the warning is shown, you can try a recommended action, for example, you might be prompted to\nrename the variable."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyShadowingNamesInspection",
- "shortDescription": {
- "text": "Shadowing names from outer scopes"
- },
- "fullDescription": {
- "text": "Reports shadowing names defined in outer scopes. Example: def outer(p):\n def inner(p):\n pass\n As a quick-fix, the IDE offers to remove a parameter or rename it.",
- "markdown": "Reports shadowing names defined in outer scopes.\n\n**Example:**\n\n```\ndef outer(p):\n def inner(p):\n pass\n```\n\nAs a quick-fix, the IDE offers to remove a parameter or rename it."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyFinalInspection",
- "shortDescription": {
- "text": "Invalid usages of final classes, methods, and variables"
- },
- "fullDescription": {
- "text": "Reports invalid usages of final classes, methods and variables. Example: from typing import final\n\n\n@final\nclass A:\n def a_method(self):\n pass\n\n\nclass B(A):\n def a_method(self):\n pass",
- "markdown": "Reports invalid usages of final classes,\nmethods and variables.\n\n**Example:**\n\n```\nfrom typing import final\n\n\n@final\nclass A:\n def a_method(self):\n pass\n\n\nclass B(A):\n def a_method(self):\n pass\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyramidSetupInspection",
- "shortDescription": {
- "text": "Project is not installed for development"
- },
- "fullDescription": {
- "text": "Reports cases when no 'python setup.py develop' command was executed for the Pyramid project. You need to execute this command to install the newly created project for development.",
- "markdown": "Reports cases when no `python setup.py develop` command was executed for the Pyramid project.\n\nYou need to execute this command to install the newly created project for development."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Pyramid",
- "index": 28,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyProtectedMemberInspection",
- "shortDescription": {
- "text": "Accessing a protected member of a class or a module"
- },
- "fullDescription": {
- "text": "Reports cases when a protected member is accessed outside the class, a descendant of the class where it is defined, or a module. class Foo:\n def _protected_method(self):\n pass\n\n\nclass Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\nfoo = Foo()\nfoo._protected_method() # Access to a protected method",
- "markdown": "Reports cases when a protected member is accessed outside the class,\na descendant of the class where it is defined, or a module.\n\n```\nclass Foo:\n def _protected_method(self):\n pass\n\n\nclass Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\nfoo = Foo()\nfoo._protected_method() # Access to a protected method\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyStubPackagesCompatibilityInspection",
- "shortDescription": {
- "text": "Incompatible stub packages"
- },
- "fullDescription": {
- "text": "Reports stub packages that do not support the version of the corresponding runtime package. A stub package contains type information for some runtime package.",
- "markdown": "Reports stub packages that do not support the version of the corresponding runtime package.\n\nA [stub package](https://www.python.org/dev/peps/pep-0561/) contains type information for some runtime package."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DjangoCloseTagInspection",
- "shortDescription": {
- "text": "Mismatched opening and closing tags"
- },
- "fullDescription": {
- "text": "Reports cases when opening tags in Django templates are not correctly matched by closing tags. Example: {% if error_message %}
{{ error_message }}
{% endif %}\n The IDE reports an error on the 'strong' tag not being closed.",
- "markdown": "Reports cases when opening tags in Django templates are not correctly matched by closing tags.\n\n**Example:**\n\n```\n{% if error_message %}
{{ error_message }}
{% endif %}\n```\n\nThe IDE reports an error on the `strong` tag not being closed."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Django",
- "index": 15,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyUnboundLocalVariableInspection",
- "shortDescription": {
- "text": "Unbound local variables"
- },
- "fullDescription": {
- "text": "Reports local variables referenced before assignment. Example: x = 0\nif x > 10:\n b = 3\nprint(b)\n The IDE reports a problem for 'print(b)'. A possible fix is: x = 0\nif x > 10:\n b = 3\n print(b)",
- "markdown": "Reports local variables referenced before assignment.\n\n**Example:**\n\n```\nx = 0\nif x > 10:\n b = 3\nprint(b)\n```\n\nThe IDE reports a problem for `print(b)`. A possible fix is:\n\n```\nx = 0\nif x > 10:\n b = 3\n print(b)\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyNamedTupleInspection",
- "shortDescription": {
- "text": "Invalid definition of 'typing.NamedTuple'"
- },
- "fullDescription": {
- "text": "Reports invalid definition of a typing.NamedTuple. Example: import typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str\n As a fix, place the field with the default value after the fields without default values: import typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"",
- "markdown": "Reports invalid definition of a\n[typing.NamedTuple](https://docs.python.org/3/library/typing.html#typing.NamedTuple).\n\n**Example:**\n\n```\nimport typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str\n```\n\nAs a fix, place the field with the default value after the fields without default values:\n\n```\nimport typing\n\n\nclass FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PySingleQuotedDocstringInspection",
- "shortDescription": {
- "text": "Single quoted docstring"
- },
- "fullDescription": {
- "text": "Reports docstrings that do not adhere to the triple double-quoted string format. Example: def calc(self, balance=0):\n 'param: balance'\n self.balance = balance\n When the quick-fix is applied, the code changes to: def calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance",
- "markdown": "Reports docstrings that do not adhere to the triple double-quoted string format.\n\n**Example:**\n\n```\ndef calc(self, balance=0):\n 'param: balance'\n self.balance = balance\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndef calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance\n```"
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyUnusedLocalInspection",
- "shortDescription": {
- "text": "Unused local symbols"
- },
- "fullDescription": {
- "text": "Reports local variables, parameters, and functions that are locally defined, but not used name in a function.",
- "markdown": "Reports local variables, parameters, and functions that are locally defined, but not used name in a function."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyReturnFromInitInspection",
- "shortDescription": {
- "text": "__init__ method that returns a value"
- },
- "fullDescription": {
- "text": "Reports occurrences of 'return' statements with a return value inside '__init__' methods of classes. Example: class Sum:\n def __init__(self, a, b):\n self.a = a\n self.b = b\n self.sum = a + b\n return self.sum\n A constructor should not return any value. The '__init__' method should only initialize the values of instance members for news objects. As a quick-fix, the IDE offers to remove the 'return' statement.",
- "markdown": "Reports occurrences of `return` statements with a return value inside\n`__init__` methods of classes.\n\n**Example:**\n\n```\nclass Sum:\n def __init__(self, a, b):\n self.a = a\n self.b = b\n self.sum = a + b\n return self.sum\n```\n\nA constructor should not return any value. The `__init__` method should\nonly initialize the values of instance members for news objects.\n\nAs a quick-fix, the IDE offers to remove the `return` statement."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyNestedDecoratorsInspection",
- "shortDescription": {
- "text": "Problematic nesting of decorators"
- },
- "fullDescription": {
- "text": "Reports problems with nesting decorators. The inspection highlights the cases when 'classmethod' or 'staticmethod' is applied before another decorator. Example: def innocent(f):\n return f\n\n\nclass A:\n @innocent # Decorator will not receive a callable it may expect\n @classmethod\n def f2(cls):\n pass\n\n @innocent # Decorator will not receive a callable it may expect\n @staticmethod\n def f1():\n pass\n As a quick-fix, the IDE offers to remove the decorator.",
- "markdown": "Reports problems with nesting decorators. The inspection highlights the cases when `classmethod` or `staticmethod`\nis applied before another decorator.\n\n**Example:**\n\n```\ndef innocent(f):\n return f\n\n\nclass A:\n @innocent # Decorator will not receive a callable it may expect\n @classmethod\n def f2(cls):\n pass\n\n @innocent # Decorator will not receive a callable it may expect\n @staticmethod\n def f1():\n pass\n```\n\nAs a quick-fix, the IDE offers to remove the decorator."
- },
- "defaultConfiguration": {
- "enabled": true,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "Query_restricted",
- "shortDescription": {
- "text": "Query does not comply with the query restrictions"
- },
- "fullDescription": {
- "text": "Reports GQL queries that do not comply with the restrictions for queries allowed on the Google App Engine server. See the App Engine documentation for more information.",
- "markdown": "Reports GQL queries that do not comply with the restrictions for queries allowed\non the Google App Engine server.\nSee the [App Engine documentation](http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Restrictions_on_Queries) for more information."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "warning",
- "parameters": {
- "ideaSeverity": "WARNING",
- "qodanaSeverity": "High"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Google App Engine (Python)",
- "index": 4,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "PyMissingOrEmptyDocstringInspection",
- "shortDescription": {
- "text": "Missing or empty docstring"
- },
- "fullDescription": {
- "text": "Reports missing and empty docstrings. Example of a missing docstring def demo(a):\n c = a ** 2\n Example of an empty docstring def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2\n When the quick-fix is applied, the code fragments change to: def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2\n You need to provide some details about the parameter in the generated template.",
- "markdown": "Reports missing and empty docstrings.\n\n**Example of a missing docstring**\n\n```\ndef demo(a):\n c = a ** 2\n```\n\n**Example of an empty docstring**\n\n```\ndef demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2\n```\n\nWhen the quick-fix is applied, the code fragments change to:\n\n```\ndef demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2\n```\n\nYou need to provide some details about the parameter in the generated template."
- },
- "defaultConfiguration": {
- "enabled": false,
- "level": "note",
- "parameters": {
- "ideaSeverity": "WEAK WARNING",
- "qodanaSeverity": "Moderate"
- }
- },
- "relationships": [
- {
- "target": {
- "id": "Python",
- "index": 2,
- "toolComponent": {
- "name": "QDPY"
- }
- },
- "kinds": [
- "superset"
- ]
- }
- ]
- },
- {
- "id": "DuplicatedBlockNamesInspection",
- "shortDescription": {
- "text": "Duplicated block names"
- },
- "fullDescription": {
- "text": "Reports duplicated block names in Django templates. Example: \n\n\n \n {% block title %}My amazing site{% endblock %}\n\n\n\n