diff --git a/.coveragerc b/.coveragerc
new file mode 100644
index 0000000..5b24832
--- /dev/null
+++ b/.coveragerc
@@ -0,0 +1,2 @@
+[run]
+source = inorbit_edge
diff --git a/.github/workflows/build-main.yml b/.github/workflows/build-main.yml
index d3e1d90..579594b 100644
--- a/.github/workflows/build-main.yml
+++ b/.github/workflows/build-main.yml
@@ -15,7 +15,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- python-version: [3.7, 3.8, 3.9]
+ python-version: [3.8, 3.9, 3.10, 3.11]
os: [ubuntu-latest, windows-latest, macOS-latest]
steps:
diff --git a/.gitignore b/.gitignore
index 90fbef5..9ad0ef7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,4 +102,7 @@ ENV/
.mypy_cache/
# VSCode
-.vscode
\ No newline at end of file
+.vscode
+
+# IntelliJ
+*.iml
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..2fcc1c5
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,5 @@
+# JetBrains
+misc.xml
+modules.xml
+vcs.xml
+workspace.xml
diff --git a/.teamcity/pom.xml b/.teamcity/pom.xml
deleted file mode 100644
index e425367..0000000
--- a/.teamcity/pom.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
- 4.0.0
- Developer_EdgeSdkPython Config DSL Script
- Developer_EdgeSdkPython
- Developer_EdgeSdkPython_dsl
- 1.0-SNAPSHOT
-
-
- org.jetbrains.teamcity
- configs-dsl-kotlin-parent
- 1.0-SNAPSHOT
-
-
-
-
- jetbrains-all
- https://download.jetbrains.com/teamcity-repository
-
- true
-
-
-
- teamcity-server
- https://inorbit.teamcity.com/app/dsl-plugins-repository
-
- true
-
-
-
-
-
-
- JetBrains
- https://download.jetbrains.com/teamcity-repository
-
-
-
-
- ${basedir}
-
-
- kotlin-maven-plugin
- org.jetbrains.kotlin
- ${kotlin.version}
-
-
-
-
- compile
- process-sources
-
- compile
-
-
-
- test-compile
- process-test-sources
-
- test-compile
-
-
-
-
-
- org.jetbrains.teamcity
- teamcity-configs-maven-plugin
- ${teamcity.dsl.version}
-
- kotlin
- target/generated-configs
-
-
-
-
-
-
-
- org.jetbrains.teamcity
- configs-dsl-kotlin-latest
- ${teamcity.dsl.version}
- compile
-
-
- org.jetbrains.teamcity
- configs-dsl-kotlin-plugins-latest
- 1.0-SNAPSHOT
- pom
- compile
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-jdk8
- ${kotlin.version}
- compile
-
-
- org.jetbrains.kotlin
- kotlin-script-runtime
- ${kotlin.version}
- compile
-
-
-
\ No newline at end of file
diff --git a/.teamcity/settings.kts b/.teamcity/settings.kts
deleted file mode 100644
index 1642ea0..0000000
--- a/.teamcity/settings.kts
+++ /dev/null
@@ -1,238 +0,0 @@
-import jetbrains.buildServer.configs.kotlin.*
-import jetbrains.buildServer.configs.kotlin.buildFeatures.PullRequests
-import jetbrains.buildServer.configs.kotlin.buildFeatures.commitStatusPublisher
-import jetbrains.buildServer.configs.kotlin.buildFeatures.pullRequests
-import jetbrains.buildServer.configs.kotlin.buildSteps.python
-import jetbrains.buildServer.configs.kotlin.buildSteps.qodana
-import jetbrains.buildServer.configs.kotlin.buildSteps.script
-import jetbrains.buildServer.configs.kotlin.triggers.vcs
-
-/*
-The settings script is an entry point for defining a TeamCity
-project hierarchy. The script should contain a single call to the
-project() function with a Project instance or an init function as
-an argument.
-
-VcsRoots, BuildTypes, Templates, and subprojects can be
-registered inside the project using the vcsRoot(), buildType(),
-template(), and subProject() methods respectively.
-
-To debug settings scripts in command-line, run the
-
- mvnDebug org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate
-
-command and attach your debugger to the port 8000.
-
-To debug in IntelliJ Idea, open the 'Maven Projects' tool window (View
--> Tool Windows -> Maven Projects), find the generate task node
-(Plugins -> teamcity-configs -> teamcity-configs:generate), the
-'Debug' option is available in the context menu for the task.
-*/
-
-version = "2023.11"
-
-project {
- description = "The InOrbit Edge SDK allows Python programs to communicate with InOrbit platform on behalf of robots."
-
- buildType(QodanaQualityInspections)
- buildType(PytestPython39)
- buildType(PytestPython38)
- buildType(PytestPython310)
- buildType(PytestPython311)
-
- template(PytestRunner)
- buildTypesOrder = arrayListOf(PytestPython38, PytestPython39, PytestPython310, PytestPython311)
-}
-
-object PytestPython310 : BuildType({
- templates(PytestRunner)
- name = "Pytest Python 3.10"
- description = "Pytest runner for Python 3.10 tests."
-
- params {
- text("python.version", "3.10", label = "Python Version", description = "The version of Python to run this build with.",
- regex = """^(\d+\.)?(\d+\.)?(\*|\d+)${'$'}""", validationMessage = "Please enter a valid version number.")
- }
-})
-
-object PytestPython311 : BuildType({
- templates(PytestRunner)
- name = "Pytest Python 3.11"
- description = "Pytest runner for Python 3.11 tests."
-
- params {
- text("python.version", "3.11", label = "Python Version", description = "The version of Python to run this build with.",
- regex = """^(\d+\.)?(\d+\.)?(\*|\d+)${'$'}""", validationMessage = "Please enter a valid version number.")
- }
-
- disableSettings("TRIGGER_4")
-})
-
-object PytestPython38 : BuildType({
- templates(PytestRunner)
- name = "Pytest Python 3.8"
- description = "Pytest runner for Python 3.8 tests."
-
- params {
- text("python.version", "3.8", label = "Python Version", description = "The version of Python to run this build with.",
- regex = """^(\d+\.)?(\d+\.)?(\*|\d+)${'$'}""", validationMessage = "Please enter a valid version number.")
- }
-})
-
-object PytestPython39 : BuildType({
- templates(PytestRunner)
- name = "Pytest Python 3.9"
- description = "Pytest runner for Python 3.9 tests."
-
- params {
- text("python.version", "3.9", label = "Python Version", description = "The version of Python to run this build with.",
- regex = """^(\d+\.)?(\d+\.)?(\*|\d+)${'$'}""", validationMessage = "Please enter a valid version number.")
- }
-})
-
-object QodanaQualityInspections : BuildType({
- name = "Qodana Quality Inspections"
- description = "Qodana based code quality inpsections."
-
- params {
- password("system.qodana.developer-portal.edge-python-sdk.token", "credentialsJSON:d06aadf5-c6ee-4c2e-be77-c3395f5e5ad2", label = "Qodana Token", description = "The token for the build's Qodana project.", display = ParameterDisplay.HIDDEN, readOnly = true)
- }
-
- vcs {
- root(DslContext.settingsRoot)
- }
-
- steps {
- qodana {
- name = "Qodana"
- id = "Qodana"
- linter = python {
- }
- additionalQodanaArguments = "--baseline qodana.sarif.json"
- cloudToken = "credentialsJSON:7e58a4e2-e74e-4cc1-9668-de4ea5117706"
- }
- }
-
- triggers {
- vcs {
- branchFilter = "+:"
- }
- }
-
- features {
- pullRequests {
- vcsRootExtId = "${DslContext.settingsRoot.id}"
- provider = github {
- authType = token {
- token = "credentialsJSON:dfcd12f5-cec7-45dc-a612-43d2e7f70f5b"
- }
- filterTargetBranch = "+:refs/heads/main"
- filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
- }
- }
- commitStatusPublisher {
- vcsRootExtId = "${DslContext.settingsRoot.id}"
- publisher = github {
- githubUrl = "https://api.github.com"
- authType = personalToken {
- token = "credentialsJSON:dfcd12f5-cec7-45dc-a612-43d2e7f70f5b"
- }
- }
- }
- }
-})
-
-object PytestRunner : Template({
- name = "Pytest Runner"
- description = "Generic runner for Pytest."
-
- allowExternalStatus = true
-
- params {
- text("python.version", "", label = "Python Version", description = "The version of Python to run this build with.",
- regex = """^(\d+\.)?(\d+\.)?(\*|\d+)${'$'}""", validationMessage = "Please enter a valid version number.")
- }
-
- vcs {
- root(DslContext.settingsRoot)
-
- cleanCheckout = true
- branchFilter = ""
- }
-
- steps {
- script {
- name = "Update and Setup"
- id = "Update_and_Setup"
- scriptContent = """
- sudo add-apt-repository ppa:deadsnakes/ppa
- sudo apt-get update
-
- sudo apt-get install -y python%python.version% python%python.version%-distutils
-
- wget -P /tmp/ https://bootstrap.pypa.io/get-pip.py
- sudo python%python.version% /tmp/get-pip.py
- """.trimIndent()
- }
- python {
- name = "Update pip"
- id = "Update_pip"
- pythonVersion = customPython {
- executable = "/usr/bin/python%python.version%"
- }
- command = custom {
- arguments = "-m pip install --upgrade pip"
- }
- }
- python {
- name = "Install pip Dependencies"
- id = "Install_pip_Dependencies"
- pythonVersion = customPython {
- executable = "/usr/bin/python%python.version%"
- }
- command = custom {
- arguments = "-m pip install .[test]"
- }
- }
- python {
- name = "Pytest Runner"
- id = "Pytest_Runner"
- pythonVersion = customPython {
- executable = "/usr/bin/python%python.version%"
- }
- command = pytest {
- isCoverageEnabled = true
- coverageArgs = "--omit=*lib* --source=inorbit_edge/"
- }
- }
- }
-
- triggers {
- vcs {
- id = "TRIGGER_6"
- triggerRules = "+:*"
- }
- }
-
- features {
- pullRequests {
- id = "BUILD_EXT_3"
- provider = github {
- authType = token {
- token = "credentialsJSON:dfcd12f5-cec7-45dc-a612-43d2e7f70f5b"
- }
- filterTargetBranch = "+:refs/heads/main"
- filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
- }
- }
- commitStatusPublisher {
- id = "BUILD_EXT_8"
- publisher = github {
- githubUrl = "https://api.github.com"
- authType = personalToken {
- token = "credentialsJSON:dfcd12f5-cec7-45dc-a612-43d2e7f70f5b"
- }
- }
- }
- }
-})
diff --git a/qodana.sarif.json b/qodana.sarif.json
new file mode 100644
index 0000000..770dd94
--- /dev/null
+++ b/qodana.sarif.json
@@ -0,0 +1,47581 @@
+{
+ "$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": "233.14241.171",
+ "rules": [],
+ "taxa": [
+ {
+ "id": "JavaScript and TypeScript",
+ "name": "JavaScript and TypeScript"
+ },
+ {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "name": "Control flow issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "EditorConfig",
+ "name": "EditorConfig"
+ },
+ {
+ "id": "Python",
+ "name": "Python"
+ },
+ {
+ "id": "Google App Engine (Python)",
+ "name": "Google App Engine (Python)"
+ },
+ {
+ "id": "PostCSS",
+ "name": "PostCSS"
+ },
+ {
+ "id": "Sass_SCSS",
+ "name": "Sass/SCSS"
+ },
+ {
+ "id": "Shell script",
+ "name": "Shell script"
+ },
+ {
+ "id": "JavaScript and TypeScript/Unit testing",
+ "name": "Unit testing",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSON and JSON5",
+ "name": "JSON and JSON5"
+ },
+ {
+ "id": "MongoJS",
+ "name": "MongoJS"
+ },
+ {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "name": "Code style issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/General",
+ "name": "General",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "MySQL",
+ "name": "MySQL"
+ },
+ {
+ "id": "Properties files",
+ "name": "Properties files"
+ },
+ {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "name": "Potentially undesirable code constructs",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Flow type checker",
+ "name": "Flow type checker",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "name": "Probable bugs",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "HTML",
+ "name": "HTML"
+ },
+ {
+ "id": "JavaScript and TypeScript/Unused symbols",
+ "name": "Unused symbols",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Data flow",
+ "name": "Data flow",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Django",
+ "name": "Django"
+ },
+ {
+ "id": "JavaScript and TypeScript/Bitwise operation issues",
+ "name": "Bitwise operation issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "name": "ES2015 migration aids",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "General",
+ "name": "General"
+ },
+ {
+ "id": "HTML/Accessibility",
+ "name": "Accessibility",
+ "relationships": [
+ {
+ "target": {
+ "id": "HTML",
+ "index": 18,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/React",
+ "name": "React",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "name": "TypeScript",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "name": "Validity issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "name": "Potentially confusing code constructs",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CSS",
+ "name": "CSS"
+ },
+ {
+ "id": "CSS/Invalid elements",
+ "name": "Invalid elements",
+ "relationships": [
+ {
+ "target": {
+ "id": "CSS",
+ "index": 30,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SQL",
+ "name": "SQL"
+ },
+ {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "name": "Try statement issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Structural search",
+ "name": "Structural search"
+ },
+ {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "name": "Function metrics",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Dependency analysis",
+ "name": "Dependency analysis"
+ },
+ {
+ "id": "YAML",
+ "name": "YAML"
+ },
+ {
+ "id": "Code Coverage",
+ "name": "Code Coverage"
+ },
+ {
+ "id": "XML",
+ "name": "XML"
+ },
+ {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "name": "Assignment issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CSS/Code style issues",
+ "name": "Code style issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "CSS",
+ "index": 30,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Less",
+ "name": "Less"
+ },
+ {
+ "id": "RegExp",
+ "name": "RegExp"
+ },
+ {
+ "id": "Vue",
+ "name": "Vue"
+ },
+ {
+ "id": "JavaScript and TypeScript/Node.js",
+ "name": "Node.js",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Ini files",
+ "name": "Ini files"
+ },
+ {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "name": "Imports and dependencies",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "RELAX NG",
+ "name": "RELAX NG"
+ },
+ {
+ "id": "CSS/Probable bugs",
+ "name": "Probable bugs",
+ "relationships": [
+ {
+ "target": {
+ "id": "CSS",
+ "index": 30,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Naming conventions",
+ "name": "Naming conventions",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "name": "Switch statement issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/DOM issues",
+ "name": "DOM issues",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Async code and promises",
+ "name": "Async code and promises",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Code quality tools",
+ "name": "Code quality tools",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Proofreading",
+ "name": "Proofreading"
+ },
+ {
+ "id": "Security",
+ "name": "Security"
+ },
+ {
+ "id": "CSS/Code quality tools",
+ "name": "Code quality tools",
+ "relationships": [
+ {
+ "target": {
+ "id": "CSS",
+ "index": 30,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PostgreSQL",
+ "name": "PostgreSQL"
+ },
+ {
+ "id": "SQL server",
+ "name": "SQL server"
+ },
+ {
+ "id": "Qodana",
+ "name": "Qodana"
+ },
+ {
+ "id": "Python/Security",
+ "name": "Security",
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JavaScript and TypeScript/Security",
+ "name": "Security",
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript",
+ "index": 0,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "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": "JavaScript",
+ "version": "233.14241",
+ "rules": [
+ {
+ "id": "ConstantConditionalExpressionJS",
+ "shortDescription": {
+ "text": "Constant conditional expression"
+ },
+ "fullDescription": {
+ "text": "Reports a conditional expression in the format 'true? result1: result2' or 'false? result1: result2. Suggests simplifying the expression.'",
+ "markdown": "Reports a conditional expression in the format `true? result1: result2` or `false? result1: result2``.\nSuggests simplifying the expression.\n`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConstantConditionalExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSTestFailedLine",
+ "shortDescription": {
+ "text": "Highlight failure line in test code"
+ },
+ "fullDescription": {
+ "text": "Reports a failed method call or an assertion in a test.",
+ "markdown": "Reports a failed method call or an assertion in a test."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSTestFailedLine",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Unit testing",
+ "index": 8,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NonBlockStatementBodyJS",
+ "shortDescription": {
+ "text": "Statement body without braces"
+ },
+ "fullDescription": {
+ "text": "Reports a 'if', 'while', 'for', or 'with' statements whose body is not a block statement. Using code block in statement bodies is usually safer for downstream maintenance.",
+ "markdown": "Reports a `if`, `while`, `for`, or `with` statements whose body is not a block statement. Using code block in statement bodies is usually safer for downstream maintenance."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NonBlockStatementBodyJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "IfStatementWithTooManyBranchesJS",
+ "shortDescription": {
+ "text": "'if' statement with too many branches"
+ },
+ "fullDescription": {
+ "text": "Reports an 'if' statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction. Use the field below to specify the maximum number of branches expected.",
+ "markdown": "Reports an `if` statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction.\n\n\nUse the field below to specify the maximum number of branches expected."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "IfStatementWithTooManyBranchesJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSValidateJSDoc",
+ "shortDescription": {
+ "text": "Syntax errors and unresolved references in JSDoc"
+ },
+ "fullDescription": {
+ "text": "Reports a syntax discrepancy in a documentation comment.",
+ "markdown": "Reports a syntax discrepancy in a documentation comment."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSValidateJSDoc",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "BreakStatementJS",
+ "shortDescription": {
+ "text": "'break' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'break' statements. Ignores 'break' statements that end case blocks.",
+ "markdown": "Reports a `break` statements. Ignores `break` statements that end case blocks."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "BreakStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FlowJSConfig",
+ "shortDescription": {
+ "text": "Missing .flowconfig"
+ },
+ "fullDescription": {
+ "text": "Reports a JavaScript file with a '@flow' flag that doesn't have an associated '.flowconfig' file in the project.",
+ "markdown": "Reports a JavaScript file with a `@flow` flag that doesn't have an associated `.flowconfig` file in the project."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FlowJSConfig",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Flow type checker",
+ "index": 16,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSPotentiallyInvalidUsageOfClassThis",
+ "shortDescription": {
+ "text": "Potentially invalid reference to 'this' of a class from closure"
+ },
+ "fullDescription": {
+ "text": "Reports an attempt to reference a member of an ECMAScript class via the 'this.' qualifier in a nested function that is not a lambda. 'this' in a nested function that is not a lambda is the function's own 'this' and doesn't relate to the outer class.",
+ "markdown": "Reports an attempt to reference a member of an ECMAScript class via the `this.` qualifier in a nested function that is not a lambda. \n`this` in a nested function that is not a lambda is the function's own `this` and doesn't relate to the outer class."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSPotentiallyInvalidUsageOfClassThis",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DebuggerStatementJS",
+ "shortDescription": {
+ "text": "'debugger' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'debugger' statement used for interaction with the Javascript debuggers. Such statements should not appear in production code.",
+ "markdown": "Reports a `debugger` statement used for interaction with the Javascript debuggers. Such statements should not appear in production code."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DebuggerStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnusedAssignment",
+ "shortDescription": {
+ "text": "Unused assignment"
+ },
+ "fullDescription": {
+ "text": "Reports a variable whose value is never used after assignment. Suggests removing the unused variable to shorten the code and to avoid redundant allocations. The following cases are reported: A variable is never read after assignment. The value of a variable is always overwritten with another assignment before the variable is read next time. The initializer of a variable is redundant (for one of the above-mentioned reasons).",
+ "markdown": "Reports a variable whose value is never used after assignment. \nSuggests removing the unused variable to shorten the code and to avoid redundant allocations.\n\nThe following cases are reported:\n\n* A variable is never read after assignment.\n* The value of a variable is always overwritten with another assignment before the variable is read next time.\n* The initializer of a variable is redundant (for one of the above-mentioned reasons)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnusedAssignment",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Unused symbols",
+ "index": 19,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FlowJSError",
+ "shortDescription": {
+ "text": "Flow type checker"
+ },
+ "fullDescription": {
+ "text": "Reports errors from Flow.",
+ "markdown": "Reports errors from [Flow](https://flowtype.org/)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "FlowJSError",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Flow type checker",
+ "index": 16,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ReuseOfLocalVariableJS",
+ "shortDescription": {
+ "text": "Reuse of local variable"
+ },
+ "fullDescription": {
+ "text": "Reports reusing a local variable and overwriting its value with a new value that is not related to the original variable usage. Reusing a local variable in this way may be confusing because the intended semantics of the local variable may vary with each usage. It may also cause bugs, if code changes result in values that were expected to be overwritten while they are actually live. It is good practices to keep variable lifetimes as short as possible, and not reuse local variables for the sake of brevity.",
+ "markdown": "Reports reusing a local variable and overwriting its value with a new value that is not related to the original variable usage. Reusing a local variable in this way may be confusing because the intended semantics of the local variable may vary with each usage. It may also cause bugs, if code changes result in values that were expected to be overwritten while they are actually live. It is good practices to keep variable lifetimes as short as possible, and not reuse local variables for the sake of brevity."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ReuseOfLocalVariableJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Data flow",
+ "index": 20,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ShiftOutOfRangeJS",
+ "shortDescription": {
+ "text": "Shift operation by possibly wrong constant"
+ },
+ "fullDescription": {
+ "text": "Reports a shift operation where the second operand is a constant outside the reasonable range, for example, an integer shift operation outside the range '0..31', shifting by negative or overly large values.",
+ "markdown": "Reports a shift operation where the second operand is a constant outside the reasonable range, for example, an integer shift operation outside the range `0..31`, shifting by negative or overly large values."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ShiftOutOfRangeJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Bitwise operation issues",
+ "index": 22,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSClosureCompilerSyntax",
+ "shortDescription": {
+ "text": "Incorrect usage of JSDoc tags"
+ },
+ "fullDescription": {
+ "text": "Reports warnings implied by Google Closure Compiler annotations including correct use of '@abstract', '@interface', and '@implements' tags.",
+ "markdown": "Reports warnings implied by *Google Closure Compiler* annotations including correct use of `@abstract`, `@interface`, and `@implements` tags."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSClosureCompilerSyntax",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnnecessaryContinueJS",
+ "shortDescription": {
+ "text": "Unnecessary 'continue' statement"
+ },
+ "fullDescription": {
+ "text": "Reports an unnecessary 'continue' statement at the end of a loop. Suggests removing such statements.",
+ "markdown": "Reports an unnecessary `continue` statement at the end of a loop. Suggests removing such statements."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnnecessaryContinueJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ConvertLetToConst",
+ "shortDescription": {
+ "text": "'let' is used instead of 'const'"
+ },
+ "fullDescription": {
+ "text": "Reports a 'let' declaration that can be made 'const'.",
+ "markdown": "Reports a `let` declaration that can be made `const`. "
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ConvertLetToConst",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSXDomNesting",
+ "shortDescription": {
+ "text": "Invalid DOM element nesting"
+ },
+ "fullDescription": {
+ "text": "Detects HTML elements in JSX files which are not nested properly according to the DOM specification. React reports runtime warnings on incorrectly nested elements.",
+ "markdown": "Detects HTML elements in JSX files which are not nested properly according to the DOM specification. React reports runtime warnings on incorrectly nested elements."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSXDomNesting",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/React",
+ "index": 26,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptValidateTypes",
+ "shortDescription": {
+ "text": "Type mismatch"
+ },
+ "fullDescription": {
+ "text": "Reports a parameter, return value, or assigned expression of incorrect type.",
+ "markdown": "Reports a parameter, return value, or assigned expression of incorrect type."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "TypeScriptValidateTypes",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "BadExpressionStatementJS",
+ "shortDescription": {
+ "text": "Expression statement which is not assignment or call"
+ },
+ "fullDescription": {
+ "text": "Reports an expression statement that is neither an assignment nor a call. Such statements usually indicate an error.",
+ "markdown": "Reports an expression statement that is neither an assignment nor a call. Such statements usually indicate an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "BadExpressionStatementJS",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ConfusingFloatingPointLiteralJS",
+ "shortDescription": {
+ "text": "Confusing floating point literal"
+ },
+ "fullDescription": {
+ "text": "Reports any floating point number that does not have a decimal point, or any numbers before the decimal point, or and numbers after the decimal point. Such literals may be confusing, and violate several coding standards.",
+ "markdown": "Reports any floating point number that does not have a decimal point, or any numbers before the decimal point, or and numbers after the decimal point. Such literals may be confusing, and violate several coding standards."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConfusingFloatingPointLiteralJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "BreakStatementWithLabelJS",
+ "shortDescription": {
+ "text": "'break' statement with label"
+ },
+ "fullDescription": {
+ "text": "Reports a labeled 'break' statement.",
+ "markdown": "Reports a labeled `break` statement."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "BreakStatementWithLabelJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ContinueOrBreakFromFinallyBlockJS",
+ "shortDescription": {
+ "text": "'continue' or 'break' inside 'finally' block"
+ },
+ "fullDescription": {
+ "text": "Reports a 'break' or 'continue' statement inside a 'finally' block. Such statements are very confusing, may hide exceptions, and complicate debugging.",
+ "markdown": "Reports a `break` or `continue` statement inside a `finally` block. Such statements are very confusing, may hide exceptions, and complicate debugging."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ContinueOrBreakFromFinallyBlockJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "StatementsPerFunctionJS",
+ "shortDescription": {
+ "text": "Overly long function"
+ },
+ "fullDescription": {
+ "text": "Reports an overly long function. Function length is calculated by counting up the number of non-empty statements in the function. Functions that are too long are error-prone and difficult to test. Use the field below to specify the maximum acceptable number of statements in a function.",
+ "markdown": "Reports an overly long function. Function length is calculated by counting up the number of non-empty statements in the function. Functions that are too long are error-prone and difficult to test.\n\n\nUse the field below to specify the maximum acceptable number of statements in a function."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FunctionTooLongJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnnecessaryLocalVariableJS",
+ "shortDescription": {
+ "text": "Redundant local variable"
+ },
+ "fullDescription": {
+ "text": "Reports an unnecessary local variable that does not make a function more comprehensible: a local variable that is immediately returned a local variable that is immediately assigned to another variable and is not used anymore a local variable that always has the same value as another local variable or parameter. Use the checkbox below to have this inspection ignore variables that are immediately returned or thrown. Some coding styles suggest using such variables for clarity and ease of debugging.",
+ "markdown": "Reports an unnecessary local variable that does not make a function more comprehensible:\n\n* a local variable that is immediately returned\n* a local variable that is immediately assigned to another variable and is not used anymore\n* a local variable that always has the same value as another local variable or parameter.\n\n\nUse the checkbox below to have this inspection ignore variables that are immediately\nreturned or thrown. Some coding styles suggest using such variables for clarity and\nease of debugging."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnnecessaryLocalVariableJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Data flow",
+ "index": 20,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSMethodCanBeStatic",
+ "shortDescription": {
+ "text": "Method can be made 'static'"
+ },
+ "fullDescription": {
+ "text": "Reports a class method that can be safely made 'static'. A method can be 'static' if it does not reference any of its class' non-static methods and non-static fields and is not overridden in a subclass. Use the first checkbox below to inspect only 'private' methods.",
+ "markdown": "Reports a class method that can be safely made `static`. A method can be `static` if it does not reference any of its class' non-static methods and non-static fields and is not overridden in a subclass.\n\n\nUse the first checkbox below to inspect only `private` methods."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSMethodCanBeStatic",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSDeclarationsAtScopeStart",
+ "shortDescription": {
+ "text": "'var' declared not at the beginning of a function"
+ },
+ "fullDescription": {
+ "text": "Checks that declarations of local variables declared with var are at the top of a function scope. By default, variable declarations are always moved (\"hoisted\") invisibly to the top of their containing scope when the code is executed. Therefore, declaring them at the top of the scope helps represent this behavior in the code.",
+ "markdown": "Checks that declarations of local variables declared with **var** are at the top of a function scope. \n\nBy default, variable declarations are always moved (\"hoisted\") invisibly to the top of their containing scope when the code is executed. Therefore, declaring them at the top of the scope helps represent this behavior in the code."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSDeclarationsAtScopeStart",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ContinueStatementWithLabelJS",
+ "shortDescription": {
+ "text": "'continue' statement with label"
+ },
+ "fullDescription": {
+ "text": "Reports a labeled 'continue' statement.",
+ "markdown": "Reports a labeled `continue` statement."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ContinueStatementWithLabelJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSObjectNullOrUndefined",
+ "shortDescription": {
+ "text": "Object is 'null' or 'undefined'"
+ },
+ "fullDescription": {
+ "text": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is 'undefined' or 'null'.",
+ "markdown": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is `undefined` or `null`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSObjectNullOrUndefined",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptMissingConfigOption",
+ "shortDescription": {
+ "text": "Missing tsconfig.json option "
+ },
+ "fullDescription": {
+ "text": "Reports a usage that requires an explicit option in 'tsconfig.json'. For example, to use JSX in '.tsx' files, 'tsconfig.json' must contain '\"jsx\"' property.",
+ "markdown": "Reports a usage that requires an explicit option in `tsconfig.json`. For example, to use JSX in `.tsx` files, `tsconfig.json` must contain `\"jsx\"` property."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TypeScriptMissingConfigOption",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSXUnresolvedComponent",
+ "shortDescription": {
+ "text": "Unresolved JSX component"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved reference to a JSX component. Suggests adding a missing import statement if the referenced component is defined in the project or its dependencies or creating a new component with this name. The template for a new component can be modified in Editor | File and Code Templates.",
+ "markdown": "Reports an unresolved reference to a JSX component. Suggests adding a missing import statement if the referenced component is defined in the project or its dependencies or creating a new component with this name.\n\nThe template for a new component can be modified in Editor \\| File and Code Templates."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSXUnresolvedComponent",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ShorthandObjectProperty",
+ "shortDescription": {
+ "text": "Property can be replaced with shorthand"
+ },
+ "fullDescription": {
+ "text": "Reports an object property that can be converted to ES6 shorthand style and provides a quick-fix to do it. Example: 'var obj = {foo:foo}' After applying the quick-fix the code looks as follows: 'var obj = {foo}'",
+ "markdown": "Reports an object property that can be converted to ES6 shorthand style and provides a quick-fix to do it.\n\nExample:\n\n\n var obj = {foo:foo}\n\nAfter applying the quick-fix the code looks as follows:\n\n\n var obj = {foo}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ShorthandObjectProperty",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnnecessaryLabelOnBreakStatementJS",
+ "shortDescription": {
+ "text": "Unnecessary label on 'break' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a labeled 'break' statement whose labels may be removed without changing the flow of control.",
+ "markdown": "Reports a labeled `break` statement whose labels may be removed without changing the flow of control."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnnecessaryLabelOnBreakStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ContinueStatementJS",
+ "shortDescription": {
+ "text": "'continue' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'continue' statement.",
+ "markdown": "Reports a `continue` statement."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ContinueStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "AssignmentToForLoopParameterJS",
+ "shortDescription": {
+ "text": "Assignment to 'for' loop parameter"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment to a variable declared as a 'for' loop parameter. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error.",
+ "markdown": "Reports an assignment to a variable declared as a `for` loop parameter. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "AssignmentToForLoopParameterJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSPotentiallyInvalidConstructorUsage",
+ "shortDescription": {
+ "text": "Potentially invalid constructor usage"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a potentially invalid constructor function, for example: a function that is not a constructor after 'new', using a constructor's prototype or calling a constructor without 'new'. A constructor function is assumed to have an upper case name (optional) or have an explicit JSDoc '@constructor' tag.",
+ "markdown": "Reports a usage of a potentially invalid constructor function, for example: a function that is not a constructor after `new`, using a constructor's prototype or calling a constructor without `new`. A constructor function is assumed to have an upper case name (optional) or have an explicit JSDoc `@constructor` tag."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSPotentiallyInvalidConstructorUsage",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PointlessArithmeticExpressionJS",
+ "shortDescription": {
+ "text": "Pointless arithmetic expression"
+ },
+ "fullDescription": {
+ "text": "Reports an arithmetic expression that include adding or subtracting zero, multiplying by zero or one, division by one, and shift by zero. Such expressions may result from not fully completed automated refactoring.",
+ "markdown": "Reports an arithmetic expression that include adding or subtracting zero, multiplying by zero or one, division by one, and shift by zero. Such expressions may result from not fully completed automated refactoring."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PointlessArithmeticExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NodeCoreCodingAssistance",
+ "shortDescription": {
+ "text": "Unresolved Node.js APIs"
+ },
+ "fullDescription": {
+ "text": "Suggests configuring coding assistance for Node.js, for example, 'require' and/or core modules ('path', 'http', 'fs', etc.). See https://nodejs.org/api/ for the complete list.",
+ "markdown": "Suggests configuring coding assistance for Node.js, for example, `require` and/or core modules ('path', 'http', 'fs', etc.).\n\n\nSee for the complete list."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NodeCoreCodingAssistance",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Node.js",
+ "index": 45,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUndeclaredVariable",
+ "shortDescription": {
+ "text": "Implicitly declared global JavaScript variable"
+ },
+ "fullDescription": {
+ "text": "Reports an implicit declaration of a global variable. Example: 'var aaa = 1; // good\n bbb = 2; // bad, if bbb is not declared with 'var' somewhere'",
+ "markdown": "Reports an implicit declaration of a global variable.\n\nExample:\n\n\n var aaa = 1; // good\n bbb = 2; // bad, if bbb is not declared with 'var' somewhere\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSUndeclaredVariable",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DivideByZeroJS",
+ "shortDescription": {
+ "text": "Division by zero"
+ },
+ "fullDescription": {
+ "text": "Reports division by zero or a remainder by zero.",
+ "markdown": "Reports division by zero or a remainder by zero."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DivideByZeroJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSPrimitiveTypeWrapperUsage",
+ "shortDescription": {
+ "text": "Primitive type object wrapper used"
+ },
+ "fullDescription": {
+ "text": "Reports an improper usage of a wrapper for primitive types or a property of a primitive type being modified, as in the latter case the assigned value will be lost.",
+ "markdown": "Reports an improper usage of a wrapper for primitive types or a property of a primitive type being modified, as in the latter case the assigned value will be lost."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSPrimitiveTypeWrapperUsage",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptSmartCast",
+ "shortDescription": {
+ "text": "Narrowed type"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a variable where the variable type is narrowed by a type guard. Note that severity level doesn't affect this inspection.",
+ "markdown": "Reports a usage of a variable where the variable type is narrowed by a type guard. Note that severity level doesn't affect this inspection."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TypeScriptSmartCast",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ConvertIndexedForToForOf",
+ "shortDescription": {
+ "text": "Indexed 'for' is used instead of 'for..of'"
+ },
+ "fullDescription": {
+ "text": "Reports an indexed 'for' loop used on an array. Suggests replacing it with a 'for..of' loop. 'for..of' loops are introduced in ECMAScript 6 and iterate over 'iterable' objects.",
+ "markdown": "Reports an indexed [for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for) loop used on an array. Suggests replacing it with a [for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop. \n`for..of` loops are introduced in ECMAScript 6 and iterate over `iterable` objects."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ConvertIndexedForToForOf",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSLastCommaInArrayLiteral",
+ "shortDescription": {
+ "text": "Unneeded last comma in array literal"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a trailing comma in an array literal. The warning is reported only when the JavaScript language version is set to ECMAScript 5.1. Although trailing commas in arrays are allowed by the specification, some browsers may throw an error when a trailing comma is used. You can configure formatting options for trailing commas in Code Style | JavaScript or TypeScript | Punctuation.",
+ "markdown": "Reports a usage of a trailing comma in an array literal.\n\nThe warning is reported only when the JavaScript language version is set to ECMAScript 5.1.\n\nAlthough trailing commas in arrays are allowed by the specification, some browsers may throw an error when a trailing comma is used.\n\nYou can configure formatting options for trailing commas in **Code Style** \\| **JavaScript** or **TypeScript** \\| **Punctuation**."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSLastCommaInArrayLiteral",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ConditionalExpressionJS",
+ "shortDescription": {
+ "text": "Conditional expression"
+ },
+ "fullDescription": {
+ "text": "Reports a ternary conditional expression. Some coding standards prohibit such expressions in favor of explicit 'if' statements.",
+ "markdown": "Reports a ternary conditional expression. Some coding standards prohibit such expressions in favor of explicit `if` statements."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConditionalExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ConvertVarToLetConst",
+ "shortDescription": {
+ "text": "'var' is used instead of 'let' or 'const'"
+ },
+ "fullDescription": {
+ "text": "Reports a 'var' declaration that is used instead of 'let' or 'const'. Both 'let' and 'const' are block-scoped and behave more strictly. Suggests replacing all 'var' declarations with 'let' or 'const' declarations, depending on the semantics of a particular value. The declarations may be moved to the top of the function or placed before the first usage of the variable to avoid Reference errors. Select the 'Conservatively convert var with Fix all action' option to prevent any changes in these complex cases when using the 'Fix all' action.",
+ "markdown": "Reports a `var` declaration that is used instead of `let` or `const`. \nBoth `let` and `const` are block-scoped and behave more strictly. \n\nSuggests replacing all `var` declarations with `let` or `const` declarations, depending on the semantics of a particular value. The declarations may be moved to the top of the function or placed before the first usage of the variable to avoid Reference errors. \nSelect the 'Conservatively convert var with Fix all action' option to prevent any changes in these complex cases when using the 'Fix all' action."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ConvertVarToLetConst",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PointlessBooleanExpressionJS",
+ "shortDescription": {
+ "text": "Pointless statement or boolean expression"
+ },
+ "fullDescription": {
+ "text": "Reports a pointless or pointlessly complicated boolean expression or statement. Example: 'let a = !(false && x);\n let b = false || x;' After the quick fix is applied the result looks like: 'let a = true;\n let b = x;'",
+ "markdown": "Reports a pointless or pointlessly complicated boolean expression or statement.\n\nExample:\n\n\n let a = !(false && x);\n let b = false || x;\n\nAfter the quick fix is applied the result looks like:\n\n\n let a = true;\n let b = x;\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PointlessBooleanExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSReferencingMutableVariableFromClosure",
+ "shortDescription": {
+ "text": "Referencing mutable variable from closure"
+ },
+ "fullDescription": {
+ "text": "Reports access to outer mutable variables from functions. Example: 'for (var i = 1; i <= 3; i++) {\n setTimeout(function() {\n console.log(i); // bad\n }, 0);\n }'",
+ "markdown": "Reports access to outer mutable variables from functions.\n\nExample:\n\n\n for (var i = 1; i <= 3; i++) {\n setTimeout(function() {\n console.log(i); // bad\n }, 0);\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSReferencingMutableVariableFromClosure",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DynamicallyGeneratedCodeJS",
+ "shortDescription": {
+ "text": "Execution of dynamically generated code"
+ },
+ "fullDescription": {
+ "text": "Reports a call of the 'eval()', 'setTimeout()', or 'setInterval()' function or an allocation of a 'Function' object. These functions are used to execute arbitrary strings of JavaScript text, which often dynamically generated. This can be very confusing, and may be a security risk. Ignores the cases when a callback function is provided to these methods statically, without code generation.",
+ "markdown": "Reports a call of the `eval()`, `setTimeout()`, or `setInterval()` function or an allocation of a `Function` object. These functions are used to execute arbitrary strings of JavaScript text, which often dynamically generated. This can be very confusing, and may be a security risk. \n\nIgnores the cases when a callback function is provided to these methods statically, without code generation."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DynamicallyGeneratedCodeJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NegatedConditionalExpressionJS",
+ "shortDescription": {
+ "text": "Negated conditional expression"
+ },
+ "fullDescription": {
+ "text": "Reports a conditional expression whose condition is negated. Suggests flipping the order of branches in the conditional expression to increase the clarity of the statement. Example: '!condition ? 2 : 1'",
+ "markdown": "Reports a conditional expression whose condition is negated. Suggests flipping the order of branches in the conditional expression to increase the clarity of the statement. Example: `!condition ? 2 : 1`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NegatedConditionalExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUrlImportUsage",
+ "shortDescription": {
+ "text": "URL import is used"
+ },
+ "fullDescription": {
+ "text": "Checks used URL imports in the JavaScript language. Suggests downloading the module for the specified remote URL. Such association enables the IDE to provide proper code completion and navigation. URLs in import specifiers are supported only for ECMAScript modules in the JavaScript language.",
+ "markdown": "Checks used URL imports in the JavaScript language. Suggests downloading the module for the specified remote URL. Such association enables the IDE to provide proper code completion and navigation. \n\nURLs in import specifiers are supported only for ECMAScript modules in the JavaScript language."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSUrlImportUsage",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "index": 47,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnnecessaryLabelOnContinueStatementJS",
+ "shortDescription": {
+ "text": "Unnecessary label on 'continue' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a labeled 'continue' statement whose labels may be removed without changing the flow of control.",
+ "markdown": "Reports a labeled `continue` statement whose labels may be removed without changing the flow of control."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnnecessaryLabelOnContinueStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ChainedEqualityJS",
+ "shortDescription": {
+ "text": "Chained equality"
+ },
+ "fullDescription": {
+ "text": "Reports a chained equality comparison (i.e. 'a==b==c'). Such comparisons are confusing.",
+ "markdown": "Reports a chained equality comparison (i.e. `a==b==c`). Such comparisons are confusing."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ChainedEqualityComparisonsJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SillyAssignmentJS",
+ "shortDescription": {
+ "text": "Variable is assigned to itself"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment in the form 'x = x'.",
+ "markdown": "Reports an assignment in the form `x = x`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "SillyAssignmentJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSPotentiallyInvalidTargetOfIndexedPropertyAccess",
+ "shortDescription": {
+ "text": "Possibly incorrect target of indexed property access"
+ },
+ "fullDescription": {
+ "text": "Reports a potentially invalid indexed property access, for example, 'Array[1]'.",
+ "markdown": "Reports a potentially invalid indexed property access, for example, `Array[1]`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSPotentiallyInvalidTargetOfIndexedPropertyAccess",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSAccessibilityCheck",
+ "shortDescription": {
+ "text": "Inaccessible @private and @protected members referenced"
+ },
+ "fullDescription": {
+ "text": "Reports a reference to a JavaScript member that is marked with a '@private' or '@protected' tag but does not comply with visibility rules that these tags imply.",
+ "markdown": "Reports a reference to a JavaScript member that is marked with a `@private` or `@protected` tag but does not comply with visibility rules that these tags imply."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSAccessibilityCheck",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ConvertRequireIntoImport",
+ "shortDescription": {
+ "text": "'require()' is used instead of 'import'"
+ },
+ "fullDescription": {
+ "text": "Reports a 'require()' statement. Suggests converting it to a 'require()' call with an 'import' statement. Enable 'Convert require() inside inner scopes with Fix all action' to convert all 'require()' calls inside the nested functions and statements when using the 'Fix all' action. Please note that converting 'require()' statements inside inner scopes to 'import' statements may cause changes in the semantics of the code. Import statements are static module dependencies and are hoisted, which means that they are moved to the top of the current module. 'require()' calls load modules dynamically. They can be executed conditionally, and their scope is defined by the expression in which they are used. Clear the 'Convert require() inside inner scopes with Fix all action' checkbox to prevent any changes in these complex cases when using the 'Fix all' action.",
+ "markdown": "Reports a `require()` statement. Suggests converting it to a `require()` call with an `import` statement. \n\nEnable 'Convert require() inside inner scopes with Fix all action' to convert all `require()` calls inside the nested functions and statements when using the 'Fix all' action. \n\nPlease note that converting `require()` statements inside inner scopes to `import` statements may cause changes in the semantics of the code. Import statements are static module dependencies and are hoisted, which means that they are moved to the top of the current module. `require()` calls load modules dynamically. They can be executed conditionally, and their scope is defined by the expression in which they are used. \nClear the 'Convert require() inside inner scopes with Fix all action' checkbox to prevent any changes in these complex cases when using the 'Fix all' action."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ConvertRequireIntoImport",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FunctionWithMultipleLoopsJS",
+ "shortDescription": {
+ "text": "Function with multiple loops"
+ },
+ "fullDescription": {
+ "text": "Reports a function with multiple loop statements.",
+ "markdown": "Reports a function with multiple loop statements."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FunctionWithMultipleLoopsJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "LabeledStatementJS",
+ "shortDescription": {
+ "text": "Labeled statement"
+ },
+ "fullDescription": {
+ "text": "Reports a labeled statement.",
+ "markdown": "Reports a labeled statement."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "LabeledStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NpmUsedModulesInstalled",
+ "shortDescription": {
+ "text": "Missing module dependency"
+ },
+ "fullDescription": {
+ "text": "Reports a module from a 'require()' call or an 'import' statement that is not installed or is not listed in package.json dependencies. Suggests installing the module and/or including it into package.json. For 'require()' calls, works only in the files from the scope of Node.js Core JavaScript library.",
+ "markdown": "Reports a module from a `require()` call or an `import` statement that is not installed or is not listed in package.json dependencies.\n\nSuggests installing the module and/or including it into package.json.\n\nFor `require()` calls, works only in the files from the scope of *Node.js Core* JavaScript library."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "NpmUsedModulesInstalled",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "index": 47,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnusedCatchParameterJS",
+ "shortDescription": {
+ "text": "Unused 'catch' parameter"
+ },
+ "fullDescription": {
+ "text": "Reports a 'catch' parameter that is not used in the corresponding block. The 'catch' parameters named 'ignore' or 'ignored' are ignored. Use the checkbox below to disable this inspection for 'catch' blocks with comments.",
+ "markdown": "Reports a `catch` parameter that is not used in the corresponding block. The `catch` parameters named `ignore` or `ignored` are ignored.\n\n\nUse the checkbox below to disable this inspection for `catch`\nblocks with comments."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnusedCatchParameterJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "WithStatementJS",
+ "shortDescription": {
+ "text": "'with' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'with' statements. Such statements result in potentially confusing implicit bindings, and may behave strangely in setting new variables.",
+ "markdown": "Reports a `with` statements. Such statements result in potentially confusing implicit bindings, and may behave strangely in setting new variables."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "WithStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSConstantReassignment",
+ "shortDescription": {
+ "text": "Attempt to assign to const or readonly variable"
+ },
+ "fullDescription": {
+ "text": "Reports reassigning a value to a constant or a readonly variable.",
+ "markdown": "Reports reassigning a value to a constant or a readonly variable."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "JSConstantReassignment",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptCheckImport",
+ "shortDescription": {
+ "text": "Unresolved imported name"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved name or binding in an 'import' declaration in TypeScript code.",
+ "markdown": "Reports an unresolved name or binding in an `import` declaration in TypeScript code."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "TypeScriptCheckImport",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "MagicNumberJS",
+ "shortDescription": {
+ "text": "Magic number"
+ },
+ "fullDescription": {
+ "text": "Reports a \"magic number\" that is a numeric literal used without being named by a constant declaration. Magic numbers can result in code whose intention is unclear, and may result in errors if a magic number is changed in one code location but remains unchanged in another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0.0 and 1.0 are ignored.",
+ "markdown": "Reports a \"magic number\" that is a numeric literal used without being named by a constant declaration. Magic numbers can result in code whose intention is unclear, and may result in errors if a magic number is changed in one code location but remains unchanged in another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0.0 and 1.0 are ignored."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "MagicNumberJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FunctionNamingConventionJS",
+ "shortDescription": {
+ "text": "Function naming convention"
+ },
+ "fullDescription": {
+ "text": "Reports a function whose name is too short, too long, or does not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression for function names. Use the standard 'java.util.regex' format for regular expressions.",
+ "markdown": "Reports a function whose name is too short, too long, or does not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nfor function names. Use the standard `java.util.regex` format for regular expressions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FunctionNamingConventionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Naming conventions",
+ "index": 50,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSXSyntaxUsed",
+ "shortDescription": {
+ "text": "JSX syntax used"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a JSX tag in JavaScript code.",
+ "markdown": "Reports a usage of a JSX tag in JavaScript code."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "JSXSyntaxUsed",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSJoinVariableDeclarationAndAssignment",
+ "shortDescription": {
+ "text": "Variable declaration can be merged with the first assignment to the variable"
+ },
+ "fullDescription": {
+ "text": "Reports a variable that is declared without an initializer and is used much further in the code or in a single nested scope. Suggests moving the variable closer to its usages and joining it with the initializer expression.",
+ "markdown": "Reports a variable that is declared without an initializer and is used much further in the code or in a single nested scope. Suggests moving the variable closer to its usages and joining it with the initializer expression."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSJoinVariableDeclarationAndAssignment",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSRedundantSwitchStatement",
+ "shortDescription": {
+ "text": "'switch' statement is redundant and can be replaced"
+ },
+ "fullDescription": {
+ "text": "Reports a 'switch' statement with an empty body, or with only one 'case' branch, or with a 'default' branch only.",
+ "markdown": "Reports a `switch` statement with an empty body, or with only one `case` branch, or with a `default` branch only."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSRedundantSwitchStatement",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptLibrary",
+ "shortDescription": {
+ "text": "Missing global library"
+ },
+ "fullDescription": {
+ "text": "Reports a TypeScript library file that is required for a symbol but is not listed under the 'lib' compiler option in 'tsconfig.json'.",
+ "markdown": "Reports a TypeScript library file that is required for a symbol but is not listed under the `lib` compiler option in `tsconfig.json`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "TypeScriptLibrary",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptMissingAugmentationImport",
+ "shortDescription": {
+ "text": "Missing augmentation import"
+ },
+ "fullDescription": {
+ "text": "Reports a usage from augmentation module without an explicit import.",
+ "markdown": "Reports a usage from [augmentation module](https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation) without an explicit import."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptMissingAugmentationImport",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnusedGlobalSymbols",
+ "shortDescription": {
+ "text": "Unused global symbol"
+ },
+ "fullDescription": {
+ "text": "Reports an unused globally accessible public function, variable, class, or property.",
+ "markdown": "Reports an unused globally accessible public function, variable, class, or property."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnusedGlobalSymbols",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Unused symbols",
+ "index": 19,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ConvertModuleExportToExport",
+ "shortDescription": {
+ "text": "'module.exports' is used instead of 'export'"
+ },
+ "fullDescription": {
+ "text": "Reports a 'module.export' statement. Suggests replacing it with an 'export' or 'export default' statement. Please note that the quick-fix for converting 'module.export' into 'export' is not available for 'module.export' inside functions or statements because 'export' statements can only be at the top level of a module.",
+ "markdown": "Reports a `module.export` statement. Suggests replacing it with an `export` or `export default` statement. \n\nPlease note that the quick-fix for converting `module.export` into `export` is not available for `module.export` inside functions or statements because `export` statements can only be at the top level of a module."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ConvertModuleExportToExport",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DocumentWriteJS",
+ "shortDescription": {
+ "text": "Call to 'document.write()'"
+ },
+ "fullDescription": {
+ "text": "Reports a method call to 'document.write()' or 'document.writeln()'. Most usages of such calls are performed better with explicit DOM calls, such as 'getElementByID()' and 'createElement()'. Additionally, the 'write()' and 'writeln()' calls will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can result in difficulty to point out bugs.",
+ "markdown": "Reports a method call to `document.write()` or `document.writeln()`. Most usages of such calls are performed better with explicit DOM calls, such as `getElementByID()` and `createElement()`. Additionally, the `write()` and `writeln()` calls will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can result in difficulty to point out bugs."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DocumentWriteJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/DOM issues",
+ "index": 52,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "BlockStatementJS",
+ "shortDescription": {
+ "text": "Unnecessary block statement"
+ },
+ "fullDescription": {
+ "text": "Reports a block statement that is not used as the body of 'if', 'for', 'while', 'do', 'with', or 'try' statements, or as the body of a function declaration. Starting from ECMAScript 6, JavaScript blocks introduce new scopes for 'let' and 'const' variables, but still free-standing block statements may be confusing and result in subtle bugs when used with 'var' variables.",
+ "markdown": "Reports a block statement that is not used as the body of `if`, `for`, `while`, `do`, `with`, or `try` statements, or as the body of a function declaration. Starting from ECMAScript 6, JavaScript blocks introduce new scopes for `let` and `const` variables, but still free-standing block statements may be confusing and result in subtle bugs when used with `var` variables."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "BlockStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "AnonymousFunctionJS",
+ "shortDescription": {
+ "text": "Anonymous function"
+ },
+ "fullDescription": {
+ "text": "Reports an anonymous function. An explicit name of a function expression may be helpful for debugging. Ignores function expressions without names if they have a 'name' property specified in the ECMAScript 6 standard. For example, 'var bar = function() {};' is not reported.",
+ "markdown": "Reports an anonymous function. An explicit name of a function expression may be helpful for debugging. Ignores function expressions without names if they have a `name` property specified in the ECMAScript 6 standard. For example, `var bar = function() {};` is not reported."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "AnonymousFunctionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ObjectAllocationIgnoredJS",
+ "shortDescription": {
+ "text": "Result of object allocation ignored"
+ },
+ "fullDescription": {
+ "text": "Reports object allocation where the result of the allocated object is ignored, for example, 'new Error();' as a statement, without any assignment. Such allocation expressions may indicate an odd object initialization strategy.",
+ "markdown": "Reports object allocation where the result of the allocated object is ignored, for example, `new Error();` as a statement, without any assignment. Such allocation expressions may indicate an odd object initialization strategy."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ObjectAllocationIgnored",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "InfiniteRecursionJS",
+ "shortDescription": {
+ "text": "Infinite recursion"
+ },
+ "fullDescription": {
+ "text": "Reports a function which must either recurse infinitely or throw an exception. Such functions may not return normally.",
+ "markdown": "Reports a function which must either recurse infinitely or throw an exception. Such functions may not return normally."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "InfiniteRecursionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NestedConditionalExpressionJS",
+ "shortDescription": {
+ "text": "Nested conditional expression"
+ },
+ "fullDescription": {
+ "text": "Reports a ternary conditional expression within another ternary condition. Such nested conditionals may be extremely confusing, and best replaced by more explicit conditional logic.",
+ "markdown": "Reports a ternary conditional expression within another ternary condition. Such nested conditionals may be extremely confusing, and best replaced by more explicit conditional logic."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NestedConditionalExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSTypeOfValues",
+ "shortDescription": {
+ "text": "'typeof' comparison with non-standard value"
+ },
+ "fullDescription": {
+ "text": "Reports a comparison of a 'typeof' expression with a literal string which is not one of the standard types: 'undefined', 'object', 'boolean', 'number', 'string', 'function', or 'symbol'. Such comparisons always return 'false'.",
+ "markdown": "Reports a comparison of a `typeof` expression with a literal string which is not one of the standard types: `undefined`, `object`, `boolean`, `number`, `string`, `function`, or `symbol`. Such comparisons always return `false`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSTypeOfValues",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "IncompatibleMaskJS",
+ "shortDescription": {
+ "text": "Incompatible bitwise mask operation"
+ },
+ "fullDescription": {
+ "text": "Reports a bitwise mask expression which for sure evaluates to 'true' or 'false'. Expressions are of the form '(var & constant1) == constant2' or '(var | constant1) == constant2', where 'constant1' and 'constant2' are incompatible bitmask constants. Example: '// Incompatible mask: as the last byte in mask is zero,\n// something like 0x1200 would be possible, but not 0x1234\nif ((mask & 0xFF00) == 0x1234) {...}'",
+ "markdown": "Reports a bitwise mask expression which for sure evaluates to `true` or `false`. Expressions are of the form `(var & constant1) == constant2` or `(var | constant1) == constant2`, where `constant1` and `constant2` are incompatible bitmask constants.\n\nExample:\n\n\n // Incompatible mask: as the last byte in mask is zero,\n // something like 0x1200 would be possible, but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "IncompatibleBitwiseMaskOperation",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Bitwise operation issues",
+ "index": 22,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TextLabelInSwitchStatementJS",
+ "shortDescription": {
+ "text": "Text label in 'switch' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a labeled statement inside a 'switch' statement, which often results from a typo. Example: 'switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }'",
+ "markdown": "Reports a labeled statement inside a `switch` statement, which often results from a typo.\n\nExample:\n\n\n switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TextLabelInSwitchStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6PossiblyAsyncFunction",
+ "shortDescription": {
+ "text": "'await' in non-async function"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of 'await' in a function that was possibly intended to be async but is actually missing the 'async' modifier. Although 'await' can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made 'async'.",
+ "markdown": "Reports a usage of `await` in a function that was possibly intended to be async but is actually missing the `async` modifier. Although `await` can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made `async`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6PossiblyAsyncFunction",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Async code and promises",
+ "index": 53,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "EmptyCatchBlockJS",
+ "shortDescription": {
+ "text": "Empty 'catch' block"
+ },
+ "fullDescription": {
+ "text": "Reports an empty 'catch' block. This indicates that errors are simply ignored instead of handling them. Any comment in a 'catch' block mutes the inspection.",
+ "markdown": "Reports an empty `catch` block. This indicates that errors are simply ignored instead of handling them. \n\nAny comment in a `catch` block mutes the inspection."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "EmptyCatchBlockJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSHint",
+ "shortDescription": {
+ "text": "JSHint"
+ },
+ "fullDescription": {
+ "text": "Reports a problem detected by the JSHint linter.",
+ "markdown": "Reports a problem detected by the [JSHint](https://jshint.com/) linter."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "JSHint",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code quality tools",
+ "index": 54,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FlowJSFlagCommentPlacement",
+ "shortDescription": {
+ "text": "Misplaced @flow flag"
+ },
+ "fullDescription": {
+ "text": "Reports a '@flow' flag comment that is not located at the top of a file.",
+ "markdown": "Reports a `@flow` flag comment that is not located at the top of a file."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FlowJSFlagCommentPlacement",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Flow type checker",
+ "index": 16,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Eslint",
+ "shortDescription": {
+ "text": "ESLint"
+ },
+ "fullDescription": {
+ "text": "Reports a discrepancy detected by the ESLint linter. The highlighting is based on the rule severity specified in the ESLint configuration file for each individual rule. Clear the 'Use rule severity from the configuration file' checkbox to use the severity configured in this inspection for all ESLint rules.",
+ "markdown": "Reports a discrepancy detected by the [ESLint](https://eslint.org) linter. \n\nThe highlighting is based on the rule severity specified in the [ESLint configuration file](https://eslint.org/docs/user-guide/configuring) for each individual rule. \n\nClear the 'Use rule severity from the configuration file' checkbox to use the severity configured in this inspection for all ESLint rules."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "Eslint",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code quality tools",
+ "index": 54,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSDuplicatedDeclaration",
+ "shortDescription": {
+ "text": "Duplicate declaration"
+ },
+ "fullDescription": {
+ "text": "Reports multiple declarations in a scope.",
+ "markdown": "Reports multiple declarations in a scope."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSDuplicatedDeclaration",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSEqualityComparisonWithCoercion.TS",
+ "shortDescription": {
+ "text": "Equality operator may cause type coercion"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of equality operators may cause unexpected type coercions. Suggests replacing '==' or '!=' equality operators with type-safe '===' or '!==' operators. Depending on the option selected, one of the following cases will be reported: All usages of '==' and '!=' operators. All usages except comparison with null. Some code styles allow using 'x == null' as a replacement for 'x === null || x === undefined'. Only suspicious expressions, such as: '==' or '!=' comparisons with '0', '''', 'null', 'true', 'false', or 'undefined'.",
+ "markdown": "Reports a usage of equality operators may cause unexpected type coercions. Suggests replacing `==` or `!=` equality operators with type-safe `===` or `!==` operators.\n\nDepending on the option selected, one of the following cases will be reported:\n\n* All usages of `==` and `!=` operators.\n* All usages except comparison with null. Some code styles allow using `x == null` as a replacement for `x === null || x === undefined`.\n* Only suspicious expressions, such as: `==` or `!=` comparisons with `0`, `''`, `null`, `true`, `false`, or `undefined`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "EqualityComparisonWithCoercionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSOctalInteger",
+ "shortDescription": {
+ "text": "Octal integer"
+ },
+ "fullDescription": {
+ "text": "Reports a deprecated octal integer literal prefixed with '0' instead of '0o'. Such literals are not allowed in modern ECMAScript code, and using them in the strict mode is an error. To force this inspection for ES5 and ES3 language levels, select the 'Warn about obsolete octal literals in ES5- code' checkbox below.",
+ "markdown": "Reports a deprecated octal integer literal prefixed with `0` instead of `0o`. \nSuch literals are not allowed in modern ECMAScript code, and using them in the strict mode is an error. \nTo force this inspection for ES5 and ES3 language levels, select the 'Warn about obsolete octal literals in ES5- code' checkbox below."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "JSOctalInteger",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ExceptionCaughtLocallyJS",
+ "shortDescription": {
+ "text": "Exception used for local control-flow"
+ },
+ "fullDescription": {
+ "text": "Reports a 'throw' statement whose exceptions are always caught by the containing 'try' statement. Using 'throw' statements as a 'goto' to change the local flow of control is confusing.",
+ "markdown": "Reports a `throw` statement whose exceptions are always caught by the containing `try` statement. Using `throw` statements as a `goto` to change the local flow of control is confusing."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ExceptionCaughtLocallyJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ThrowFromFinallyBlockJS",
+ "shortDescription": {
+ "text": "'throw' inside 'finally' block"
+ },
+ "fullDescription": {
+ "text": "Reports s 'throw' statement inside a 'finally' block. Such 'throw' statements may mask exceptions thrown, and complicate debugging.",
+ "markdown": "Reports s `throw` statement inside a `finally` block. Such `throw` statements may mask exceptions thrown, and complicate debugging."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ThrowInsideFinallyBlockJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptValidateGenericTypes",
+ "shortDescription": {
+ "text": "Incorrect generic type argument"
+ },
+ "fullDescription": {
+ "text": "Reports an invalid type argument in a function, interface, or class declaration.",
+ "markdown": "Reports an invalid type argument in a function, interface, or class declaration."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "TypeScriptValidateGenericTypes",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CyclomaticComplexityJS",
+ "shortDescription": {
+ "text": "Overly complex function"
+ },
+ "fullDescription": {
+ "text": "Reports a function with too many branching points in a function (too high cyclomatic complexity). Such functions may be confusing and hard to test. Use the field provided below to specify the maximum acceptable cyclomatic complexity for a function.",
+ "markdown": "Reports a function with too many branching points in a function (too high cyclomatic complexity). Such functions may be confusing and hard to test.\n\n\nUse the field provided below to specify the maximum acceptable cyclomatic complexity for a function."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "OverlyComplexFunctionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSMismatchedCollectionQueryUpdate",
+ "shortDescription": {
+ "text": "Mismatched query and update of collection"
+ },
+ "fullDescription": {
+ "text": "Reports a collection of fields or variables whose contents are either queried and not updated or updated and not queried. Such mismatched queries and updates are pointless and may indicate either dead code or a typographical error. Query methods are automatically detected, based on whether they return something, or a callback is passed to them. Use the table below to specify which methods are update methods.",
+ "markdown": "Reports a collection of fields or variables whose contents are either queried and not updated or updated and not queried. Such mismatched queries and updates are pointless and may indicate either dead code or a typographical error.\n\n\nQuery methods are automatically detected, based on whether they return something, or a callback is passed to them.\nUse the table below to specify which methods are update methods."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSMismatchedCollectionQueryUpdate",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PackageJsonMismatchedDependency",
+ "shortDescription": {
+ "text": "Mismatched dependencies in package.json"
+ },
+ "fullDescription": {
+ "text": "Reports a dependency from package.json that is not installed or doesn't match the specified version range.",
+ "markdown": "Reports a dependency from package.json that is not installed or doesn't match the specified [version range](https://docs.npmjs.com/about-semantic-versioning)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PackageJsonMismatchedDependency",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "index": 47,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSPotentiallyInvalidUsageOfThis",
+ "shortDescription": {
+ "text": "Potentially invalid reference to 'this' from closure"
+ },
+ "fullDescription": {
+ "text": "Reports a 'this' in closure that is used for referencing properties of outer context. Example: 'function Outer() {\n this.outerProp = 1;\n function inner() {\n // bad, because 'outerProp' of Outer\n // won't be updated here\n // on calling 'new Outer()' as may be expected\n this.outerProp = 2;\n }\n inner();\n}'",
+ "markdown": "Reports a `this` in closure that is used for referencing properties of outer context.\n\nExample:\n\n\n function Outer() {\n this.outerProp = 1;\n function inner() {\n // bad, because 'outerProp' of Outer\n // won't be updated here\n // on calling 'new Outer()' as may be expected\n this.outerProp = 2;\n }\n inner();\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSPotentiallyInvalidUsageOfThis",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSMissingSwitchDefault",
+ "shortDescription": {
+ "text": "'switch' statement has no 'default' branch"
+ },
+ "fullDescription": {
+ "text": "Reports a 'switch' statement without a 'default' clause when some possible values are not enumerated.",
+ "markdown": "Reports a `switch` statement without a `default` clause when some possible values are not enumerated."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSMissingSwitchDefault",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSXNamespaceValidation",
+ "shortDescription": {
+ "text": "Missing JSX namespace"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a JSX construction without importing namespace. Having the namespace in the file scope ensures proper code compilation.",
+ "markdown": "Reports a usage of a JSX construction without importing namespace. Having the namespace in the file scope ensures proper code compilation."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSXNamespaceValidation",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "index": 47,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnresolvedLibraryURL",
+ "shortDescription": {
+ "text": "Missed locally stored library for HTTP link"
+ },
+ "fullDescription": {
+ "text": "Reports a URL of an external JavaScript library that is not associated with any locally stored file. Suggests downloading the library. Such association enables the IDE to provide proper code completion and navigation.",
+ "markdown": "Reports a URL of an external JavaScript library that is not associated with any locally stored file. Suggests downloading the library. Such association enables the IDE to provide proper code completion and navigation."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnresolvedLibraryURL",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6PreferShortImport",
+ "shortDescription": {
+ "text": "Import can be shortened"
+ },
+ "fullDescription": {
+ "text": "Reports an ES6 import whose 'from' part can be shortened. Suggests importing the parent directory.",
+ "markdown": "Reports an ES6 import whose `from` part can be shortened. Suggests importing the parent directory."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ES6PreferShortImport",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PointlessBitwiseExpressionJS",
+ "shortDescription": {
+ "text": "Bitwise expression can be simplified"
+ },
+ "fullDescription": {
+ "text": "Reports an expression that includes 'and' with zero, 'or' by zero, or shifting by zero. Such expressions may result from not fully completed automated refactorings.",
+ "markdown": "Reports an expression that includes `and` with zero, `or` by zero, or shifting by zero. Such expressions may result from not fully completed automated refactorings."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PointlessBitwiseExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Bitwise operation issues",
+ "index": 22,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "InfiniteLoopJS",
+ "shortDescription": {
+ "text": "Infinite loop statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'for', 'while', or 'do' statement which can only exit by throwing an exception. Such statements often indicate coding errors.",
+ "markdown": "Reports a `for`, `while`, or `do` statement which can only exit by throwing an exception. Such statements often indicate coding errors."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "InfiniteLoopJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSStringConcatenationToES6Template",
+ "shortDescription": {
+ "text": "String concatenation is used instead of template literal"
+ },
+ "fullDescription": {
+ "text": "Reports a string concatenation. Suggests replacing it with a template literal Example '\"result: \" + a + \".\"' After applying the quick-fix the code looks as follows: '`result: ${a}.`'",
+ "markdown": "Reports a string concatenation. Suggests replacing it with a [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)\n\nExample\n\n \"result: \" + a + \".\" \n\nAfter applying the quick-fix the code looks as follows:\n\n `result: ${a}.` \n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSStringConcatenationToES6Template",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSArrowFunctionBracesCanBeRemoved",
+ "shortDescription": {
+ "text": "Redundant braces around arrow function body"
+ },
+ "fullDescription": {
+ "text": "Reports an arrow function whose body only consists of braces and exactly one statement. Suggests converting to concise syntax without braces. 'let incrementer = (x) => {return x + 1};' After the quick-fix is applied, the code fragment looks as follows: 'let incrementer = (x) => x + 1;'",
+ "markdown": "Reports an arrow function whose body only consists of braces and exactly one statement. Suggests converting to concise syntax without braces.\n\n\n let incrementer = (x) => {return x + 1};\n\nAfter the quick-fix is applied, the code fragment looks as follows:\n\n\n let incrementer = (x) => x + 1;\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSArrowFunctionBracesCanBeRemoved",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ReplaceAssignmentWithOperatorAssignmentJS",
+ "shortDescription": {
+ "text": "Assignment could be replaced with operator assignment"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment operation that can be replaced by an operator assignment to make your code shorter and probably clearer. Example: 'x = x + 3;'\n 'x = x / 3;'\n After the quick fix is applied the result looks like: 'x += 3;'\n 'x /= 3;'",
+ "markdown": "Reports an assignment operation that can be replaced by an operator assignment to make your code shorter and probably clearer.\n\n\nExample:\n\n x = x + 3;\n x = x / 3;\n\nAfter the quick fix is applied the result looks like:\n\n x += 3;\n x /= 3;\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "AssignmentReplaceableWithOperatorAssignmentJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSFileReferences",
+ "shortDescription": {
+ "text": "Unresolved file reference"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved file reference in a JavaScript file, including CommonJS and AMD modules references.",
+ "markdown": "Reports an unresolved file reference in a JavaScript file, including CommonJS and AMD modules references."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSFileReferences",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "Stylelint",
+ "shortDescription": {
+ "text": "Stylelint"
+ },
+ "fullDescription": {
+ "text": "Reports a discrepancy detected by the Stylelint linter. The highlighting is based on the rule severity specified in the Stylelint configuration file for each individual rule.",
+ "markdown": "Reports a discrepancy detected by the [Stylelint](http://stylelint.io) linter. \n\nThe highlighting is based on the rule severity specified in the [Stylelint configuration file](https://stylelint.io/user-guide/configure) for each individual rule."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "Stylelint",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "CSS/Code quality tools",
+ "index": 57,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FunctionWithInconsistentReturnsJS",
+ "shortDescription": {
+ "text": "Function with inconsistent returns"
+ },
+ "fullDescription": {
+ "text": "Reports a function that returns a value in some cases while in other cases no value is returned. This usually indicates an error. Example: 'function foo() {\n if (true)\n return 3;\n return;\n}'",
+ "markdown": "Reports a function that returns a value in some cases while in other cases no value is returned. This usually indicates an error.\n\nExample:\n\n\n function foo() {\n if (true)\n return 3;\n return;\n }\n\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FunctionWithInconsistentReturnsJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ClassMemberInitializationOrder",
+ "shortDescription": {
+ "text": "Use of possibly unassigned property in a static initializer"
+ },
+ "fullDescription": {
+ "text": "Reports a class member initializer which references another non-hoisted class member while the latter may be not initialized yet. Initialization of class members happens consequently for fields, so a field cannot reference another field that is declared later.",
+ "markdown": "Reports a class member initializer which references another non-hoisted class member while the latter may be not initialized yet. \n\nInitialization of class members happens consequently for fields, so a field cannot reference another field that is declared later."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ES6ClassMemberInitializationOrder",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "EmptyTryBlockJS",
+ "shortDescription": {
+ "text": "Empty 'try' block"
+ },
+ "fullDescription": {
+ "text": "Reports an empty 'try' block, which usually indicates an error.",
+ "markdown": "Reports an empty `try` block, which usually indicates an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "EmptyTryBlockJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ReservedWordUsedAsNameJS",
+ "shortDescription": {
+ "text": "Reserved word used as name"
+ },
+ "fullDescription": {
+ "text": "Reports a JavaScript reserved word used as a name. The JavaScript specification reserves a number of words which are currently not used as keywords. Using those words as identifiers may result in broken code if later versions of JavaScript start using them as keywords.",
+ "markdown": "Reports a JavaScript reserved word used as a name. The JavaScript specification reserves a number of words which are currently not used as keywords. Using those words as identifiers may result in broken code if later versions of JavaScript start using them as keywords."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ReservedWordAsName",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSClassNamingConvention",
+ "shortDescription": {
+ "text": "Class naming convention"
+ },
+ "fullDescription": {
+ "text": "Reports a class or a function that is annotated with a JSDoc '@constructor' or '@class' tag whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression expected for classes names. Use the standard 'java.util.regex' format for regular expressions.",
+ "markdown": "Reports a class or a function that is annotated with a JSDoc `@constructor` or `@class` tag whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nexpected for classes names. Use the standard `java.util.regex` format for regular expressions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSClassNamingConvention",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Naming conventions",
+ "index": 50,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptValidateJSTypes",
+ "shortDescription": {
+ "text": "Type mismatch in 'any' type"
+ },
+ "fullDescription": {
+ "text": "Reports a function call with a parameter, return value, or assigned expression or incorrect type, if the context symbol can be implicitly resolved to the 'any' type. declare var test: any;\ntest.hasOwnProperty(true); //reports 'true'",
+ "markdown": "Reports a function call with a parameter, return value, or assigned expression or incorrect type, if the context symbol can be implicitly resolved to the `any` type.\n\n```\ndeclare var test: any;\ntest.hasOwnProperty(true); //reports 'true'\n```"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptValidateJSTypes",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NestedFunctionJS",
+ "shortDescription": {
+ "text": "Nested function"
+ },
+ "fullDescription": {
+ "text": "Reports a function nested inside another function. Although JavaScript allows functions to be nested, such constructs may be confusing. Use the checkbox below to ignore anonymous nested functions.",
+ "markdown": "Reports a function nested inside another function. Although JavaScript allows functions to be nested, such constructs may be confusing.\n\n\nUse the checkbox below to ignore anonymous nested functions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NestedFunctionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "XHTMLIncompatabilitiesJS",
+ "shortDescription": {
+ "text": "Incompatible XHTML usages"
+ },
+ "fullDescription": {
+ "text": "Reports common JavaScript DOM patterns which may present problems with XHTML documents. In particular, the patterns detected will behave completely differently depending on whether the document is loaded as XML or HTML. This can result in subtle bugs where script behaviour is dependent on the MIME-type of the document, rather than its content. Patterns detected include document.body, document.images, document.applets, document.links, document.forms, and document.anchors.",
+ "markdown": "Reports common JavaScript DOM patterns which may present problems with XHTML documents. In particular, the patterns detected will behave completely differently depending on whether the document is loaded as XML or HTML. This can result in subtle bugs where script behaviour is dependent on the MIME-type of the document, rather than its content. Patterns detected include **document.body** , **document.images** , **document.applets** , **document.links** , **document.forms** , and **document.anchors**."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "XHTMLIncompatabilitiesJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/DOM issues",
+ "index": 52,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "IncrementDecrementResultUsedJS",
+ "shortDescription": {
+ "text": "Result of increment or decrement used"
+ },
+ "fullDescription": {
+ "text": "Reports an increment ('++') or decrement ('--') expression where the result of the assignment is used in a containing expression. Such assignments can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Example: 'var a = b++'",
+ "markdown": "Reports an increment (`++`) or decrement (`--`) expression where the result of the assignment is used in a containing expression. Such assignments can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Example: `var a = b++`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "IncrementDecrementResultUsedJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SuspiciousTypeOfGuard",
+ "shortDescription": {
+ "text": "Unsound type guard check"
+ },
+ "fullDescription": {
+ "text": "Reports a 'typeof' or 'instanceof' unsound type guard check. The 'typeof x' type guard can be unsound in one of the following two cases: 'typeof x' never corresponds to the specified value (for example, 'typeof x === 'number'' when 'x' is of the type 'string | boolean') 'typeof x' always corresponds to the specified value (for example, 'typeof x === 'string'' when 'x' is of the type 'string') The 'x instanceof A' type guard can be unsound in one of the following two cases: The type of 'x' is not related to 'A' The type of 'x' is 'A' or a subtype of 'A'",
+ "markdown": "Reports a `typeof` or `instanceof` unsound type guard check. The `typeof x` type guard can be unsound in one of the following two cases:\n\n* `typeof x` never corresponds to the specified value (for example, `typeof x === 'number'` when `x` is of the type 'string \\| boolean')\n* `typeof x` always corresponds to the specified value (for example, `typeof x === 'string'` when `x` is of the type 'string')\n\nThe `x instanceof A` type guard can be unsound in one of the following two cases:\n\n* The type of `x` is not related to `A`\n* The type of `x` is `A` or a subtype of `A`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "SuspiciousTypeOfGuard",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptJSXUnresolvedComponent",
+ "shortDescription": {
+ "text": "Unresolved JSX component"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved reference to a JSX component. Suggests adding an import statement if the referenced component is defined in the project or its dependencies or creating a new component with the specified name. The template for a new component can be modified in Editor | File and Code Templates.",
+ "markdown": "Reports an unresolved reference to a JSX component. Suggests adding an import statement if the referenced component is defined in the project or its dependencies or creating a new component with the specified name.\n\nThe template for a new component can be modified in Editor \\| File and Code Templates."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptJSXUnresolvedComponent",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptFieldCanBeMadeReadonly",
+ "shortDescription": {
+ "text": "Field can be readonly"
+ },
+ "fullDescription": {
+ "text": "Reports a private field that can be made readonly (for example, if the field is assigned only in the constructor).",
+ "markdown": "Reports a private field that can be made readonly (for example, if the field is assigned only in the constructor)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptFieldCanBeMadeReadonly",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6DestructuringVariablesMerge",
+ "shortDescription": {
+ "text": "Destructuring properties with the same key"
+ },
+ "fullDescription": {
+ "text": "Reports multiple destructuring properties with identical keys. Suggests merging the properties.",
+ "markdown": "Reports multiple destructuring properties with identical keys. Suggests merging the properties."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6DestructuringVariablesMerge",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "LoopStatementThatDoesntLoopJS",
+ "shortDescription": {
+ "text": "Loop statement that doesn't loop"
+ },
+ "fullDescription": {
+ "text": "Reports a 'for', 'while', or 'do' statement whose bodies are guaranteed to execute at most once. Normally, this indicates an error.",
+ "markdown": "Reports a `for`, `while`, or `do` statement whose bodies are guaranteed to execute at most once. Normally, this indicates an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "LoopStatementThatDoesntLoopJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NegatedIfStatementJS",
+ "shortDescription": {
+ "text": "Negated 'if' statement"
+ },
+ "fullDescription": {
+ "text": "Reports if statements which have an else branch and a negated condition. Flipping the order of the if and else branches will usually increase the clarity of such statements.",
+ "markdown": "Reports **if** statements which have an **else** branch and a negated condition. Flipping the order of the **if** and **else** branches will usually increase the clarity of such statements."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NegatedIfStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSNonASCIINames",
+ "shortDescription": {
+ "text": "Identifiers with non-ASCII symbols"
+ },
+ "fullDescription": {
+ "text": "Reports a non-ASCII symbol in a name. If the 'Allow only ASCII names' option is selected, reports all names that contain non-ASCII symbols. Otherwise reports all names that contain both ASCII and non-ASCII symbols.",
+ "markdown": "Reports a non-ASCII symbol in a name. \n\nIf the 'Allow only ASCII names' option is selected, reports all names that contain non-ASCII symbols. \nOtherwise reports all names that contain both ASCII and non-ASCII symbols."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSNonASCIINames",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Naming conventions",
+ "index": 50,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptRedundantGenericType",
+ "shortDescription": {
+ "text": "Redundant type arguments"
+ },
+ "fullDescription": {
+ "text": "Reports a type argument that is equal to the default one and can be removed. Example: 'type Foo = T;\nlet z: Foo;'",
+ "markdown": "Reports a type argument that is equal to the default one and can be removed.\n\n\nExample:\n\n\n type Foo = T;\n let z: Foo;\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptRedundantGenericType",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptUMDGlobal",
+ "shortDescription": {
+ "text": "Referenced UMD global variable"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a Universal Module Definition (UMD) global variable if the current file is a module (ECMAScript or CommonJS). Referencing UMD variables without explicit imports can lead to a runtime error if the library isn't included implicitly.",
+ "markdown": "Reports a usage of a Universal Module Definition (UMD) global variable if the current file is a module (ECMAScript or CommonJS). Referencing UMD variables without explicit imports can lead to a runtime error if the library isn't included implicitly."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptUMDGlobal",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnnecessaryReturnJS",
+ "shortDescription": {
+ "text": "Unnecessary 'return' statement"
+ },
+ "fullDescription": {
+ "text": "Reports an unnecessary 'return' statement, that is, a 'return' statement that returns no value and occurs just before the function would have \"fallen through\" the bottom. These statements may be safely removed.",
+ "markdown": "Reports an unnecessary `return` statement, that is, a `return` statement that returns no value and occurs just before the function would have \"fallen through\" the bottom. These statements may be safely removed."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnnecessaryReturnStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ConditionalExpressionWithIdenticalBranchesJS",
+ "shortDescription": {
+ "text": "Conditional expression with identical branches"
+ },
+ "fullDescription": {
+ "text": "Reports a ternary conditional expression with identical 'then' and 'else' branches.",
+ "markdown": "Reports a ternary conditional expression with identical `then` and `else` branches."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConditionalExpressionWithIdenticalBranchesJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSAnnotator",
+ "shortDescription": {
+ "text": "ECMAScript specification is not followed"
+ },
+ "fullDescription": {
+ "text": "Reports basic syntax issues and inconsistencies with language specification, such as invalid usages of keywords, usages of incompatible numeric format, or multiple parameters to getters/setters. Generally, such errors must always be reported and shouldn't be disabled. But in some cases, such as issues due to the dynamic nature of JavaScript, the use of not yet supported language features, or bugs in IDE's checker, it may be handy to disable reporting these very basic errors.",
+ "markdown": "Reports basic syntax issues and inconsistencies with language specification, such as invalid usages of keywords, usages of incompatible numeric format, or multiple parameters to getters/setters. \nGenerally, such errors must always be reported and shouldn't be disabled. But in some cases, such as issues due to the dynamic nature of JavaScript, the use of not yet supported language features, or bugs in IDE's checker, it may be handy to disable reporting these very basic errors."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "JSAnnotator",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSIncompatibleTypesComparison",
+ "shortDescription": {
+ "text": "Comparison of expressions having incompatible types"
+ },
+ "fullDescription": {
+ "text": "Reports a comparison with operands of incompatible types or an operand with a type without possible common values.",
+ "markdown": "Reports a comparison with operands of incompatible types or an operand with a type without possible common values."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSIncompatibleTypesComparison",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnfilteredForInLoop",
+ "shortDescription": {
+ "text": "Unfiltered for..in loop"
+ },
+ "fullDescription": {
+ "text": "Reports unfiltered 'for-in' loops. The use of this construct results in processing not only own properties of an object but properties from its prototype as well. It may be unexpected in some specific cases, for example, in utility methods that copy or modify all properties or when 'Object''s prototype may be incorrectly modified. For example, the following code will print 42 and myMethod: 'Object.prototype.myMethod = function myMethod() {};\nlet a = { foo: 42 };\nfor (let i in a) {\n console.log(a[i]);\n}' Suggests replacing the whole loop with a 'Object.keys()' method or adding a 'hasOwnProperty()' check. After applying the quick-fix the code looks as follows: 'for (let i in a) {\n if (a.hasOwnProperty(i)) {\n console.log(a[i]);\n }\n}'",
+ "markdown": "Reports unfiltered `for-in` loops. \n\nThe use of this construct results in processing not only own properties of an object but properties from its prototype as well. It may be unexpected in some specific cases, for example, in utility methods that copy or modify all properties or when `Object`'s prototype may be incorrectly modified. For example, the following code will print **42** and **myMethod** : \n\n\n Object.prototype.myMethod = function myMethod() {};\n let a = { foo: 42 };\n for (let i in a) {\n console.log(a[i]);\n }\n\nSuggests replacing the whole loop with a `Object.keys()` method or adding a `hasOwnProperty()` check. After applying the quick-fix the code looks as follows:\n\n\n for (let i in a) {\n if (a.hasOwnProperty(i)) {\n console.log(a[i]);\n }\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnfilteredForInLoop",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSLastCommaInObjectLiteral",
+ "shortDescription": {
+ "text": "Unneeded last comma in object literal"
+ },
+ "fullDescription": {
+ "text": "Reports usages of a trailing comma in object literals. The warning is reported only when the JavaScript language version is set to ECMAScript 5.1. Trailing commas in object literals are allowed by the specification, however, some browsers might throw an error when a trailing comma is used. You can configure formatting options for trailing commas in Code Style | JavaScript or TypeScript | Punctuation.",
+ "markdown": "Reports usages of a trailing comma in object literals.\n\nThe warning is reported only when the JavaScript language version is set to ECMAScript 5.1.\n\nTrailing commas in object literals are allowed by the specification, however, some browsers might throw an error when a trailing comma is used.\n\nYou can configure formatting options for trailing commas in **Code Style** \\| **JavaScript** or **TypeScript** \\| **Punctuation**."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSLastCommaInObjectLiteral",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSFunctionExpressionToArrowFunction",
+ "shortDescription": {
+ "text": "Function expression is used instead of arrow function"
+ },
+ "fullDescription": {
+ "text": "Reports a function expression. Suggests converting it to an arrow function. Example: 'arr.map(function(el) {return el + 1})' After applying the quick-fix the code looks as follows: 'arr.map(el => el + 1)'",
+ "markdown": "Reports a [function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function) expression. Suggests converting it to an [arrow function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions).\n\nExample:\n\n arr.map(function(el) {return el + 1})\n\nAfter applying the quick-fix the code looks as follows:\n\n arr.map(el => el + 1)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSFunctionExpressionToArrowFunction",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6TopLevelAwaitExpression",
+ "shortDescription": {
+ "text": "Top-level 'await' expression"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a top-level 'await' expression. While the new 'top-level async' proposal is on its way, using 'await' outside async functions is not allowed.",
+ "markdown": "Reports a usage of a top-level `await` expression. While the new 'top-level async' proposal is on its way, using `await` outside async functions is not allowed."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "ES6TopLevelAwaitExpression",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Async code and promises",
+ "index": 53,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6MissingAwait",
+ "shortDescription": {
+ "text": "Missing await for an async function call"
+ },
+ "fullDescription": {
+ "text": "Reports an 'async' function call without an expected 'await' prefix inside an 'async' function. Such call returns a 'Promise' and control flow is continued immediately. Example: 'async function bar() { /* ... */ }\nasync function foo() {\n bar(); // bad\n}' After the quick-fix is applied, the 'await' prefix is added: 'async function bar() { /* ... */ }\nasync function foo() {\n await bar(); // good\n}' When the 'Report for promises in return statements' checkbox is selected, also suggests adding 'await' in return statements. While this is generally not necessary, it gives two main benefits. You won't forget to add 'await' when surrounding your code with 'try-catch'. An explicit 'await' helps V8 runtime to provide async stack traces.",
+ "markdown": "Reports an `async` function call without an expected `await` prefix inside an `async` function. Such call returns a `Promise` and control flow is continued immediately.\n\nExample:\n\n\n async function bar() { /* ... */ }\n async function foo() {\n bar(); // bad\n }\n\n\nAfter the quick-fix is applied, the `await` prefix is added:\n\n\n async function bar() { /* ... */ }\n async function foo() {\n await bar(); // good\n }\n\nWhen the 'Report for promises in return statements' checkbox is selected, also suggests adding `await` in return statements. \nWhile this is generally not necessary, it gives two main benefits. \n\n* You won't forget to add `await` when surrounding your code with `try-catch`.\n* An explicit `await` helps V8 runtime to provide [async stack traces](https://bit.ly/v8-zero-cost-async-stack-traces)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6MissingAwait",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Async code and promises",
+ "index": 53,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TailRecursionJS",
+ "shortDescription": {
+ "text": "Tail recursion"
+ },
+ "fullDescription": {
+ "text": "Reports a tail recursion, that is, when a function calls itself as its last action before returning. A tail recursion can always be replaced by looping, which will be considerably faster. Some JavaScript engines perform this optimization, while others do not. Thus, tail recursive solutions may have considerably different performance characteristics in different environments.",
+ "markdown": "Reports a tail recursion, that is, when a function calls itself as its last action before returning. A tail recursion can always be replaced by looping, which will be considerably faster. Some JavaScript engines perform this optimization, while others do not. Thus, tail recursive solutions may have considerably different performance characteristics in different environments."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TailRecursionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6ConvertToForOf",
+ "shortDescription": {
+ "text": "'for..in' is used instead of 'for..of'"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a 'for..in' loop on an array. Suggests replacing it with a 'for..of' loop. 'for..of' loops, which are introduced in ECMAScript 6, iterate over 'iterable' objects. For arrays, this structure is preferable to 'for..in', because it works only with array values but not with array object's properties.",
+ "markdown": "Reports a usage of a [for..in](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) loop on an array. Suggests replacing it with a [for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop. \n`for..of` loops, which are introduced in ECMAScript 6, iterate over `iterable` objects. For arrays, this structure is preferable to `for..in`, because it works only with array values but not with array object's properties."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6ConvertToForOf",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/ES2015 migration aids",
+ "index": 23,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FlowJSCoverage",
+ "shortDescription": {
+ "text": "Code is not covered by Flow"
+ },
+ "fullDescription": {
+ "text": "Reports JavaScript code fragments that are not covered by the Flow type checker. To use this inspection, configure the Flow executable in Settings | Languages & Frameworks | JavaScript.",
+ "markdown": "Reports JavaScript code fragments that are not covered by the Flow type checker. To use this inspection, configure the Flow executable in [Settings \\| Languages \\& Frameworks \\| JavaScript](settings://Settings.JavaScript)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "FlowJSCoverage",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Flow type checker",
+ "index": 16,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ParameterNamingConventionJS",
+ "shortDescription": {
+ "text": "Function parameter naming convention"
+ },
+ "fullDescription": {
+ "text": "Reports a function parameter whose name is too short, too long, or doesn't follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names. Use the standard 'java.util.regex' format regular expressions.",
+ "markdown": "Reports a function parameter whose name is too short, too long, or doesn't follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression\nexpected for local variables names. Use the standard `java.util.regex` format regular expressions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ParameterNamingConventionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Naming conventions",
+ "index": 50,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUndefinedPropertyAssignment",
+ "shortDescription": {
+ "text": "Undefined property assignment"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment to a property that is not defined in the type of a variable. Example: '/**\n * @type {{ property1: string, property2: number }}\n */\nlet myVariable = create();\n\nmyVariable.newProperty = 3; // bad'",
+ "markdown": "Reports an assignment to a property that is not defined in the type of a variable.\n\nExample:\n\n\n /**\n * @type {{ property1: string, property2: number }}\n */\n let myVariable = create();\n\n myVariable.newProperty = 3; // bad\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSUndefinedPropertyAssignment",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "StandardJS",
+ "shortDescription": {
+ "text": "Standard code style"
+ },
+ "fullDescription": {
+ "text": "Reports a discrepancy detected by the JavaScript Standard Style linter. The highlighting severity in the editor is based on the severity level the linter reports.",
+ "markdown": "Reports a discrepancy detected by the [JavaScript Standard Style](https://standardjs.com/) linter. \n\nThe highlighting severity in the editor is based on the severity level the linter reports."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "StandardJS",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code quality tools",
+ "index": 54,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ParametersPerFunctionJS",
+ "shortDescription": {
+ "text": "Function with too many parameters"
+ },
+ "fullDescription": {
+ "text": "Reports a function with too many parameters. Such functions often indicate problems with design. Use the field below to specify the maximum acceptable number of parameters for a function.",
+ "markdown": "Reports a function with too many parameters. Such functions often indicate problems with design.\n\n\nUse the field below to specify the maximum acceptable number of parameters for a function."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "OverlyComplexFunctionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ThisExpressionReferencesGlobalObjectJS",
+ "shortDescription": {
+ "text": "'this' expression which references the global object"
+ },
+ "fullDescription": {
+ "text": "Reports a 'this' expression outside an object literal or a constructor body. Such 'this' expressions reference the top-level \"global\" JavaScript object, but are mostly useless.",
+ "markdown": "Reports a `this` expression outside an object literal or a constructor body. Such `this` expressions reference the top-level \"global\" JavaScript object, but are mostly useless."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ThisExpressionReferencesGlobalObjectJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NestedAssignmentJS",
+ "shortDescription": {
+ "text": "Nested assignment"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment expression nested inside another expression, for example, 'a = b = 1'. Such expressions may be confusing and violate the general design principle that a given construct should do precisely one thing.",
+ "markdown": "Reports an assignment expression nested inside another expression, for example, `a = b = 1`. Such expressions may be confusing and violate the general design principle that a given construct should do precisely one thing."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NestedAssignmentJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DefaultNotLastCaseInSwitchJS",
+ "shortDescription": {
+ "text": "'default' not last case in 'switch'"
+ },
+ "fullDescription": {
+ "text": "Reports a 'switch' statement where the 'default' case comes before another case instead of being the very last case, which may cause confusion.",
+ "markdown": "Reports a `switch` statement where the `default` case comes before another case instead of being the very last case, which may cause confusion."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DefaultNotLastCaseInSwitchJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ConfusingPlusesOrMinusesJS",
+ "shortDescription": {
+ "text": "Confusing sequence of '+' or '-'"
+ },
+ "fullDescription": {
+ "text": "Reports a suspicious combination of '+' or '-' characters in JavaScript code (for example, 'a+++b'. Such sequences are confusing, and their semantics may change through changes in the whitespace.",
+ "markdown": "Reports a suspicious combination of `+` or `-` characters in JavaScript code (for example, `a+++b`. Such sequences are confusing, and their semantics may change through changes in the whitespace."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConfusingPlusesOrMinusesJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSDeprecatedSymbols",
+ "shortDescription": {
+ "text": "Deprecated symbol used"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of a deprecated function variable.",
+ "markdown": "Reports a usage of a deprecated function variable."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSDeprecatedSymbols",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "LocalVariableNamingConventionJS",
+ "shortDescription": {
+ "text": "Local variable naming convention"
+ },
+ "fullDescription": {
+ "text": "Reports a local variable whose name is too short, too long, or doesn't follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression expected for local variables names. Use the standard 'java.util.regex' format regular expressions.",
+ "markdown": "Reports a local variable whose name is too short, too long, or doesn't follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nexpected for local variables names. Use the standard `java.util.regex` format regular expressions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "LocalVariableNamingConventionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Naming conventions",
+ "index": 50,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "EmptyFinallyBlockJS",
+ "shortDescription": {
+ "text": "Empty 'finally' block"
+ },
+ "fullDescription": {
+ "text": "Reports an empty 'finally' block, which usually indicates an error.",
+ "markdown": "Reports an empty `finally` block, which usually indicates an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "EmptyFinallyBlockJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSCommentMatchesSignature",
+ "shortDescription": {
+ "text": "Mismatched JSDoc and function signature"
+ },
+ "fullDescription": {
+ "text": "Reports mismatch between the names and the number of parameters within a JSDoc comment and the actual parameters of a function. Suggests updating parameters in JSDoc comment. Example: '/**\n * @param height Height in pixels\n */\nfunction sq(height, width) {} // width is not documented' After the quick-fix is applied: '/**\n * @param height Height in pixels\n * @param width\n */\nfunction sq(height, width) {}'",
+ "markdown": "Reports mismatch between the names and the number of parameters within a JSDoc comment and the actual parameters of a function. Suggests updating parameters in JSDoc comment.\n\n**Example:**\n\n\n /**\n * @param height Height in pixels\n */\n function sq(height, width) {} // width is not documented\n\nAfter the quick-fix is applied:\n\n\n /**\n * @param height Height in pixels\n * @param width\n */\n function sq(height, width) {}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSCommentMatchesSignature",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UpdateDependencyToLatestVersion",
+ "shortDescription": {
+ "text": "Update package.json dependencies to latest versions"
+ },
+ "fullDescription": {
+ "text": "Suggests to upgrade your package.json dependencies to the latest versions, ignoring specified versions.",
+ "markdown": "Suggests to upgrade your package.json dependencies to the latest versions, ignoring specified versions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "UpdateDependencyToLatestVersion",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "index": 47,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptConfig",
+ "shortDescription": {
+ "text": "Inconsistent tsconfig.json properties"
+ },
+ "fullDescription": {
+ "text": "Reports inconsistency of a 'paths', 'checkJs', or 'extends' property in a tsconfig.json file. The 'checkJs' property requires 'allowJs'. The 'extends' property should be a valid file reference.",
+ "markdown": "Reports inconsistency of a `paths`, `checkJs`, or `extends` property in a tsconfig.json file. \nThe `checkJs` property requires `allowJs`. \nThe `extends` property should be a valid file reference."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TypeScriptConfig",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSSuspiciousNameCombination",
+ "shortDescription": {
+ "text": "Suspicious variable/parameter name combination"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment or a function call where the name of the target variable or the function parameter does not match the name of the value assigned to it. Example: 'var x = 0;\n var y = x;' or 'var x = 0, y = 0;\n var rc = new Rectangle(y, x, 20, 20);' Here the inspection guesses that 'x' and 'y' are mixed up. Specify the names that should not be used together. An error is reported if a parameter name or an assignment target name contains words from one group while the name of the assigned or passed variable contains words from another group.",
+ "markdown": "Reports an assignment or a function call where the name of the target variable or the function parameter does not match the name of the value assigned to it.\n\nExample:\n\n\n var x = 0;\n var y = x;\n\nor\n\n\n var x = 0, y = 0;\n var rc = new Rectangle(y, x, 20, 20);\n\nHere the inspection guesses that `x` and `y` are mixed up.\n\nSpecify the names that should not be used together. An error is reported\nif a parameter name or an assignment target name contains words from one group while the name of the assigned or passed\nvariable contains words from another group."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSSuspiciousNameCombination",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnresolvedExtXType",
+ "shortDescription": {
+ "text": "Unresolved Ext JS xtype"
+ },
+ "fullDescription": {
+ "text": "Reports an Ext JS 'xtype' reference that doesn't have a corresponding class.",
+ "markdown": "Reports an Ext JS `xtype` reference that doesn't have a corresponding class."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnresolvedExtXType",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ForLoopThatDoesntUseLoopVariableJS",
+ "shortDescription": {
+ "text": "'for' loop where update or condition does not use loop variable"
+ },
+ "fullDescription": {
+ "text": "Reports a 'for' loop where the condition or update does not use the 'for' loop variable.",
+ "markdown": "Reports a `for` loop where the condition or update does not use the `for` loop variable."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ForLoopThatDoesntUseLoopVariableJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptAbstractClassConstructorCanBeMadeProtected",
+ "shortDescription": {
+ "text": "Abstract class constructor can be made protected"
+ },
+ "fullDescription": {
+ "text": "Reports a public constructor of an abstract class and suggests making it protected (because it is useless to have it public).",
+ "markdown": "Reports a public constructor of an abstract class and suggests making it protected (because it is useless to have it public)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptAbstractClassConstructorCanBeMadeProtected",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FunctionWithMultipleReturnPointsJS",
+ "shortDescription": {
+ "text": "Function with multiple return points"
+ },
+ "fullDescription": {
+ "text": "Reports a function with multiple return points. Such functions are hard to understand and maintain.",
+ "markdown": "Reports a function with multiple return points. Such functions are hard to understand and maintain."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FunctionWithMultipleReturnPointsJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSIgnoredPromiseFromCall",
+ "shortDescription": {
+ "text": "Result of method call returning a promise is ignored"
+ },
+ "fullDescription": {
+ "text": "Reports a function call that returns a 'Promise' that is not used later. Such calls are usually unintended and indicate an error.",
+ "markdown": "Reports a function call that returns a `Promise` that is not used later. Such calls are usually unintended and indicate an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSIgnoredPromiseFromCall",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Async code and promises",
+ "index": 53,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ThreeNegationsPerFunctionJS",
+ "shortDescription": {
+ "text": "Function with more than three negations"
+ },
+ "fullDescription": {
+ "text": "Reports a function with three or more negation operations ('!' or '!='). Such functions may be unnecessarily confusing.",
+ "markdown": "Reports a function with three or more negation operations (`!` or `!=`). Such functions may be unnecessarily confusing."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FunctionWithMoreThanThreeNegationsJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSRemoveUnnecessaryParentheses",
+ "shortDescription": {
+ "text": "Unnecessary parentheses"
+ },
+ "fullDescription": {
+ "text": "Reports redundant parentheses. In expressions: 'var x = ((1) + 2) + 3' In arrow function argument lists: 'var incrementer = (x) => x + 1' In TypeScript and Flow type declarations: 'type Card = (Suit & Rank) | (Suit & Number)'",
+ "markdown": "Reports redundant parentheses.\n\nIn expressions:\n\n var x = ((1) + 2) + 3\n\nIn arrow function argument lists:\n\n var incrementer = (x) => x + 1\n\nIn TypeScript and Flow type declarations:\n\n type Card = (Suit & Rank) | (Suit & Number)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSRemoveUnnecessaryParentheses",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "OverlyComplexBooleanExpressionJS",
+ "shortDescription": {
+ "text": "Overly complex boolean expression"
+ },
+ "fullDescription": {
+ "text": "Reports a boolean expression with too many terms. Such expressions may be confusing and bug-prone. Use the field below to specify the maximum number of terms allowed in an arithmetic expression.",
+ "markdown": "Reports a boolean expression with too many terms. Such expressions may be confusing and bug-prone.\n\n\nUse the field below to specify the maximum number of terms allowed in an arithmetic expression."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "OverlyComplexBooleanExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "OverlyComplexArithmeticExpressionJS",
+ "shortDescription": {
+ "text": "Overly complex arithmetic expression"
+ },
+ "fullDescription": {
+ "text": "Reports an arithmetic expression with too many terms. Such expressions may be confusing and bug-prone. Use the field below to specify the maximum number of terms allowed in an arithmetic expression.",
+ "markdown": "Reports an arithmetic expression with too many terms. Such expressions may be confusing and bug-prone.\n\n\nUse the field below to specify the maximum number of terms allowed in an arithmetic expression."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "OverlyComplexArithmeticExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6RedundantNestingInTemplateLiteral",
+ "shortDescription": {
+ "text": "Redundant nesting in template literal"
+ },
+ "fullDescription": {
+ "text": "Reports nested instances of a string or a template literal. Suggests inlining the nested instances into the containing template string. Example: 'let a = `Hello, ${`Brave ${\"New\"}`} ${\"World\"}!`' After applying the quick-fix the code looks as follows: 'let a = `Hello, Brave New World!`'",
+ "markdown": "Reports nested instances of a string or a template literal. Suggests inlining the nested instances into the containing template string.\n\nExample:\n\n\n let a = `Hello, ${`Brave ${\"New\"}`} ${\"World\"}!`\n\nAfter applying the quick-fix the code looks as follows:\n\n\n let a = `Hello, Brave New World!`\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6RedundantNestingInTemplateLiteral",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "StringLiteralBreaksHTMLJS",
+ "shortDescription": {
+ "text": "String literal which breaks HTML parsing"
+ },
+ "fullDescription": {
+ "text": "Reports a string literal that contains a '' sequence. Such strings may result in incorrect parsing of any HTML in which the JavaScript code is embedded.",
+ "markdown": "Reports a string literal that contains a `` sequence. Such strings may result in incorrect parsing of any HTML in which the JavaScript code is embedded."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "StringLiteralBreaksHTMLJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Validity issues",
+ "index": 28,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NestingDepthJS",
+ "shortDescription": {
+ "text": "Overly nested function"
+ },
+ "fullDescription": {
+ "text": "Reports a function whose body contains statements that are too deeply nested within other statements. Such functions may be confusing and indicate that refactoring may be necessary. Use the field provided below to specify the maximum acceptable nesting depth allowed in a function.",
+ "markdown": "Reports a function whose body contains statements that are too deeply nested within other statements. Such functions may be confusing and indicate that refactoring may be necessary.\n\n\nUse the field provided below to specify the maximum acceptable nesting depth allowed in a function."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "OverlyNestedFunctionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Function metrics",
+ "index": 35,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptSuspiciousConstructorParameterAssignment",
+ "shortDescription": {
+ "text": "Assigned constructor field parameter"
+ },
+ "fullDescription": {
+ "text": "Reports a common mistake in TypeScript code, when a class field is declared as a constructor parameter, and then this parameter is assigned. In this case, the corresponding field won't be assigned, only the local parameter value is modified. 'class Foo {\n constructor(private p: number) {\n p = 1; //must be this.p = 1;\n }\n}'",
+ "markdown": "Reports a common mistake in TypeScript code, when a class field is declared as a constructor parameter, and then this parameter is assigned. \nIn this case, the corresponding field *won't* be assigned, only the local parameter value is modified.\n\n\n class Foo {\n constructor(private p: number) {\n p = 1; //must be this.p = 1;\n }\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TypeScriptSuspiciousConstructorParameterAssignment",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ChainedFunctionCallJS",
+ "shortDescription": {
+ "text": "Chained function call"
+ },
+ "fullDescription": {
+ "text": "Reports a function call whose target is another function call, for example, 'foo().bar()'",
+ "markdown": "Reports a function call whose target is another function call, for example, `foo().bar()`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ChainedFunctionCallJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DuplicateConditionJS",
+ "shortDescription": {
+ "text": "Duplicate condition in 'if' statement"
+ },
+ "fullDescription": {
+ "text": "Reports duplicate conditions in different branches of an 'if' statement. Duplicate conditions usually represent programmer oversight. Example: 'if (a) {\n ...\n } else if (a) {\n ...\n }'",
+ "markdown": "Reports duplicate conditions in different branches of an `if` statement. Duplicate conditions usually represent programmer oversight.\n\nExample:\n\n\n if (a) {\n ...\n } else if (a) {\n ...\n }\n\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DuplicateConditionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NestedFunctionCallJS",
+ "shortDescription": {
+ "text": "Nested function call"
+ },
+ "fullDescription": {
+ "text": "Reports a function call that is used as an argument in another function call, for example, 'foo(bar())'",
+ "markdown": "Reports a function call that is used as an argument in another function call, for example, `foo(bar())`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NestedFunctionCallJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TrivialIfJS",
+ "shortDescription": {
+ "text": "Redundant 'if' statement"
+ },
+ "fullDescription": {
+ "text": "Reports an 'if' statement that can be simplified to a single assignment or a 'return' statement. Example: 'if(foo())\n {\n return true;\n }\n else\n {\n return false;\n }' After applying the quick-fix the code looks as follows: 'return foo();'",
+ "markdown": "Reports an `if` statement that can be simplified to a single assignment or a `return` statement.\n\nExample:\n\n\n if(foo())\n {\n return true;\n }\n else\n {\n return false;\n }\n\nAfter applying the quick-fix the code looks as follows:\n\n return foo();\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "RedundantIfStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSEqualityComparisonWithCoercion",
+ "shortDescription": {
+ "text": "Equality operator may cause type coercion"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of an equality operator that may cause unexpected type coercions. Suggests replacing '==' and '!=' with type-safe equality operators '===' and '!=='. Depending on the option selected, one of the following cases will be reported: All usages of '==' and '!=' operators. All usages except comparison with null. Some code styles allow using 'x == null' as a replacement for 'x === null || x === undefined'. Only suspicious expressions, such as: '==' or '!=' comparisons with '0', '''', 'null', 'true', 'false', or 'undefined'.",
+ "markdown": "Reports a usage of an equality operator that may cause unexpected type coercions. Suggests replacing `==` and `!=` with type-safe equality operators `===` and `!==`.\n\nDepending on the option selected, one of the following cases will be reported:\n\n* All usages of `==` and `!=` operators.\n* All usages except comparison with null. Some code styles allow using `x == null` as a replacement for `x === null || x === undefined`.\n* Only suspicious expressions, such as: `==` or `!=` comparisons with `0`, `''`, `null`, `true`, `false`, or `undefined`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "EqualityComparisonWithCoercionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CommaExpressionJS",
+ "shortDescription": {
+ "text": "Comma expression"
+ },
+ "fullDescription": {
+ "text": "Reports a comma expression. Such expressions are often a sign of overly clever code, and may lead to subtle bugs. Comma expressions in the initializer or in the update section of 'for' loops are ignored.",
+ "markdown": "Reports a comma expression. Such expressions are often a sign of overly clever code, and may lead to subtle bugs. Comma expressions in the initializer or in the update section of `for` loops are ignored."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "CommaExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ConstantOnLHSOfComparisonJS",
+ "shortDescription": {
+ "text": "Constant on left side of comparison"
+ },
+ "fullDescription": {
+ "text": "Reports a comparison operation with a constant value in the left-hand side. According to coding conventions, constants should be in the right-hand side of comparisons.",
+ "markdown": "Reports a comparison operation with a constant value in the left-hand side. According to coding conventions, constants should be in the right-hand side of comparisons."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConstantOnLefSideOfComparisonJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSCheckFunctionSignatures",
+ "shortDescription": {
+ "text": "Signature mismatch"
+ },
+ "fullDescription": {
+ "text": "Reports a JavaScript call expression where the arguments do not match the signature of the referenced function, including the types of arguments and their number. Also, reports if the overloading function doesn't match the overloaded one in terms of parameters and return types. TypeScript code is ignored.",
+ "markdown": "Reports a JavaScript call expression where the arguments do not match the signature of the referenced function, including the types of arguments and their number. Also, reports if the overloading function doesn't match the overloaded one in terms of parameters and return types.\n\nTypeScript code is ignored."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSCheckFunctionSignatures",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "AssignmentResultUsedJS",
+ "shortDescription": {
+ "text": "Result of assignment used"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment expression where the result of the assignment is used in the containing expression. Such assignments often indicate coding errors, for example, '=' instead of '=='. Moreover, they can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Expressions in parentheses are ignored.",
+ "markdown": "Reports an assignment expression where the result of the assignment is used in the containing expression. Such assignments often indicate coding errors, for example, `=` instead of `==`. Moreover, they can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways.\n\nExpressions in parentheses are ignored."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "AssignmentResultUsedJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6BindWithArrowFunction",
+ "shortDescription": {
+ "text": "Suspicious usage of 'bind' with arrow function"
+ },
+ "fullDescription": {
+ "text": "Reports 'bind' used together with an arrow function. Because arrow functions use lexical 'this', a 'bind' call will have no effect on them. See here for details.",
+ "markdown": "Reports `bind` used together with an arrow function. \nBecause arrow functions use lexical `this`, a `bind` call will have no effect on them. \nSee [here](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Lexical_this) for details."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ES6BindWithArrowFunction",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ConstantOnRHSOfComparisonJS",
+ "shortDescription": {
+ "text": "Constant on right side of comparison"
+ },
+ "fullDescription": {
+ "text": "Reports a comparison operation with a constant in the right-hand side. According to coding conventions, constants should only be in the left-hand side of comparisons.",
+ "markdown": "Reports a comparison operation with a constant in the right-hand side. According to coding conventions, constants should only be in the left-hand side of comparisons."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ConstantOnRightSideOfComparisonJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSComparisonWithNaN",
+ "shortDescription": {
+ "text": "Comparison with NaN"
+ },
+ "fullDescription": {
+ "text": "Reports a comparison with NaN. Comparisons like 'expr == NaN' or 'expr === NaN' are always evaluated to 'false'.",
+ "markdown": "Reports a comparison with NaN. Comparisons like `expr == NaN` or `expr === NaN` are always evaluated to `false`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSComparisonWithNaN",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnnecessarySemicolon",
+ "shortDescription": {
+ "text": "Unnecessary semicolon"
+ },
+ "fullDescription": {
+ "text": "Reports an unneeded semicolon.",
+ "markdown": "Reports an unneeded semicolon."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnnecessarySemicolon",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnnecessaryLabelJS",
+ "shortDescription": {
+ "text": "Unnecessary label"
+ },
+ "fullDescription": {
+ "text": "Reports an unused label.",
+ "markdown": "Reports an unused label."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnnecessaryLabelJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSBitwiseOperatorUsage",
+ "shortDescription": {
+ "text": "Bitwise operator usage"
+ },
+ "fullDescription": {
+ "text": "Reports a suspicious usage of a bitwise AND (\"'&'\") or OR (\"'|'\") operator. Usually it is a typo and the result of applying boolean operations AND (\"'&&'\") and OR (\"'||'\") is expected.",
+ "markdown": "Reports a suspicious usage of a bitwise AND (\"`&`\") or OR (\"`|`\") operator. Usually it is a typo and the result of applying boolean operations AND (\"`&&`\") and OR (\"`||`\") is expected."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSBitwiseOperatorUsage",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Bitwise operation issues",
+ "index": 22,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptUnresolvedReference",
+ "shortDescription": {
+ "text": "Unresolved TypeScript reference"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved reference in TypeScript code.",
+ "markdown": "Reports an unresolved reference in TypeScript code."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "TypeScriptUnresolvedReference",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnresolvedReference",
+ "shortDescription": {
+ "text": "Unresolved reference"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved reference in JavaScript code. In TypeScript code, a problem is reported if the part of the reference before the dot is of the type 'any'.",
+ "markdown": "Reports an unresolved reference in JavaScript code. In TypeScript code, a problem is reported if the part of the reference before the dot is of the type `any`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSUnresolvedReference",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSNonStrictModeUsed",
+ "shortDescription": {
+ "text": "Non-strict mode used"
+ },
+ "fullDescription": {
+ "text": "Reports a JavaScript file that is not in the 'strict' mode.",
+ "markdown": "Reports a JavaScript file that is not in the `strict` mode."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSNonStrictModeUsed",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6RedundantAwait",
+ "shortDescription": {
+ "text": "Redundant 'await' expression"
+ },
+ "fullDescription": {
+ "text": "Reports a redundant usage of 'await', such as 'await await', or awaiting a non-promise result. When the 'Report for promises' option is selected, suggests removing 'await' before promises when applicable (in 'return' statements, and with 'Promise.resolve/reject'). Removing 'await' in such contexts causes two problems. Surrounding your code with 'try-catch' and forgetting to add 'await' will change code semantics while you may fail to notice that. Having an explicit 'await' may prevent the V8 runtime from providing async stack traces.",
+ "markdown": "Reports a redundant usage of `await`, such as `await await`, or awaiting a non-promise result.\n\n\nWhen the 'Report for promises' option is selected, suggests removing `await` before promises when applicable\n(in `return` statements, and with `Promise.resolve/reject`).\n\nRemoving `await` in such contexts causes two problems.\n\n* Surrounding your code with `try-catch` and forgetting to add `await` will change code semantics while you may fail to notice that.\n* Having an explicit `await` may prevent the V8 runtime from providing [async stack traces](http://bit.ly/v8-zero-cost-async-stack-traces)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "ES6RedundantAwait",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Async code and promises",
+ "index": 53,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "NestedSwitchStatementJS",
+ "shortDescription": {
+ "text": "Nested 'switch' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'switch' statement that is nested in another 'switch' statement. Nested 'switch' statements may be very confusing, particularly if indenting is inconsistent.",
+ "markdown": "Reports a `switch` statement that is nested in another `switch` statement. Nested `switch` statements may be very confusing, particularly if indenting is inconsistent."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "NestedSwitchStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnterminatedStatementJS",
+ "shortDescription": {
+ "text": "Unterminated statement"
+ },
+ "fullDescription": {
+ "text": "Reports a statement without a semicolon or a newline at the end. Select the 'Terminate statements with semicolons' option in Editor | Code Style | JavaScript or TypeScript - Punctuation to report any statement that doesn't end with a semicolon, even if a newline is used. According to some coding styles, semicolons are preferred to line-breaks for consistency with the other languages.",
+ "markdown": "Reports a statement without a semicolon or a newline at the end.\n\nSelect the 'Terminate statements with semicolons' option in *Editor \\| Code Style \\| JavaScript or TypeScript - Punctuation* to report any statement that doesn't end with a semicolon, even if a newline is used.\nAccording to some coding styles, semicolons are preferred to line-breaks for consistency with the other languages."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnterminatedStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Code style issues",
+ "index": 11,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "IfStatementWithIdenticalBranchesJS",
+ "shortDescription": {
+ "text": "'if' statement with identical branches"
+ },
+ "fullDescription": {
+ "text": "Reports an 'if' statement with identical 'then' and 'else' branches. Such statements are almost certainly an error.",
+ "markdown": "Reports an `if` statement with identical `then` and `else` branches. Such statements are almost certainly an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "IfStatementWithIdenticalBranchesJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PlatformDetectionJS",
+ "shortDescription": {
+ "text": "Inaccurate platform detection"
+ },
+ "fullDescription": {
+ "text": "Reports a common JavaScript pattern for detecting the browser or operating system in which the script is run. In addition to pointing out non-portable constructs, these platform detection patterns are often incomplete and easily fooled. For most cases, detection of individual environment features is preferable to attempting to detect the entire platform. Patterns detected include: 'document.all' 'document.layers' 'navigator.userAgent' 'navigator.oscpu' 'navigator.appName' 'navigator.appCodeName' 'navigator.platform'",
+ "markdown": "Reports a common JavaScript pattern for detecting the browser or operating system in which the script is run. In addition to pointing out non-portable constructs, these platform detection patterns are often incomplete and easily fooled. For most cases, detection of individual environment features is preferable to attempting to detect the entire platform.\n\nPatterns detected include:\n\n* `document.all`\n* `document.layers`\n* `navigator.userAgent`\n* `navigator.oscpu`\n* `navigator.appName`\n* `navigator.appCodeName`\n* `navigator.platform`"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PlatformDetectionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/DOM issues",
+ "index": 52,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "AssignmentToFunctionParameterJS",
+ "shortDescription": {
+ "text": "Assignment to function parameter"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment to a function parameter, including increment and decrement operations. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error.",
+ "markdown": "Reports an assignment to a function parameter, including increment and decrement operations. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "AssignmentToFunctionParameterJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSConsecutiveCommasInArrayLiteral",
+ "shortDescription": {
+ "text": "Consecutive commas in array literal"
+ },
+ "fullDescription": {
+ "text": "Reports a consecutive comma in an array literal. The skipped element accepts the 'undefined' value, but it could be done unintentionally, for example, when commas are at the end of one line and at the beginning of the next one.",
+ "markdown": "Reports a consecutive comma in an array literal. The skipped element accepts the `undefined` value, but it could be done unintentionally, for example, when commas are at the end of one line and at the beginning of the next one."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSConsecutiveCommasInArrayLiteral",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FallThroughInSwitchStatementJS",
+ "shortDescription": {
+ "text": "Fallthrough in 'switch' statement"
+ },
+ "fullDescription": {
+ "text": "Reports a 'switch' statement where control can proceed from a branch to the next one. Such \"fall-through\" often indicates an error, for example, a missing 'break' or 'return'.",
+ "markdown": "Reports a `switch` statement where control can proceed from a branch to the next one. Such \"fall-through\" often indicates an error, for example, a missing `break` or `return`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "FallThroughInSwitchStatementJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CallerJS",
+ "shortDescription": {
+ "text": "Use of 'caller' property"
+ },
+ "fullDescription": {
+ "text": "Reports a usage of the 'caller' property in a JavaScript function. Using this property to access the stack frame of the calling method can be extremely confusing and result in subtle bugs.",
+ "markdown": "Reports a usage of the `caller` property in a JavaScript function. Using this property to access the stack frame of the calling method can be extremely confusing and result in subtle bugs."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "CallerJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptExplicitMemberType",
+ "shortDescription": {
+ "text": "Explicit types"
+ },
+ "fullDescription": {
+ "text": "Reports a type annotation that doesn't match the current code style for explicit types. Type declarations are not necessary when the type that is inferred from the context exactly matches the type annotation, for example: 'var pi: number = 3.14' In some cases it is preferable to always have explicit types - this prevents accidental type changes and makes code more explicit.",
+ "markdown": "Reports a type annotation that doesn't match the current code style for explicit types.\n\n\nType declarations are not necessary when the type that is inferred from the context exactly matches the type annotation, for example:\n\n\n var pi: number = 3.14\n\nIn some cases it is preferable to always have explicit types - this prevents accidental type changes and makes code more explicit."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "TypeScriptExplicitMemberType",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSDuplicateCaseLabel",
+ "shortDescription": {
+ "text": "Duplicate 'case' label"
+ },
+ "fullDescription": {
+ "text": "Reports a duplicated 'case' label on a 'switch' statement, which normally indicates an error.",
+ "markdown": "Reports a duplicated `case` label on a `switch` statement, which normally indicates an error."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSDuplicateCaseLabel",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnreachableSwitchBranches",
+ "shortDescription": {
+ "text": "Unreachable 'case' branch of a 'switch' statement"
+ },
+ "fullDescription": {
+ "text": "Reports an unreachable 'case' branch of a 'switch' statement. Example: '/**\n * @param {('foo' | 'bar')} p\n */\nfunction foo(p) {\n switch (p) {\n case 'foo': break;\n case 'bar': break;\n case 'baz': break; // unreachable\n }\n}'",
+ "markdown": "Reports an unreachable `case` branch of a `switch` statement.\n\nExample:\n\n\n /**\n * @param {('foo' | 'bar')} p\n */\n function foo(p) {\n switch (p) {\n case 'foo': break;\n case 'bar': break;\n case 'baz': break; // unreachable\n }\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnreachableSwitchBranches",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TypeScriptDuplicateUnionOrIntersectionType",
+ "shortDescription": {
+ "text": "Duplicate union or intersection type component"
+ },
+ "fullDescription": {
+ "text": "Reports a duplicate type inside a union or intersection.",
+ "markdown": "Reports a duplicate type inside a union or intersection."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "TypeScriptDuplicateUnionOrIntersectionType",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/TypeScript",
+ "index": 27,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "TrivialConditionalJS",
+ "shortDescription": {
+ "text": "Redundant conditional expression"
+ },
+ "fullDescription": {
+ "text": "Reports a conditional expression of the form 'condition ? true : false\ncondition ? false : true' These expressions may be safely converted to 'condition\n!condition'",
+ "markdown": "Reports a conditional expression of the form\n\n\n condition ? true : false\n condition ? false : true\n\n\nThese expressions may be safely converted to\n\n\n condition\n !condition\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "RedundantConditionalExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "InnerHTMLJS",
+ "shortDescription": {
+ "text": "Use of 'innerHTML' property"
+ },
+ "fullDescription": {
+ "text": "Reports a JavaScript access to DOM nodes as text using the 'innerHTML' property. Most usages of 'innerHTML' are performed better with explicit DOM calls, such as 'getElementByID()' and 'createElement()'. Additionally, 'innerHTML' will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can lead to difficulties in diagnosing bugs.",
+ "markdown": "Reports a JavaScript access to DOM nodes as text using the `innerHTML` property. Most usages of `innerHTML` are performed better with explicit DOM calls, such as `getElementByID()` and `createElement()`. Additionally, `innerHTML` will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can lead to difficulties in diagnosing bugs."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "InnerHTMLJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/DOM issues",
+ "index": 52,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ES6UnusedImports",
+ "shortDescription": {
+ "text": "Unused import"
+ },
+ "fullDescription": {
+ "text": "Reports a redundant 'import' statement. This is usually the case if the imported symbols are not used in the source file. To avoid side-effects, consider using bare import 'import 'packageName'' instead of the regular one.",
+ "markdown": "Reports a redundant `import` statement. This is usually the case if the imported symbols are not used in the source file. To avoid side-effects, consider using bare import `import 'packageName'` instead of the regular one."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ES6UnusedImports",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Imports and dependencies",
+ "index": 47,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSMissingSwitchBranches",
+ "shortDescription": {
+ "text": "'switch' statement has missing branches"
+ },
+ "fullDescription": {
+ "text": "Reports a 'switch' statement on a variable of the type 'enum' or 'union' when the statement doesn't cover some value options from the type.",
+ "markdown": "Reports a `switch` statement on a variable of the type `enum` or `union` when the statement doesn't cover some value options from the type."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSMissingSwitchBranches",
+ "ideaSeverity": "INFORMATION",
+ "qodanaSeverity": "Info"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSSwitchVariableDeclarationIssue",
+ "shortDescription": {
+ "text": "Variable is declared and being used in different 'case' clauses"
+ },
+ "fullDescription": {
+ "text": "Reports a variable that is declared in one 'case' clause of a 'switch' statement but is used in another 'case' clause of the same statement. For block-scoped variables, this results in throwing a 'ReferenceError'. For 'var' variables, it indicates a potential error. Disable the inspection for 'var' variables if this pattern is used intentionally.",
+ "markdown": "Reports a variable that is declared in one `case` clause of a `switch` statement but is used in another `case` clause of the same statement. For block-scoped variables, this results in throwing a `ReferenceError`. For `var` variables, it indicates a potential error.\n\nDisable the inspection for `var` variables if this pattern is used intentionally."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSSwitchVariableDeclarationIssue",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Switch statement issues",
+ "index": 51,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "VoidExpressionJS",
+ "shortDescription": {
+ "text": "'void' expression"
+ },
+ "fullDescription": {
+ "text": "Reports a 'void' expression.",
+ "markdown": "Reports a `void` expression."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "VoidExpressionJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially undesirable code constructs",
+ "index": 15,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSJQueryEfficiency",
+ "shortDescription": {
+ "text": "JQuery selector can be optimized"
+ },
+ "fullDescription": {
+ "text": "Reports a duplicated jQuery selector that can be cached or a usage of an attribute or a pseudo-selector (optional).",
+ "markdown": "Reports a duplicated jQuery selector that can be cached or a usage of an attribute or a pseudo-selector (optional)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSJQueryEfficiency",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSAssignmentUsedAsCondition",
+ "shortDescription": {
+ "text": "Assignment used as condition"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment that is used as the condition of an 'if', 'while', 'for', or 'do' statement. Although occasionally intended, this usage is confusing, and often indicates a typo (for example, '=' instead of '==').",
+ "markdown": "Reports an assignment that is used as the condition of an `if`, `while`, `for`, or `do` statement. Although occasionally intended, this usage is confusing, and often indicates a typo (for example, `=` instead of `==`)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSAssignmentUsedAsCondition",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Assignment issues",
+ "index": 40,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnreachableCodeJS",
+ "shortDescription": {
+ "text": "Unreachable code"
+ },
+ "fullDescription": {
+ "text": "Reports code that can never be executed, which almost certainly indicates an error",
+ "markdown": "Reports code that can never be executed, which almost certainly indicates an error"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "UnreachableCodeJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ForLoopReplaceableByWhileJS",
+ "shortDescription": {
+ "text": "'for' loop may be replaced by 'while' loop"
+ },
+ "fullDescription": {
+ "text": "Reports a 'for' loop that contains neither initialization nor an update component. Suggests replacing the loop with a simpler 'while' statement. Example: 'for(; exitCondition(); ) {\n process();\n }' After the quick-fix is applied the result looks like: 'while(exitCondition()) {\n process();\n }' Use the checkbox below if you wish this inspection to ignore for loops with trivial or non-existent conditions.",
+ "markdown": "Reports a `for` loop that contains neither initialization nor an update component. Suggests replacing the loop with a simpler `while` statement.\n\nExample:\n\n\n for(; exitCondition(); ) {\n process();\n }\n\nAfter the quick-fix is applied the result looks like:\n\n\n while(exitCondition()) {\n process();\n }\n\nUse the checkbox below if you wish this inspection to ignore **for** loops with trivial or non-existent conditions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ForLoopReplaceableByWhile",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Control flow issues",
+ "index": 1,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSSuspiciousEqPlus",
+ "shortDescription": {
+ "text": "Suspicious '=+' assignment"
+ },
+ "fullDescription": {
+ "text": "Reports an assignment in the form 'a =+ b'. Suggests replacing with 'a += b'.",
+ "markdown": "Reports an assignment in the form `a =+ b`. Suggests replacing with `a += b`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSSuspiciousEqPlus",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "EmptyStatementBodyJS",
+ "shortDescription": {
+ "text": "Statement with empty body"
+ },
+ "fullDescription": {
+ "text": "Reports an 'if', 'while', 'for', or 'with' statement with an empty body. Such statements often result from typos, and may cause confusion. Use the checkbox below to specify whether the statements with empty block statements as bodies should be reported.",
+ "markdown": "Reports an `if`, `while`, `for`, or `with` statement with an empty body. Such statements often result from typos, and may cause confusion.\n\n\nUse the checkbox below to specify whether the statements with empty block statements as bodies\nshould be reported."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "StatementWithEmptyBodyJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Potentially confusing code constructs",
+ "index": 29,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSVoidFunctionReturnValueUsed",
+ "shortDescription": {
+ "text": "Void function return value used"
+ },
+ "fullDescription": {
+ "text": "Reports a return value of a function that doesn't return anything. Calling of such functions always produces an 'undefined' value and such assignment may indicate an error. Example: 'let a = console.log('foo');' The following usages are ignored: Inside a return statement In some binary operations For overridden non-void functions",
+ "markdown": "Reports a return value of a function that doesn't return anything. Calling of such functions always produces an `undefined` value and such assignment may indicate an error.\n\nExample:\n\n\n let a = console.log('foo');\n\nThe following usages are ignored:\n\n* Inside a return statement\n* In some binary operations\n* For overridden non-void functions"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSVoidFunctionReturnValueUsed",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Probable bugs",
+ "index": 17,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSUnusedLocalSymbols",
+ "shortDescription": {
+ "text": "Unused local symbol"
+ },
+ "fullDescription": {
+ "text": "Reports an unused locally accessible parameter, local variable, function, class, or private member declaration.",
+ "markdown": "Reports an unused locally accessible parameter, local variable, function, class, or private member declaration."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JSUnusedLocalSymbols",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Unused symbols",
+ "index": 19,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ReturnFromFinallyBlockJS",
+ "shortDescription": {
+ "text": "'return' inside 'finally' block"
+ },
+ "fullDescription": {
+ "text": "Reports a 'return' statement inside a 'finally' block. Such 'return' statements may mask exceptions thrown, and complicate debugging.",
+ "markdown": "Reports a `return` statement inside a `finally` block. Such `return` statements may mask exceptions thrown, and complicate debugging."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ReturnInsideFinallyBlockJS",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Try statement issues",
+ "index": 33,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JSValidateTypes",
+ "shortDescription": {
+ "text": "Type mismatch"
+ },
+ "fullDescription": {
+ "text": "Reports incorrect type of: a parameter in a function call a return value an assigned expression TypeScript code is ignored.",
+ "markdown": "Reports incorrect type of:\n\n* a parameter in a function call\n* a return value\n* an assigned expression\n\nTypeScript code is ignored."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JSValidateTypes",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/General",
+ "index": 12,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "org.editorconfig.editorconfigjetbrains",
+ "version": "233.14241",
+ "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": {
+ "suppressToolId": "EditorConfigCharClassRedundancy",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigRootDeclarationUniqueness",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigNumerousWildcards",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigPartialOverride",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigEmptySection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigShadowingOption",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigListAcceptability",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigKeyCorrectness",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigPatternEnumerationRedundancy",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigEncoding",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigRootDeclarationCorrectness",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigReferenceCorrectness",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigPairAcceptability",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigPatternRedundancy",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigNoMatchingFiles",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigDeprecatedDescriptor",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigWildcardRedundancy",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigHeaderUniqueness",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigShadowedOption",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigEmptyHeader",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigValueCorrectness",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "EditorConfigVerifyByCore",
+ "shortDescription": {
+ "text": "Invalid .editorconfig file"
+ },
+ "fullDescription": {
+ "text": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied.",
+ "markdown": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "EditorConfigVerifyByCore",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigValueUniqueness",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigMissingRequiredDeclaration",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigCharClassLetterRedundancy",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigSpaceInHeader",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigOptionRedundancy",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigUnusedDeclaration",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "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": {
+ "suppressToolId": "EditorConfigUnexpectedComma",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "EditorConfig",
+ "index": 2,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "Pythonid",
+ "version": "233.14241",
+ "rules": [
+ {
+ "id": "PyPandasSeriesToListInspection",
+ "shortDescription": {
+ "text": "Method Series.to_list() is recommended"
+ },
+ "fullDescription": {
+ "text": "Reports redundant 'list' in 'list(Series.values)' statement for pandas and polars libraries. Such 'Series' values extraction can be replaced with the 'to_list()' function call. Example: list(df['column'].values)\n When the quick-fix is applied, the code changes to: df['column'].to_list()",
+ "markdown": "Reports redundant `list` in `list(Series.values)` statement for pandas and polars libraries.\nSuch `Series` values extraction can be replaced with the `to_list()` function call.\n\n**Example:**\n\n```\nlist(df['column'].values)\n```\n\nWhen the quick-fix is applied, the code changes to:\n\n```\ndf['column'].to_list()\n```"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyPackages",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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])' 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\n def do_mult(a, b):\n c = a * b\n return set([c, a, b])\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def do_mult(a, b):\n c = a * b\n return {c, a, b}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PySetFunctionToLiteral",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "Query_index_required",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Google App Engine (Python)",
+ "index": 4,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyOverridesInspection",
+ "shortDescription": {
+ "text": "Invalid usages of @override decorator"
+ },
+ "fullDescription": {
+ "text": "Reports when a method decorated with @override doesn't have a matching method in its ancestor classes Example: 'from typing import override\n\nclass Parent:\n def foo(self) -> int:\n return 1\n\n def bar(self, x: str) -> str:\n return x\n\nclass Child(Parent):\n @override\n def foo(self) -> int:\n return 2\n\n @override # Missing super method for override function\n def baz(self) -> int:\n return 1'",
+ "markdown": "Reports when a method decorated with @override doesn't have a matching method in its ancestor classes\n\n**Example:**\n\n\n from typing import override\n\n class Parent:\n def foo(self) -> int:\n return 1\n\n def bar(self, x: str) -> str:\n return x\n\n class Child(Parent):\n @override\n def foo(self) -> int:\n return 2\n\n @override # Missing super method for override function\n def baz(self) -> int:\n return 1\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyOverrides",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class MyClass(object):\n def __new__(cls, arg1):\n return super().__new__(cls)\n\n def __init__(self):\n pass\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": {
+ "suppressToolId": "PyInitNewSignature",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "EndBlockNamesInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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' 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\n class Fruit:\n def __init__(self):\n pass\n\n\n class Pear(Fruit):\n def __init__(self):\n pass\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\n class Fruit:\n def __init__(self):\n pass\n\n\n class Pear(Fruit):\n def __init__(self):\n super().__init__()\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyMissingConstructor",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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)' 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\n def func(s):\n if s.isdigit() == True:\n return int(s)\n\nWith the quick-fix applied, the code fragment will be simplified to:\n\n\n def func(s):\n if s.isdigit():\n return int(s)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PySimplifyBooleanCheck",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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: Example: '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**Example:**\n\n\n class Record:\n @property\n def as_json(self):\n\n json = Record().as_json()\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyCallingNonCallable",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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')' 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\n if True:\n print('Yes')\n else:\n print('No')\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": {
+ "suppressToolId": "PyUnreachableCode",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyChainedComparisons",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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 #}' 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\n comment #}\n\nThe IDE highlights `#}` as it requires the corresponding `{#` token."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoBrokenLineCommentInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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": {
+ "suppressToolId": "PyCompatibility",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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()' 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\n def foo():\n global bar\n print(bar)\n\n foo()\n\nAs a fix, you can move the global variable declaration:\n\n\n global bar\n\n\n def foo():\n print(bar)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyGlobalUndefined",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n from typing import Protocol\n\n\n class MyProtocol(Protocol):\n def method(self, p: int) -> str:\n pass\n\n\n class MyClass(MyProtocol):\n def method(self, p: str) -> int: # Type of 'method' is not compatible with 'MyProtocol'\n pass\n\n\n class MyAnotherProtocol(MyClass, Protocol): # All bases of a protocol must be protocols\n pass\n\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyProtocol",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n from typing import TypeVar\n\n T0 = TypeVar('T1') # Argument of 'TypeVar' must be 'T0'\n\n\n def b(p: int) -> int: # Type specified both in a comment and annotation\n # type: (int) -> int\n pass\n\n\n def c(p1, p2): # Type signature has too many arguments\n # type: (int) -> int\n pass\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": {
+ "suppressToolId": "PyTypeHints",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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)' 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' 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\n class MyClass(object):\n def my_method(self, x):\n print(x)\n\nIf a **Make function from method** quick-fix is applied, the code changes to:\n\n\n def my_method(x):\n print(x)\n\n\n class MyClass(object):\n pass\n\nIf you select the **Make method static** quick-fix, the `@staticmethod` decorator is added:\n\n\n class MyClass(object):\n @staticmethod\n def my_method(x):\n print(x)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyMethodMayBeStatic",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n cdef int c_x\n\n print(c_x, c_y) # Variable 'c_y' is used before its declaration\n\n cdef int c_y = 0\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "CythonUsageBeforeDeclaration",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n dic = {}\n dic['var'] = 1\n\nWhen the quick-fix is applied, the code changes to:\n\n\n dic = {'var': 1}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyDictCreation",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\")' Example 2: 'def bar():\n return 1\n\n\n\"%s %s\" % bar()' 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**Example 2:**\n\n\n def bar():\n return 1\n\n\n \"%s %s\" % bar()\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": {
+ "suppressToolId": "PyStringFormat",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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()' 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\n class A:\n pass\n\n\n def me_exception():\n raise A()\n\nThe proposed quick-fix changes the code to:\n\n\n class A(Exception):\n pass\n\n\n def me_exception():\n raise A()\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyExceptionInherit",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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. Example: 'for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)' It also warns you if a variable declared in the 'with' statement is redeclared inside 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**Example:**\n\n\n for i in range(5):\n for i in range(20, 25):\n print(\"Inner\", i)\n print(\"Outer\", i)\n \nIt also warns you if a variable declared in the `with` statement is redeclared inside 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": {
+ "suppressToolId": "PyAssignmentToLoopOrWithParameter",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "DjangoUnresolvedFilterInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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": {
+ "suppressToolId": "AppEngineThreadsafeCGIHandler",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Google App Engine (Python)",
+ "index": 4,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DjangoUnresolvedTagInspection",
+ "shortDescription": {
+ "text": "Unresolved tag"
+ },
+ "fullDescription": {
+ "text": "Reports unresolved tags in Django templates. Example: '
{{ question.question_text }}
\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\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": {
+ "suppressToolId": "DjangoUnresolvedTagInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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' 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\n class Figure:\n def color(self):\n pass\n\n\n class Rectangle(Figure):\n def color(self):\n pass\n\n\n class Square(Figure):\n def color(self):\n return super(Rectangle, self).color() # Square is not an instance or subclass of Rectangle\n\nAs a fix, you can make the `Square` an instance of the `Rectangle` class."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PySuperArguments",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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()' 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\n class Choice:\n question = ForeignKey(Question, null=False)\n\n\n choice_set = Question.objects.get(id=1).choice_set.remove()\n\nThe `remove` function can not be called if the foreign key has `null=False`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoOrm",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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\"%}' 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\nIn this example, the `base.html` tag is highlighted, because it is not available in the\nspecified location."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoUnresolvedTemplateReferenceInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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' 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\n class A(object):\n # №5\n def __init__(self):\n pass\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\n class A(object)\n # №5\n def __init__(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyNonAsciiChar",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n from abc import abstractmethod, ABC\n\n\n class Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\n class Triangle(Figure):\n def do_triangle(self):\n pass\n\nWhen the quick-fix is applied, the IDE implements an abstract method for the `Triangle` class:\n\n\n from abc import abstractmethod, ABC\n\n\n class Figure(ABC):\n\n @abstractmethod\n def do_figure(self):\n pass\n\n\n class Triangle(Figure):\n def do_figure(self):\n pass\n\n def do_triangle(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyAbstractClass",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyOldStyleClasses",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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 %}' 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\nAvailable since 1.10. The IDE shows warning when discovered in the earlier versions."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoIncompatibleInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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": {
+ "suppressToolId": "Query_bound_parameters",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Google App Engine (Python)",
+ "index": 4,
+ "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": {
+ "suppressToolId": "PyBroadException",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def foo() -> int:\n return \"abc\" # Expected int, got str\n\n\n a: str\n a = foo() # Expected str, got int\n\nWith the quick-fix, you can modify the problematic types:\n\n\n def foo() -> str:\n return \"abc\"\n\n\n a: str\n a = foo()\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyTypeChecker",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n\n s = b'№5'\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyByteLiteral",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n a = 23\n b = 3\n a = a + b\n\nAfter the quick-fix is applied, the code changes to:\n\n\n a = 23\n b = 3\n a += b\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyAugmentAssignment",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n class Foo:\n @property\n def bar(self):\n import warnings\n warnings.warn(\"this is deprecated\", DeprecationWarning, 2)\n return 5\n\n\n foo = Foo()\n print(foo.bar)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyDeprecation",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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')' 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\n a = ('first', \\\n 'second', 'third')\n\nWhen the quick-fix is applied, the redundant backslash is deleted."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyUnnecessaryBackslash",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def outer(p):\n def inner(p):\n pass\n\nAs a quick-fix, the IDE offers to remove a parameter or rename it."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyShadowingNames",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n from typing import final\n\n\n @final\n class A:\n def a_method(self):\n pass\n\n\n class B(A):\n def a_method(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyFinal",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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 %}' 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\nThe IDE reports an error on the `strong` tag not being closed."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoCloseTagInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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' 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\n def calc(self, balance=0):\n 'param: balance'\n self.balance = balance\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def calc(self, balance=0):\n \"\"\"param: balance\"\"\"\n self.balance = balance\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PySingleQuotedDocstring",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyUnusedLocal",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n 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\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": {
+ "suppressToolId": "PyReturnFromInit",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "Query_restricted",
+ "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' Example of an empty docstring 'def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2' When the quick-fix is applied, the code fragments change to: 'def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2' 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\n def demo(a):\n c = a ** 2\n\n**Example of an empty docstring**\n\n\n def demo(a):\n \"\"\"\n \"\"\"\n c = a ** 2\n\nWhen the quick-fix is applied, the code fragments change to:\n\n\n def demo(a):\n \"\"\"\n\n :param a:\n \"\"\"\n c = a ** 2\n\nYou need to provide some details about the parameter in the generated template."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyMissingOrEmptyDocstring",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyPep8NamingInspection",
+ "shortDescription": {
+ "text": "PEP 8 naming convention violation"
+ },
+ "fullDescription": {
+ "text": "Reports violations of the PEP8 naming conventions. Example: 'class mammalia(object):\n extremities = 4\n\n def feeds(self):\n print(\"milk\")' In this code fragment, IDE offers to rename 'mammalia' to 'Mammalia'. When the quick-fix is applied, the code change to: 'class Mammalia(object):\n extremities = 4\n\n def feeds(self):\n print(\"milk\")'",
+ "markdown": "Reports violations of the\n[PEP8](https://www.python.org/dev/peps/pep-0008/) naming conventions.\n\n**Example:**\n\n\n class mammalia(object):\n extremities = 4\n\n def feeds(self):\n print(\"milk\")\n\nIn this code fragment, IDE offers to rename `mammalia` to `Mammalia`.\nWhen the quick-fix is applied, the code change to:\n\n\n class Mammalia(object):\n extremities = 4\n\n def feeds(self):\n print(\"milk\")\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyPep8Naming",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DjangoUnresolvedLoadInspection",
+ "shortDescription": {
+ "text": "Unresolved library inspection"
+ },
+ "fullDescription": {
+ "text": "Reports unresolved references in Django load tags. Example: '{% load something_nonexistent %}'",
+ "markdown": "Reports unresolved references in Django load tags.\n\n**Example:**\n\n\n {% load something_nonexistent %}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoUnresolvedLoadInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyDictDuplicateKeysInspection",
+ "shortDescription": {
+ "text": "Dictionary contains duplicate keys"
+ },
+ "fullDescription": {
+ "text": "Reports using the same value as the dictionary key twice. Example: 'dic = {\"a\": [1, 2], \"a\": [3, 4]}'",
+ "markdown": "Reports using the same value as the dictionary key twice.\n\n**Example:**\n\n\n dic = {\"a\": [1, 2], \"a\": [3, 4]}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyDictDuplicateKeys",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyNoneFunctionAssignmentInspection",
+ "shortDescription": {
+ "text": "Assigning function calls that don't return anything"
+ },
+ "fullDescription": {
+ "text": "Reports cases when an assignment is done on a function that does not return anything. This inspection is similar to pylint inspection E1111. Example: 'def just_print():\n print(\"Hello!\")\n\n\naction = just_print()' As a quick-fix, the IDE offers to remove the assignment.",
+ "markdown": "Reports cases when an assignment is done on a function that does not return anything.\nThis inspection is similar to [pylint inspection E1111](https://docs.pylint.org/en/1.6.0/features.html#id6).\n\n**Example:**\n\n\n def just_print():\n print(\"Hello!\")\n\n\n action = just_print()\n\nAs a quick-fix, the IDE offers to remove the assignment."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyNoneFunctionAssignment",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class Car:\n def __init__(self, speed=0):\n self.speed = speed\n self.time # has no effect\n\n 2 + 3 # has no effect\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": {
+ "suppressToolId": "PyStatementEffect",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class Book(object):\n def __init__(self):\n pass\n\nWhen the quick-fix is applied, the missing comment is added:\n\n\n # coding=utf-8\n class Book(object):\n def __init__(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyMandatoryEncoding",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyInconsistentIndentation",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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'' 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\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": {
+ "suppressToolId": "PyAttributeOutsideInit",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n from typing import TypedDict\n\n\n class 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\n m = Movie(name=\"name\", year=1000, rate=9)\n print(m[\"director\"]) # There is no the 'director' key in 'Movie'\n del m[\"name\"] # The 'name' key cannot be deleted\n m[\"year\"] = \"1001\" # Expected 'int', got 'str'\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyTypedDict",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyPep8",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyMissingTypeHints",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyTupleItemAssignmentInspection",
+ "shortDescription": {
+ "text": "Tuple item assignment is prohibited"
+ },
+ "fullDescription": {
+ "text": "Reports assignments to a tuple item. Example: 't = ('red', 'blue', 'green', 'white')\nt[3] = 'black'' A quick-fix offers to replace the tuple with a list.",
+ "markdown": "Reports assignments to a tuple item.\n\n**Example:**\n\n\n t = ('red', 'blue', 'green', 'white')\n t[3] = 'black'\n\nA quick-fix offers to replace the tuple with a list."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyTupleItemAssignment",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' %}' 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\nThe IDE shows a warning if `url_name` is not defined in the `urls` file."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "DjangoUnresolvedUrlInspection",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DjangoUnresolvedStaticReferenceInspection",
+ "shortDescription": {
+ "text": "Unresolved static reference"
+ },
+ "fullDescription": {
+ "text": "Reports unresolved references to static resources. Example: '{% load staticfiles %}\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\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": {
+ "suppressToolId": "DjangoUnresolvedStaticReferenceInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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\n class Foo:\n __slots__ = ['foo', 'bar']\n\n\n foo = Foo()\n foo.baz = 'spam'\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyDunderSlots",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def func(s, cache={}):\n cache[s] = None\n\nWhen the quick-fix is applied, the code changes to:\n\n\n def func(s, cache=None):\n if cache is None:\n cache = {}\n cache[s] = None\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyDefaultArgument",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyTestUnpassedFixtureInspection",
+ "shortDescription": {
+ "text": "Fixture is not requested by test functions"
+ },
+ "fullDescription": {
+ "text": "Reports if a fixture is used without being passed to test function parameters or to '@pytest.mark.usefixtures' decorator",
+ "markdown": "Reports if a fixture is used without being passed to test function parameters or to `@pytest.mark.usefixtures` decorator"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyTestUnpassedFixture",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def len(a, b, c):\n d = a + b + c\n return d\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": {
+ "suppressToolId": "PyShadowingBuiltins",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class Book:\n def add_title(self):\n pass\n\n\n class Novel(Book):\n def add_title(self, text):\n pass\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": {
+ "suppressToolId": "PyMethodOverriding",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyTestParametrized",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n @classmethod\n def change_state(self):\n pass\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\n class State(object):\n\n @classmethod\n def my_state(cls, name):\n cls.name = name\n\n\n def change_state(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyDecorator",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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()' 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\n async def bar():\n pass\n\n\n async def foo():\n bar()\n\nAfter the quick-fix is applied, the code changes to:\n\n\n async def bar():\n pass\n\n\n async def foo():\n await bar()\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyAsyncCall",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "CommandLineInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\")' 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\n a = 2\n\n\n if a == None:\n print(\"Success\")\n\nOnce the quick-fix is applied, the code changes to:\n\n\n a = 2\n\n\n if a is None:\n print(\"Success\")\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyComparisonWithNone",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' When the quick-fix is applied, the code changes to: 'class Movie:\n\n def show(self):\n pass' The inspection also reports naming issues in class methods. Example: 'class Movie:\n @classmethod\n def show(abc):\n pass' 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\n class Movie:\n\n def show():\n pass\n\nWhen the quick-fix is applied, the code changes to:\n\n\n class Movie:\n\n def show(self):\n pass\n\nThe inspection also reports naming issues in class methods.\n\n**Example:**\n\n\n class Movie:\n @classmethod\n def show(abc):\n pass\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": {
+ "suppressToolId": "PyMethodParameters",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyDocstringTypes",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class Account:\n def calc(self, balance):\n if balance == 0:\n self = balance\n return self\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": {
+ "suppressToolId": "PyMethodFirstArgAssignment",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyNewStyleGenericSyntaxInspection",
+ "shortDescription": {
+ "text": "Invalid usage of new-style type parameters and type aliases"
+ },
+ "fullDescription": {
+ "text": "Reports invalid usage of PEP 695 type parameter syntax Finds the following problems in function and class definitions and new-style type alias statements: Extending typing.Generic in new-style generic classes Extending parameterized typing.Protocol in new-style generic classes Using generic upper bounds and constraints with type parameters for ParamSpec and TypeVarTuple Mixing traditional and new-style type variables Using traditional type variables in new-style type aliases Examples: 'from typing import Generic\n\n class Example[T](Generic[T]): ... # Classes with type parameter list should not extend 'Generic'' 'class Example[T: (list[S], str)]: ... # Generic types are not allowed inside constraints and bounds of type parameters' 'from typing import TypeVar\n\n K = TypeVar(\"K\")\n\n class ClassC[V]:\n def method2[M](self, a: M, b: K) -> M | K: ... # Mixing traditional and new-style TypeVars is not allowed'",
+ "markdown": "Reports invalid usage of [PEP 695](https://www.python.org/dev/peps/pep-0695/) type parameter syntax\n\n\nFinds the following problems in function and class definitions and new-style type alias statements:\n\n* Extending typing.Generic in new-style generic classes\n* Extending parameterized typing.Protocol in new-style generic classes\n* Using generic upper bounds and constraints with type parameters for ParamSpec and TypeVarTuple\n* Mixing traditional and new-style type variables\n* Using traditional type variables in new-style type aliases\n\n\nExamples:\n\n\n from typing import Generic\n\n class Example[T](Generic[T]): ... # Classes with type parameter list should not extend 'Generic'\n\n\n class Example[T: (list[S], str)]: ... # Generic types are not allowed inside constraints and bounds of type parameters\n\n\n from typing import TypeVar\n\n K = TypeVar(\"K\")\n\n class ClassC[V]:\n def method2[M](self, a: M, b: K) -> M | K: ... # Mixing traditional and new-style TypeVars is not allowed\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyNewStyleGenericSyntax",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n t = ('red', 'blue', 'green', 'white')\n (c1, c2, c3) = t\n\nAs a quick-fix, you can modify the highlighted code fragment to restore the tuple\nbalance."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyTupleAssignmentBalance",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n class Book():\n pass\n\nThe quick-fix adds the `__init__` method:\n\n\n class Book():\n def __init__(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyClassHasNoInit",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n def my_function(a: int = 2):\n print(a)\n\n\n my_function(2)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyArgumentEqualDefault",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n from typing import ClassVar\n\n\n class Cat:\n color: ClassVar[str] = \"white\"\n weight: int\n\n def __init__(self, weight: int):\n self.weight = weight\n\n\n Cat.color = \"black\" # OK\n my_cat = Cat(5)\n my_cat.color = \"gray\" # Error, setting class variable on instance\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyClassVar",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "DjangoRelationInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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()' 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\n a = 1\n from __future__ import print_function\n print()\n\nWhen the quick-fix is applied, the code changes to:\n\n\n from __future__ import print_function\n\n a = 1\n print()\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyFromFutureImport",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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())' 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\n def print_string(s):\n print(s.abc())\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": {
+ "suppressToolId": "PyUnresolvedReferences",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyPackageRequirements",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "Restricted_Python_calls",
+ "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": {
+ "suppressToolId": "PyRedundantParentheses",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def my_func(a):\n c = a ** 2;\n return c\n\nIDE provides a quick-fix that removes a trailing semicolon. When you\napply it, the code changes to:\n\n\n def my_func(a):\n c = a ** 2\n return c\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyTrailingSemicolon",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\"%}' 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\nIn this example, the `{% extends %}` tag is highlighted, because it should be placed before\nthe `{% load %}` tag."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ExtendsTagPositionInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "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' 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\n class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\n bar = Foo()\n bar.__call__() # unfilled parameter\n bar(5, \"#\") # unexpected argument\n\nThe correct code fragment looks at follows:\n\n\n class Foo:\n def __call__(self, p1: int, *, p2: str = \"%\"):\n return p2 * p1\n\n\n bar = Foo()\n bar.__call__(5)\n bar(5, p2=\"#\")\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyArgumentList",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyInterpreter",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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\n 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\n a = MyClass()\n a.read_only = 10 # property cannot be set\n del a.read_only # property cannot be deleted\n print(a.write_only) # property cannot be read\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyPropertyAccess",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyStubPackagesAdvertiser",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyPackages",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def x(): pass\n\n\n x = 2\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": {
+ "suppressToolId": "PyRedeclaration",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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": {
+ "suppressToolId": "PyramidSetup",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Pyramid",
+ "index": 63,
+ "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": {
+ "suppressToolId": "PyStubPackagesCompatibility",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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. Example: '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**Example:**\n\n\n class Foo:\n def _protected_method(self):\n pass\n\n\n class Bar(Foo):\n def public_method(self):\n self._protected_method()\n\n\n foo = Foo()\n foo._protected_method() # Access to a protected method\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyProtectedMember",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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)' 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\n x = 0\n if x > 10:\n b = 3\n print(b)\n\nThe IDE reports a problem for `print(b)`. A possible fix is:\n\n\n x = 0\n if x > 10:\n b = 3\n print(b)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyUnboundLocalVariable",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n import typing\n\n\n class FullName(typing.NamedTuple):\n first: str\n last: str = \"\"\n middle: str\n\nAs a fix, place the field with the default value after the fields without default values:\n\n\n import typing\n\n\n class FullName(typing.NamedTuple):\n first: str\n middle: str\n last: str = \"\"\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyNamedTuple",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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' 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\n def innocent(f):\n return f\n\n\n class 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\nAs a quick-fix, the IDE offers to remove the decorator."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyNestedDecorators",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "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
\n \n \n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DuplicatedBlockNamesInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyOverloadsInspection",
+ "shortDescription": {
+ "text": "Overloads in regular Python files"
+ },
+ "fullDescription": {
+ "text": "Reports cases when overloads in regular Python files are placed after the implementation or when their signatures are not compatible with the implementation. Example: 'from typing import overload\n\n\n@overload\ndef foo(p1, p2): # Overload signature is not compatible with the implementation\n pass\n\n\n@overload\ndef foo(p1): # Overload signature is not compatible with the implementation\n pass\n\n\ndef foo(p1, p2, p3):\n print(p1, p2, p3)'",
+ "markdown": "Reports cases when overloads in regular Python files are placed after the implementation or when their signatures are\nnot compatible with the implementation.\n\n**Example:**\n\n\n from typing import overload\n\n\n @overload\n def foo(p1, p2): # Overload signature is not compatible with the implementation\n pass\n\n\n @overload\n def foo(p1): # Overload signature is not compatible with the implementation\n pass\n\n\n def foo(p1, p2, p3):\n print(p1, p2, p3)\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyOverloads",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "AppEngineThreadsafeInspection",
+ "shortDescription": {
+ "text": "Threadsafe is not available or set inappropriately"
+ },
+ "fullDescription": {
+ "text": "Reports cases when threadsafe is not present or it is not set to either 'yes' or 'no'.",
+ "markdown": "Reports cases when threadsafe is not present or it is not set to either `yes` or `no`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "AppEngineThreadsafe",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Google App Engine (Python)",
+ "index": 4,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyExceptClausesOrderInspection",
+ "shortDescription": {
+ "text": "Wrong order of 'except' clauses"
+ },
+ "fullDescription": {
+ "text": "Reports cases when 'except' clauses are not in the proper order, from the more specific to the more generic, or one exception class is caught twice. If you do not fix the order, some exceptions may not be caught by the most specific handler. Example: 'try:\n call()\nexcept ValueError:\n pass\nexcept UnicodeError:\n pass' The IDE recommends moving the clause up. When the quick-fix is applied, the code changes to: 'try:\n call()\nexcept UnicodeError:\n pass\nexcept ValueError:\n pass'",
+ "markdown": "Reports cases when `except` clauses are not in the proper order,\nfrom the more specific to the more generic, or one exception class is caught twice.\n\n\nIf you do not fix the order, some exceptions may not be caught by the most specific handler.\n\n**Example:**\n\n\n try:\n call()\n except ValueError:\n pass\n except UnicodeError:\n pass\n\nThe IDE recommends moving the clause up. When the quick-fix is applied, the code changes to:\n\n\n try:\n call()\n except UnicodeError:\n pass\n except ValueError:\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyExceptClausesOrder",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyDataclassInspection",
+ "shortDescription": {
+ "text": "Invalid definition and usage of Data Classes"
+ },
+ "fullDescription": {
+ "text": "Reports invalid definitions and usages of classes created with 'dataclasses' or 'attr' modules. Example: 'import dataclasses\n\n\n@dataclasses.dataclass\nclass FullName:\n first: str\n middle: str = \"\"\n last: str'",
+ "markdown": "Reports invalid definitions and usages of classes created with\n`dataclasses` or `attr` modules.\n\n**Example:**\n\n\n import dataclasses\n\n\n @dataclasses.dataclass\n class FullName:\n first: str\n middle: str = \"\"\n last: str\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyDataclass",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyprojectInspection",
+ "shortDescription": {
+ "text": "Depencencies in pyproject.toml"
+ },
+ "fullDescription": {
+ "text": "Reports unsatisfied dependencies, declared [project.dependencies] table in pyproject.toml. Shows a quick-fix to install missing packages.",
+ "markdown": "Reports unsatisfied dependencies, declared \\[project.dependencies\\] table in pyproject.toml.\n\n\nShows a quick-fix to install missing packages."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyprojectInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyClassicStyleClassInspection",
+ "shortDescription": {
+ "text": "Classic style class usage"
+ },
+ "fullDescription": {
+ "text": "Reports classic style classes usage. This inspection applies only to Python 2. Example: 'class A:\n pass' With quick-fixes provided by the IDE, this code fragment changes to: 'class A(object):\n def __init__(self):\n pass'",
+ "markdown": "Reports [classic style classes](https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes) usage. This inspection applies only to Python 2.\n\n**Example:**\n\n\n class A:\n pass\n\nWith quick-fixes provided by the IDE, this code fragment changes to:\n\n\n class A(object):\n def __init__(self):\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyClassicStyleClass",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DjangoUrlArgumentsInspection",
+ "shortDescription": {
+ "text": "Incorrect arguments in the ' {% url %}' tag"
+ },
+ "fullDescription": {
+ "text": "Reports missing parameters in the template file if the 'url()' function has parameters in its URL path. Example: In the 'url.py' file 'url(r'^(?P[0-9]+)/', views.detail, name='detail')' In the template file '{% url 'polls:detail' %}'",
+ "markdown": "Reports missing parameters in the template file if the `url()`\nfunction has parameters in its URL path.\n\n**Example:**\n\nIn the `url.py` file\n\n\n url(r'^(?P[0-9]+)/', views.detail, name='detail')\n\nIn the template file\n\n\n {% url 'polls:detail' %}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "DjangoUrlArgumentsInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Django",
+ "index": 21,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyPropertyDefinitionInspection",
+ "shortDescription": {
+ "text": "Incorrect property definition"
+ },
+ "fullDescription": {
+ "text": "Reports problems with the arguments of 'property()' and functions annotated with '@property'. 'class C:\n @property\n def abc(self): # Getter should return or yield something\n pass\n\n @abc.setter\n def foo(self, value): # Names of function and decorator don't match\n pass\n\n @abc.setter\n def abc(self, v1, v2): # Setter signature should be (self, value)\n pass\n\n @abc.deleter\n def abc(self, v1): # Delete signature should be (self)\n pass' A quick-fix offers to update parameters.",
+ "markdown": "Reports problems with the arguments of `property()` and functions\nannotated with `@property`.\n\n\n class C:\n @property\n def abc(self): # Getter should return or yield something\n pass\n\n @abc.setter\n def foo(self, value): # Names of function and decorator don't match\n pass\n\n @abc.setter\n def abc(self, v1, v2): # Setter signature should be (self, value)\n pass\n\n @abc.deleter\n def abc(self, v1): # Delete signature should be (self)\n pass\n\nA quick-fix offers to update parameters."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PyPropertyDefinition",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyIncorrectDocstringInspection",
+ "shortDescription": {
+ "text": "Incorrect docstring"
+ },
+ "fullDescription": {
+ "text": "Reports mismatched parameters in a docstring. For example, 'b' is highlighted, because there is no such a parameter in the 'add' function. 'def add(a, c):\n \"\"\"\n @param a:\n @param b:\n @return:\n \"\"\"\n pass' The inspection does not warn you of missing parameters if none of them is mentioned in a docstring: 'def mult(a, c):\n \"\"\"\n @return:\n \"\"\"\n pass'",
+ "markdown": "Reports mismatched parameters in a docstring. For example, `b` is highlighted, because there is no\nsuch a parameter in the `add` function.\n\n\n def add(a, c):\n \"\"\"\n @param a:\n @param b:\n @return:\n \"\"\"\n pass\n\nThe inspection does not warn you of missing parameters if none of them is mentioned in a docstring:\n\n\n def mult(a, c):\n \"\"\"\n @return:\n \"\"\"\n pass\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyIncorrectDocstring",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PyListCreationInspection",
+ "shortDescription": {
+ "text": "Non-optimal list declaration"
+ },
+ "fullDescription": {
+ "text": "Reports cases when a list declaration can be rewritten with a list literal. This ensures better performance of your application. Example: 'l = [1]\nl.append(2)' When the quick-fix is applied, the code changes to: 'l = [1, 2]'",
+ "markdown": "Reports cases when a list declaration\ncan be rewritten with a list literal.\n\nThis ensures better performance of your application.\n\n**Example:**\n\n\n l = [1]\n l.append(2)\n\nWhen the quick-fix is applied, the code changes to:\n\n\n l = [1, 2]\n"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "PyListCreation",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Python",
+ "index": 3,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "org.intellij.plugins.postcss",
+ "version": "233.14241",
+ "rules": [
+ {
+ "id": "PostCssCustomSelector",
+ "shortDescription": {
+ "text": "Invalid custom selector"
+ },
+ "fullDescription": {
+ "text": "Reports a syntax error in PostCSS Custom Selector. Example: '@custom-selector :--heading h1, h2, h3;'",
+ "markdown": "Reports a syntax error in [PostCSS Custom Selector](https://github.com/postcss/postcss-custom-selectors).\n\nExample:\n\n\n @custom-selector :--heading h1, h2, h3;\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "PostCssCustomSelector",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "PostCSS",
+ "index": 5,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PostCssUnresolvedModuleValueReference",
+ "shortDescription": {
+ "text": "Unresolved CSS module value"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved reference to a CSS Module Value ('@value' declaration). Example: '@value foo from unknown;'",
+ "markdown": "Reports an unresolved reference to a [CSS Module Value](https://github.com/css-modules/postcss-modules-values) (`@value` declaration).\n\nExample:\n\n\n @value foo from unknown;\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "PostCssUnresolvedModuleValueReference",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "PostCSS",
+ "index": 5,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PostCssNesting",
+ "shortDescription": {
+ "text": "Invalid nested rule"
+ },
+ "fullDescription": {
+ "text": "Reports a nested style rule whose syntax doesn't comply with the PostCSS Nested or the PostCSS Nesting specification. Example: '.phone {\n &_title {}\n}'",
+ "markdown": "Reports a nested style rule whose syntax doesn't comply with the [PostCSS Nested](https://github.com/postcss/postcss-nested) or the [PostCSS Nesting](https://github.com/csstools/postcss-nesting) specification.\n\nExample:\n\n\n .phone {\n &_title {}\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "PostCssNesting",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "PostCSS",
+ "index": 5,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PostCssCustomMedia",
+ "shortDescription": {
+ "text": "Invalid custom media"
+ },
+ "fullDescription": {
+ "text": "Reports a syntax error in a PostCSS Custom Media query. Example: '@custom-media --small-viewport (max-width: 30em);'",
+ "markdown": "Reports a syntax error in a [PostCSS Custom Media](https://github.com/postcss/postcss-custom-media) query.\n\nExample:\n\n\n @custom-media --small-viewport (max-width: 30em);\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "PostCssCustomMedia",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "PostCSS",
+ "index": 5,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "PostCssMediaRange",
+ "shortDescription": {
+ "text": "Invalid media query range"
+ },
+ "fullDescription": {
+ "text": "Checks range context syntax, which may alternatively be used for media features with a 'range' type. Example: '@media screen and (500px <= width <= 1200px) {}'",
+ "markdown": "Checks [range context](https://github.com/postcss/postcss-media-minmax) syntax, which may alternatively be used for media features with a 'range' type.\n\nExample:\n\n\n @media screen and (500px <= width <= 1200px) {}\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "PostCssMediaRange",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "PostCSS",
+ "index": 5,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "org.jetbrains.plugins.sass",
+ "version": "233.14241",
+ "rules": [
+ {
+ "id": "SassScssUnresolvedMixin",
+ "shortDescription": {
+ "text": "Unresolved mixin"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved Sass/SCSS mixin reference. Example: '* {\n @include unknown-mixin;\n}'",
+ "markdown": "Reports an unresolved [Sass/SCSS mixin](https://sass-lang.com/documentation/at-rules/mixin) reference.\n\n**Example:**\n\n\n * {\n @include unknown-mixin;\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "SassScssUnresolvedMixin",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Sass_SCSS",
+ "index": 6,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SassScssResolvedByNameOnly",
+ "shortDescription": {
+ "text": "Missing import"
+ },
+ "fullDescription": {
+ "text": "Reports a reference to a variable, mixin, or function that is declared in another file but this file isn't explicitly imported in the current file. Example: '* {\n margin: $var-in-other-file;\n}'",
+ "markdown": "Reports a reference to a variable, mixin, or function that is declared in another file but this file isn't explicitly [imported](https://sass-lang.com/documentation/at-rules/import) in the current file.\n\n**Example:**\n\n\n * {\n margin: $var-in-other-file;\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "SassScssResolvedByNameOnly",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Sass_SCSS",
+ "index": 6,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SassScssUnresolvedPlaceholderSelector",
+ "shortDescription": {
+ "text": "Unresolved placeholder selector"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved Sass/SCSS placeholder selector reference. Example: '* {\n @extend %unknown-placeholder-selector;\n}'",
+ "markdown": "Reports an unresolved [Sass/SCSS placeholder selector](https://sass-lang.com/documentation/variables) reference.\n\n**Example:**\n\n\n * {\n @extend %unknown-placeholder-selector;\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "SassScssUnresolvedPlaceholderSelector",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Sass_SCSS",
+ "index": 6,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SassScssUnresolvedVariable",
+ "shortDescription": {
+ "text": "Unresolved variable"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved Sass/SCSS variable reference. Example: '* {\n margin: $unknown-var;\n}'",
+ "markdown": "Reports an unresolved [Sass/SCSS variable](https://sass-lang.com/documentation/variables) reference.\n\n**Example:**\n\n\n * {\n margin: $unknown-var;\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "SassScssUnresolvedVariable",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Sass_SCSS",
+ "index": 6,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "com.jetbrains.sh",
+ "version": "233.14241",
+ "rules": [
+ {
+ "id": "ShellCheck",
+ "shortDescription": {
+ "text": "ShellCheck"
+ },
+ "fullDescription": {
+ "text": "Reports shell script bugs detected by the integrated ShellCheck static analysis tool.",
+ "markdown": "Reports shell script bugs detected by the integrated [ShellCheck](https://github.com/koalaman/shellcheck) static analysis tool."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "ShellCheck",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Shell script",
+ "index": 7,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "Karma",
+ "version": "233.14241",
+ "rules": [
+ {
+ "id": "KarmaConfigFile",
+ "shortDescription": {
+ "text": "Invalid Karma configuration file"
+ },
+ "fullDescription": {
+ "text": "Reports a potential error in a file path ('basePath', 'files') for a Karma configuration file, for example, 'karma.conf.js'.",
+ "markdown": "Reports a potential error in a file path ('basePath', 'files') for a Karma configuration file, for example, `karma.conf.js`."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "KarmaConfigFile",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JavaScript and TypeScript/Unit testing",
+ "index": 8,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ }
+ ],
+ "language": "en-US",
+ "contents": [
+ "localizedData",
+ "nonLocalizedData"
+ ],
+ "isComprehensive": false
+ },
+ {
+ "name": "com.intellij",
+ "version": "233.14241.171",
+ "rules": [
+ {
+ "id": "JsonSchemaDeprecation",
+ "shortDescription": {
+ "text": "Deprecated JSON property"
+ },
+ "fullDescription": {
+ "text": "Reports a deprecated property in a JSON file. Note that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'.",
+ "markdown": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "JsonSchemaDeprecation",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JSON and JSON5",
+ "index": 9,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "JsonSchemaRefReference",
+ "shortDescription": {
+ "text": "Unresolved '$ref' and '$schema' references"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved '$ref' or '$schema' path in a JSON schema.",
+ "markdown": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. "
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "JsonSchemaRefReference",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "JSON and JSON5",
+ "index": 9,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "HtmlUnknownBooleanAttribute",
+ "shortDescription": {
+ "text": "Incorrect boolean attribute"
+ },
+ "fullDescription": {
+ "text": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported.",
+ "markdown": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "HtmlUnknownBooleanAttribute",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "HTML",
+ "index": 18,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DuplicatedCode",
+ "shortDescription": {
+ "text": "Duplicated code fragment"
+ },
+ "fullDescription": {
+ "text": "Reports duplicated blocks of code from the selected scope: the same file or the entire project. The inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window. The inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs.",
+ "markdown": "Reports duplicated blocks of code from the selected scope: the same file or the entire project.\n\nThe inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window.\n\nThe inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs."
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "note",
+ "parameters": {
+ "suppressToolId": "DuplicatedCode",
+ "ideaSeverity": "WEAK WARNING",
+ "qodanaSeverity": "Moderate"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "General",
+ "index": 24,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "InconsistentLineSeparators",
+ "shortDescription": {
+ "text": "Inconsistent line separators"
+ },
+ "fullDescription": {
+ "text": "Reports files with line separators different from the ones that are specified in the project's settings. For example, the inspection will be triggered if you set the line separator to '\\n' in Settings | Editor | Code Style | Line separator, while the file you are editing uses '\\r\\n' as a line separator. The inspection also warns you about mixed line separators within a file.",
+ "markdown": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "InconsistentLineSeparators",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "General",
+ "index": 24,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "RedundantSuppression",
+ "shortDescription": {
+ "text": "Redundant suppression"
+ },
+ "fullDescription": {
+ "text": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context: '@SuppressWarning' annotation, or '// noinspection' line comment, or '/** noinspection */' JavaDoc comment Example: 'public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n}'",
+ "markdown": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "RedundantSuppression",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "General",
+ "index": 24,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ProblematicWhitespace",
+ "shortDescription": {
+ "text": "Problematic whitespace"
+ },
+ "fullDescription": {
+ "text": "Reports the following problems: Tabs used for indentation when the code style is configured to use only spaces. Spaces used for indentation when the code style is configured to use only tabs. Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs.",
+ "markdown": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "ProblematicWhitespace",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "General",
+ "index": 24,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "HtmlUnknownTarget",
+ "shortDescription": {
+ "text": "Unresolved file in a link"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved file in a link.",
+ "markdown": "Reports an unresolved file in a link."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "HtmlUnknownTarget",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "HTML",
+ "index": 18,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "SSBasedInspection",
+ "shortDescription": {
+ "text": "Structural search inspection"
+ },
+ "fullDescription": {
+ "text": "Allows configuring Structural Search/Structural Replace templates that you can apply to the file you are editing. All matches will be highlighted and marked with the template name that you have configured. If you configure the Structural Replace pattern as well, the corresponding replace option will be available as a quick-fix.",
+ "markdown": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "SSBasedInspection",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "Structural search",
+ "index": 34,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "LongLine",
+ "shortDescription": {
+ "text": "Line is longer than allowed by code style"
+ },
+ "fullDescription": {
+ "text": "Reports lines that are longer than the Hard wrap at parameter specified in Settings | Editor | Code Style | General.",
+ "markdown": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at)."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "LongLine",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "General",
+ "index": 24,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "XmlWrongRootElement",
+ "shortDescription": {
+ "text": "Wrong root element"
+ },
+ "fullDescription": {
+ "text": "Reports a root tag name different from the name specified in the '' tag.",
+ "markdown": "Reports a root tag name different from the name specified in the `` tag."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "XmlWrongRootElement",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "XML",
+ "index": 39,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CheckValidXmlInScriptTagBody",
+ "shortDescription": {
+ "text": "Malformed content of 'script' tag"
+ },
+ "fullDescription": {
+ "text": "Reports contents of 'script' tags that are invalid XML. Example: '' After the quick-fix is applied: ''",
+ "markdown": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "CheckValidXmlInScriptTagBody",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "HTML",
+ "index": 18,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "RegExpSuspiciousBackref",
+ "shortDescription": {
+ "text": "Suspicious back reference"
+ },
+ "fullDescription": {
+ "text": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation. Example of a group defined after its back reference: '\\1(abc)' Example of a group and a back reference in different branches: 'a(b)c|(xy)\\1z' New in 2022.1",
+ "markdown": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "RegExpSuspiciousBackref",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "RegExp",
+ "index": 43,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "RegExpSingleCharAlternation",
+ "shortDescription": {
+ "text": "Single character alternation"
+ },
+ "fullDescription": {
+ "text": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance. Example: 'a|b|c|d' After the quick-fix is applied: '[abcd]' New in 2017.1",
+ "markdown": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "RegExpSingleCharAlternation",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "RegExp",
+ "index": 43,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "HtmlUnknownAttribute",
+ "shortDescription": {
+ "text": "Unknown attribute"
+ },
+ "fullDescription": {
+ "text": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported.",
+ "markdown": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "HtmlUnknownAttribute",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "HTML",
+ "index": 18,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "CheckTagEmptyBody",
+ "shortDescription": {
+ "text": "Empty element content"
+ },
+ "fullDescription": {
+ "text": "Reports XML elements without contents. Example: '\n \n ' After the quick-fix is applied: '\n \n '",
+ "markdown": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n"
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "CheckTagEmptyBody",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "XML",
+ "index": 39,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "RegExpRedundantEscape",
+ "shortDescription": {
+ "text": "Redundant character escape"
+ },
+ "fullDescription": {
+ "text": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets '[]' of a character class. Although unescaped opening curly braces '{' outside of character classes are allowed in some dialects (JavaScript, Python, and so on), it can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters. For this reason the inspection does not report escaped opening curly braces. Example: '\\-\\;[\\.]' After the quick-fix is applied: '-;[.]' The Ignore escaped closing brackets '}' and ']' option specifies whether to report '\\}' and '\\]' outside of a character class when they are allowed to be unescaped by the RegExp dialect. New in 2017.3",
+ "markdown": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3"
+ },
+ "defaultConfiguration": {
+ "enabled": true,
+ "level": "warning",
+ "parameters": {
+ "suppressToolId": "RegExpRedundantEscape",
+ "ideaSeverity": "WARNING",
+ "qodanaSeverity": "High"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "RegExp",
+ "index": 43,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UnresolvedReference",
+ "shortDescription": {
+ "text": "Unresolved reference"
+ },
+ "fullDescription": {
+ "text": "Reports an unresolved reference to a named pattern ('define') in RELAX-NG files that use XML syntax. Suggests creating the referenced 'define' element.",
+ "markdown": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element."
+ },
+ "defaultConfiguration": {
+ "enabled": false,
+ "level": "error",
+ "parameters": {
+ "suppressToolId": "UnresolvedReference",
+ "ideaSeverity": "ERROR",
+ "qodanaSeverity": "Critical"
+ }
+ },
+ "relationships": [
+ {
+ "target": {
+ "id": "RELAX NG",
+ "index": 48,
+ "toolComponent": {
+ "name": "QDPY"
+ }
+ },
+ "kinds": [
+ "superset"
+ ]
+ }
+ ]
+ },
+ {
+ "id": "HtmlMissingClosingTag",
+ "shortDescription": {
+ "text": "Missing closing tag"
+ },
+ "fullDescription": {
+ "text": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional. Example: '\n \n
Behold!\n \n ' After the quick-fix is applied: '\n
\n
Behold!
\n \n '",
+ "markdown": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n
Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n