{ "$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": "Python", "name": "Python" }, { "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "EditorConfig", "name": "EditorConfig" }, { "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": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/General", "name": "General", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "Properties files", "name": "Properties files" }, { "id": "MySQL", "name": "MySQL" }, { "id": "JavaScript and TypeScript/Potentially undesirable code constructs", "name": "Potentially undesirable code constructs", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Flow type checker", "name": "Flow type checker", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Probable bugs", "name": "Probable bugs", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Data flow", "name": "Data flow", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/ES2015 migration aids", "name": "ES2015 migration aids", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/TypeScript", "name": "TypeScript", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Validity issues", "name": "Validity issues", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Function metrics", "name": "Function metrics", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "Structural search", "name": "Structural search" }, { "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": 1, "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": 1, "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": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Switch statement issues", "name": "Switch statement issues", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/DOM issues", "name": "DOM issues", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": 1, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Code quality tools", "name": "Code quality tools", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": 0, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "JavaScript and TypeScript/Security", "name": "Security", "relationships": [ { "target": { "id": "JavaScript and TypeScript", "index": 1, "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": "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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: '
{{ 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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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": "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": 0, "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": 0, "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": 0, "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": 0, "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": 0, "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 \nBehold!\n \n ' After the quick-fix is applied: '\n
\nBehold!
\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 \nBehold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n
\nBehold!
\n \n \n" }, "defaultConfiguration": { "enabled": false, "level": "note", "parameters": { "suppressToolId": "HtmlMissingClosingTag", "ideaSeverity": "INFORMATION", "qodanaSeverity": "Info" } }, "relationships": [ { "target": { "id": "HTML", "index": 18, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "CustomRegExpInspection", "shortDescription": { "text": "Custom RegExp inspection" }, "fullDescription": { "text": "Custom Regex Inspection", "markdown": "Custom Regex Inspection" }, "defaultConfiguration": { "enabled": true, "level": "warning", "parameters": { "suppressToolId": "CustomRegExpInspection", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } }, "relationships": [ { "target": { "id": "RegExp", "index": 43, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "IncorrectFormatting", "shortDescription": { "text": "Incorrect formatting" }, "fullDescription": { "text": "Reports formatting issues that appear if your code doesn't follow your project's code style settings. This inspection is not compatible with languages that require third-party formatters for code formatting, for example, Go or C with CLangFormat enabled.", "markdown": "Reports formatting issues that appear if your code doesn't\nfollow your project's code style settings.\n\n\nThis inspection is not compatible with languages that require\nthird-party formatters for code formatting, for example, Go or\nC with CLangFormat enabled." }, "defaultConfiguration": { "enabled": false, "level": "note", "parameters": { "suppressToolId": "IncorrectFormatting", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { "id": "General", "index": 24, "toolComponent": { "name": "QDPY" } }, "kinds": [ "superset" ] } ] }, { "id": "HtmlExtraClosingTag", "shortDescription": { "text": "Redundant closing tag" }, "fullDescription": { "text": "Reports redundant closing tags on empty elements, for example, 'img' or 'br'. Example: '\n \n