diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 00000000..23692288 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index be8561cf..3b60e207 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -54,6 +54,6 @@ jobs: uses: JetBrains/qodana-action@201551778d1453e36c5c0aa26f89a94775cb1acc # v2025.1 with: push-fixes: true - # args: --baseline,.qodana/qodana.sarif.json + args: --baseline,.qodana/qodana.sarif.json env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} diff --git a/.gitignore b/.gitignore index 63cea27e..3afa6a41 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ build/ devbox.json devbox.lock .devbox + +Gemfile.lock diff --git a/.qodana/qodana.sarif.json b/.qodana/qodana.sarif.json new file mode 100644 index 00000000..f63c27b9 --- /dev/null +++ b/.qodana/qodana.sarif.json @@ -0,0 +1,21111 @@ +{ + "$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": "QDRUBY", + "fullName": "Qodana for Ruby", + "version": "252.24448", + "rules": [], + "taxa": [ + { + "id": "EditorConfig", + "name": "EditorConfig" + }, + { + "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": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HTTP Client", + "name": "HTTP Client" + }, + { + "id": "Ruby", + "name": "Ruby" + }, + { + "id": "Ruby/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "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": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSON and JSON5", + "name": "JSON and JSON5" + }, + { + "id": "MongoJS", + "name": "MongoJS" + }, + { + "id": "JavaScript and TypeScript/General", + "name": "General", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "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": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Flow type checker", + "name": "Flow type checker", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "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": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Cucumber", + "name": "Cucumber" + }, + { + "id": "JavaScript and TypeScript/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Gems and gem management", + "name": "Gems and gem management", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "name": "Bitwise operation issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "name": "ES2015 migration aids", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "General", + "name": "General" + }, + { + "id": "HTML/Accessibility", + "name": "Accessibility", + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/React", + "name": "React", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Rails", + "name": "Rails", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/TypeScript", + "name": "TypeScript", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Language level migration aids", + "name": "Language level migration aids", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RBS", + "name": "RBS" + }, + { + "id": "RBS/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "RBS", + "index": 32, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Validity issues", + "name": "Validity issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SQL", + "name": "SQL" + }, + { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "name": "Potentially confusing code constructs", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CSS", + "name": "CSS" + }, + { + "id": "CSS/Invalid elements", + "name": "Invalid elements", + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RBS/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "RBS", + "index": 32, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/RBS", + "name": "RBS", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Try statement issues", + "name": "Try statement issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Function metrics", + "name": "Function metrics", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Structural search", + "name": "Structural search" + }, + { + "id": "Ruby/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAML", + "name": "YAML" + }, + { + "id": "XML", + "name": "XML" + }, + { + "id": "JavaScript and TypeScript/Assignment issues", + "name": "Assignment issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Cucumber", + "name": "Cucumber", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CSS/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Less", + "name": "Less" + }, + { + "id": "RegExp", + "name": "RegExp" + }, + { + "id": "RBS/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "RBS", + "index": 32, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/YARD", + "name": "YARD", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Vue", + "name": "Vue" + }, + { + "id": "JavaScript and TypeScript/Node.js", + "name": "Node.js", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RBS/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "RBS", + "index": 32, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Control flow issues", + "name": "Control flow issues", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Code metrics", + "name": "Code metrics", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Ruby/Redundant code", + "name": "Redundant code", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Imports and dependencies", + "name": "Imports and dependencies", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RELAX NG", + "name": "RELAX NG" + }, + { + "id": "Ruby/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CSS/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Switch statement issues", + "name": "Switch statement issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/DOM issues", + "name": "DOM issues", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "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": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaScript and TypeScript/Code quality tools", + "name": "Code quality tools", + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript", + "index": 1, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Code Coverage", + "name": "Code Coverage" + }, + { + "id": "Proofreading", + "name": "Proofreading" + }, + { + "id": "Qodana", + "name": "Qodana" + }, + { + "id": "PostgreSQL", + "name": "PostgreSQL" + }, + { + "id": "RBS/Inheritance issues", + "name": "Inheritance issues", + "relationships": [ + { + "target": { + "id": "RBS", + "index": 32, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SQL server", + "name": "SQL server" + }, + { + "id": "Security", + "name": "Security" + }, + { + "id": "Ruby/General", + "name": "General", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Oracle", + "name": "Oracle" + }, + { + "id": "Internationalization", + "name": "Internationalization" + }, + { + "id": "Ruby/Inheritance issues", + "name": "Inheritance issues", + "relationships": [ + { + "target": { + "id": "Ruby", + "index": 4, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Version control", + "name": "Version control" + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + "extensions": [ + { + "name": "org.editorconfig.editorconfigjetbrains", + "version": "252.24448.0", + "rules": [ + { + "id": "EditorConfigCharClassRedundancy", + "shortDescription": { + "text": "Unnecessary character class" + }, + "fullDescription": { + "text": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example '[a]'→'a'. Inspection ID: EditorConfigCharClassRedundancy", + "markdown": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`.\n\nInspection ID: EditorConfigCharClassRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigCharClassRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigRootDeclarationUniqueness", + "shortDescription": { + "text": "Extra top-level declaration" + }, + "fullDescription": { + "text": "Reports multiple top-level declarations. There can be only one optional “root=true” top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed. Inspection ID: EditorConfigRootDeclarationUniqueness", + "markdown": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed.\n\nInspection ID: EditorConfigRootDeclarationUniqueness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigRootDeclarationUniqueness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigNumerousWildcards", + "shortDescription": { + "text": "Too many wildcards" + }, + "fullDescription": { + "text": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues. Inspection ID: EditorConfigNumerousWildcards", + "markdown": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues.\n\nInspection ID: EditorConfigNumerousWildcards" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigNumerousWildcards", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPartialOverride", + "shortDescription": { + "text": "Overlapping sections" + }, + "fullDescription": { + "text": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: '[{foo,bar}]' and '[{foo,bas}]' both contain “foo”. Inspection ID: EditorConfigPartialOverride", + "markdown": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\".\n\nInspection ID: EditorConfigPartialOverride" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigPartialOverride", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEmptySection", + "shortDescription": { + "text": "Empty section" + }, + "fullDescription": { + "text": "Reports sections that do not contain any EditorConfig properties. Inspection ID: EditorConfigEmptySection", + "markdown": "Reports sections that do not contain any EditorConfig properties.\n\nInspection ID: EditorConfigEmptySection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigEmptySection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigShadowingOption", + "shortDescription": { + "text": "Overriding property" + }, + "fullDescription": { + "text": "Reports properties that override the same properties defined earlier in the file. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes the same files as '[*.java]' but also sets indent_size to value 2. Thus the first declaration 'indent_size=4'will be ignored. Inspection ID: EditorConfigShadowingOption", + "markdown": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored.\n\nInspection ID: EditorConfigShadowingOption" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigShadowingOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigListAcceptability", + "shortDescription": { + "text": "Unexpected value list" + }, + "fullDescription": { + "text": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified. Inspection ID: EditorConfigListAcceptability", + "markdown": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified.\n\nInspection ID: EditorConfigListAcceptability" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigListAcceptability", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigKeyCorrectness", + "shortDescription": { + "text": "Unknown property" + }, + "fullDescription": { + "text": "Reports properties that are not supported by the IDE. Note: some “ij” domain properties may require specific language plugins. Inspection ID: EditorConfigKeyCorrectness", + "markdown": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins.\n\nInspection ID: EditorConfigKeyCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigKeyCorrectness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPatternEnumerationRedundancy", + "shortDescription": { + "text": "Unnecessary braces" + }, + "fullDescription": { + "text": "Reports pattern lists that are either empty '{}' or contain just one pattern, for example '{foo}' in contrast to a list containing multiple patterns, for example '{foo,bar}'. In this case braces are handled as a part of the name. For example, the pattern '*.{a}' will match the file 'my.{a}' but not 'my.a'. Inspection ID: EditorConfigPatternEnumerationRedundancy", + "markdown": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}` in contrast to a list containing multiple patterns, for example `{foo,bar}`. In this case braces are handled as a part of the name. For example, the pattern `*.{a}` will match the file `my.{a}` but not `my.a`.\n\nInspection ID: EditorConfigPatternEnumerationRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigPatternEnumerationRedundancy", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEncoding", + "shortDescription": { + "text": "File encoding doesn't match EditorConfig charset" + }, + "fullDescription": { + "text": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file. Inspection ID: EditorConfigEncoding", + "markdown": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file.\n\nInspection ID: EditorConfigEncoding" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigRootDeclarationCorrectness", + "shortDescription": { + "text": "Unexpected top-level declaration" + }, + "fullDescription": { + "text": "Reports unexpected top-level declarations. Top-level declarations other than “root=true” are not allowed in the EditorConfig file. Inspection ID: EditorConfigRootDeclarationCorrectness", + "markdown": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file.\n\nInspection ID: EditorConfigRootDeclarationCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigRootDeclarationCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigReferenceCorrectness", + "shortDescription": { + "text": "Invalid reference" + }, + "fullDescription": { + "text": "Reports identifiers that are either unknown or have a wrong type. Inspection ID: EditorConfigReferenceCorrectness", + "markdown": "Reports identifiers that are either unknown or have a wrong type.\n\nInspection ID: EditorConfigReferenceCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigReferenceCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPairAcceptability", + "shortDescription": { + "text": "Unexpected key-value pair" + }, + "fullDescription": { + "text": "Reports key-value pairs that are not allowed in the current context. Inspection ID: EditorConfigPairAcceptability", + "markdown": "Reports key-value pairs that are not allowed in the current context.\n\nInspection ID: EditorConfigPairAcceptability" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigPairAcceptability", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPatternRedundancy", + "shortDescription": { + "text": "Duplicate or redundant pattern" + }, + "fullDescription": { + "text": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in '[{*.java,*}]' the first '*.java' pattern defines a narrower scope compared to '*'. That is why it is redundant and can be removed. Inspection ID: EditorConfigPatternRedundancy", + "markdown": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed.\n\nInspection ID: EditorConfigPatternRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigPatternRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigNoMatchingFiles", + "shortDescription": { + "text": "No matching files" + }, + "fullDescription": { + "text": "Reports sections with wildcard patterns that do not match any files under the directory in which the '.editorconfig' file is located. Inspection ID: EditorConfigNoMatchingFiles", + "markdown": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located.\n\nInspection ID: EditorConfigNoMatchingFiles" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigNoMatchingFiles", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigDeprecatedDescriptor", + "shortDescription": { + "text": "Deprecated property" + }, + "fullDescription": { + "text": "Reports EditorConfig properties that are no longer supported. Inspection ID: EditorConfigDeprecatedDescriptor", + "markdown": "Reports EditorConfig properties that are no longer supported.\n\nInspection ID: EditorConfigDeprecatedDescriptor" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigDeprecatedDescriptor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigWildcardRedundancy", + "shortDescription": { + "text": "Redundant wildcard" + }, + "fullDescription": { + "text": "Reports wildcards that become redundant when the “**” wildcard is used in the same section. The “**” wildcard defines a broader set of files than any other wildcard. That is why, any other wildcard used in the same section has no affect and can be removed. Inspection ID: EditorConfigWildcardRedundancy", + "markdown": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed.\n\nInspection ID: EditorConfigWildcardRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigWildcardRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigHeaderUniqueness", + "shortDescription": { + "text": "EditorConfig section is not unique" + }, + "fullDescription": { + "text": "Reports sections that define the same file pattern as other sections. Inspection ID: EditorConfigHeaderUniqueness", + "markdown": "Reports sections that define the same file pattern as other sections.\n\nInspection ID: EditorConfigHeaderUniqueness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigHeaderUniqueness", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigShadowedOption", + "shortDescription": { + "text": "Overridden property" + }, + "fullDescription": { + "text": "Reports properties that are already defined in other sections. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes all '*.java' files too but it also redefines indent_size. As a result the value 2 will be used for files matching '*.java'. Inspection ID: EditorConfigShadowedOption", + "markdown": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`.\n\nInspection ID: EditorConfigShadowedOption" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigShadowedOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEmptyHeader", + "shortDescription": { + "text": "Empty header" + }, + "fullDescription": { + "text": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by 'gitignore'. Inspection ID: EditorConfigEmptyHeader", + "markdown": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`.\n\nInspection ID: EditorConfigEmptyHeader" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigEmptyHeader", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigValueCorrectness", + "shortDescription": { + "text": "Invalid property value" + }, + "fullDescription": { + "text": "Reports property values that do not meet value restrictions. For example, some properties may be only “true” or “false”, others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them. Inspection ID: EditorConfigValueCorrectness", + "markdown": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them.\n\nInspection ID: EditorConfigValueCorrectness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigValueCorrectness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigVerifyByCore", + "shortDescription": { + "text": "Invalid .editorconfig file" + }, + "fullDescription": { + "text": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied. Inspection ID: EditorConfigVerifyByCore", + "markdown": "Verifies the whole file using the backing EditorConfig core library and reports any failures. Any such failure would prevent EditorConfig properties from being correctly applied.\n\nInspection ID: EditorConfigVerifyByCore" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigVerifyByCore", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigValueUniqueness", + "shortDescription": { + "text": "Non-unique list value" + }, + "fullDescription": { + "text": "Reports duplicates in lists of values. Inspection ID: EditorConfigValueUniqueness", + "markdown": "Reports duplicates in lists of values.\n\nInspection ID: EditorConfigValueUniqueness" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigValueUniqueness", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigMissingRequiredDeclaration", + "shortDescription": { + "text": "Required declarations are missing" + }, + "fullDescription": { + "text": "Reports properties that miss the required declarations. Refer to the documentation for more information. Inspection ID: EditorConfigMissingRequiredDeclaration", + "markdown": "Reports properties that miss the required declarations. Refer to the documentation for more information.\n\nInspection ID: EditorConfigMissingRequiredDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigMissingRequiredDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigCharClassLetterRedundancy", + "shortDescription": { + "text": "Duplicate character class letter" + }, + "fullDescription": { + "text": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example '[aa]'. Inspection ID: EditorConfigCharClassLetterRedundancy", + "markdown": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`.\n\nInspection ID: EditorConfigCharClassLetterRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigCharClassLetterRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigSpaceInHeader", + "shortDescription": { + "text": "Space in file pattern" + }, + "fullDescription": { + "text": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed. Inspection ID: EditorConfigSpaceInHeader", + "markdown": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed.\n\nInspection ID: EditorConfigSpaceInHeader" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "EditorConfigSpaceInHeader", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigOptionRedundancy", + "shortDescription": { + "text": "Redundant property" + }, + "fullDescription": { + "text": "Reports properties that are redundant when another applicable section already contains the same property and value. For example: '[*]\nindent_size=4\n[*.java]\nindent_size=4' are both applicable to '*.java' files and define the same 'indent_size' value. Inspection ID: EditorConfigOptionRedundancy", + "markdown": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value.\n\nInspection ID: EditorConfigOptionRedundancy" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigOptionRedundancy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigUnusedDeclaration", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports unused declarations. Such declarations can be removed. Inspection ID: EditorConfigUnusedDeclaration", + "markdown": "Reports unused declarations. Such declarations can be removed.\n\nInspection ID: EditorConfigUnusedDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EditorConfigUnusedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigUnexpectedComma", + "shortDescription": { + "text": "Unexpected comma" + }, + "fullDescription": { + "text": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists. Inspection ID: EditorConfigUnexpectedComma", + "markdown": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists.\n\nInspection ID: EditorConfigUnexpectedComma" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "EditorConfigUnexpectedComma", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 0, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "JavaScript", + "version": "252.24448.0", + "rules": [ + { + "id": "ConstantConditionalExpressionJS", + "shortDescription": { + "text": "Constant conditional expression" + }, + "fullDescription": { + "text": "Reports a conditional expression in the format 'true? result1: result2' or 'false? result1: result2. Suggests simplifying the expression. Inspection ID: ConstantConditionalExpressionJS'", + "markdown": "Reports a conditional expression in the format `true? result1: result2` or `false? result1: result2``.\nSuggests simplifying the expression.\n`\n\nInspection ID: ConstantConditionalExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConstantConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSTestFailedLine", + "shortDescription": { + "text": "Highlight failure line in test code" + }, + "fullDescription": { + "text": "Reports a failed method call or an assertion in a test. Inspection ID: JSTestFailedLine", + "markdown": "Reports a failed method call or an assertion in a test.\n\nInspection ID: JSTestFailedLine" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSTestFailedLine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unit testing", + "index": 9, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSValidateJSDoc", + "shortDescription": { + "text": "Syntax errors and unresolved references in JSDoc" + }, + "fullDescription": { + "text": "Reports a syntax discrepancy in a documentation comment. Inspection ID: JSValidateJSDoc", + "markdown": "Reports a syntax discrepancy in a documentation comment.\n\nInspection ID: JSValidateJSDoc" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSValidateJSDoc", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithTooManyBranchesJS", + "shortDescription": { + "text": "'if' statement with too many branches" + }, + "fullDescription": { + "text": "Reports an 'if' statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction. Use the field below to specify the maximum number of branches expected. Inspection ID: IfStatementWithTooManyBranchesJS", + "markdown": "Reports an `if` statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction.\n\n\nUse the field below to specify the maximum number of branches expected.\n\nInspection ID: IfStatementWithTooManyBranchesJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IfStatementWithTooManyBranchesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonBlockStatementBodyJS", + "shortDescription": { + "text": "Statement body without braces" + }, + "fullDescription": { + "text": "Reports a 'if', 'while', 'for', or 'with' statements whose body is not a block statement. Using code block in statement bodies is usually safer for downstream maintenance. Inspection ID: NonBlockStatementBodyJS", + "markdown": "Reports a `if`, `while`, `for`, or `with` statements whose body is not a block statement. Using code block in statement bodies is usually safer for downstream maintenance.\n\nInspection ID: NonBlockStatementBodyJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonBlockStatementBodyJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 13, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatementJS", + "shortDescription": { + "text": "'break' statement" + }, + "fullDescription": { + "text": "Reports a 'break' statements. Ignores 'break' statements that end case blocks. Inspection ID: BreakStatementJS", + "markdown": "Reports a `break` statements. Ignores `break` statements that end case blocks.\n\nInspection ID: BreakStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BreakStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FlowJSConfig", + "shortDescription": { + "text": "Missing .flowconfig" + }, + "fullDescription": { + "text": "Reports a JavaScript file with a '@flow' flag that doesn't have an associated '.flowconfig' file in the project. Inspection ID: FlowJSConfig", + "markdown": "Reports a JavaScript file with a `@flow` flag that doesn't have an associated `.flowconfig` file in the project.\n\nInspection ID: FlowJSConfig" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FlowJSConfig", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Flow type checker", + "index": 16, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidUsageOfClassThis", + "shortDescription": { + "text": "Potentially invalid reference to 'this' of a class from closure" + }, + "fullDescription": { + "text": "Reports an attempt to reference a member of an ECMAScript class via the 'this.' qualifier in a nested function that is not a lambda. 'this' in a nested function that is not a lambda is the function's own 'this' and doesn't relate to the outer class. Inspection ID: JSPotentiallyInvalidUsageOfClassThis", + "markdown": "Reports an attempt to reference a member of an ECMAScript class via the `this.` qualifier in a nested function that is not a lambda. \n`this` in a nested function that is not a lambda is the function's own `this` and doesn't relate to the outer class.\n\nInspection ID: JSPotentiallyInvalidUsageOfClassThis" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidUsageOfClassThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DebuggerStatementJS", + "shortDescription": { + "text": "'debugger' statement" + }, + "fullDescription": { + "text": "Reports a 'debugger' statement used for interaction with the Javascript debuggers. Such statements should not appear in production code. Inspection ID: DebuggerStatementJS", + "markdown": "Reports a `debugger` statement used for interaction with the Javascript debuggers. Such statements should not appear in production code.\n\nInspection ID: DebuggerStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DebuggerStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnusedAssignment", + "shortDescription": { + "text": "Unused assignment" + }, + "fullDescription": { + "text": "Reports a variable whose value is never used after assignment. Suggests removing the unused variable to shorten the code and to avoid redundant allocations. The following cases are reported: A variable is never read after assignment. The value of a variable is always overwritten with another assignment before the variable is read next time. The initializer of a variable is redundant (for one of the above-mentioned reasons). Inspection ID: JSUnusedAssignment", + "markdown": "Reports a variable whose value is never used after assignment. \nSuggests removing the unused variable to shorten the code and to avoid redundant allocations.\n\nThe following cases are reported:\n\n* A variable is never read after assignment.\n* The value of a variable is always overwritten with another assignment before the variable is read next time.\n* The initializer of a variable is redundant (for one of the above-mentioned reasons).\n\nInspection ID: JSUnusedAssignment" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnusedAssignment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unused symbols", + "index": 19, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReuseOfLocalVariableJS", + "shortDescription": { + "text": "Reuse of local variable" + }, + "fullDescription": { + "text": "Reports reusing a local variable and overwriting its value with a new value that is not related to the original variable usage. Reusing a local variable in this way may be confusing because the intended semantics of the local variable may vary with each usage. It may also cause bugs, if code changes result in values that were expected to be overwritten while they are actually live. It is good practices to keep variable lifetimes as short as possible, and not reuse local variables for the sake of brevity. Inspection ID: ReuseOfLocalVariableJS", + "markdown": "Reports reusing a local variable and overwriting its value with a new value that is not related to the original variable usage. Reusing a local variable in this way may be confusing because the intended semantics of the local variable may vary with each usage. It may also cause bugs, if code changes result in values that were expected to be overwritten while they are actually live. It is good practices to keep variable lifetimes as short as possible, and not reuse local variables for the sake of brevity.\n\nInspection ID: ReuseOfLocalVariableJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReuseOfLocalVariableJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Data flow", + "index": 21, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ShiftOutOfRangeJS", + "shortDescription": { + "text": "Shift operation by possibly wrong constant" + }, + "fullDescription": { + "text": "Reports a shift operation where the second operand is a constant outside the reasonable range, for example, an integer shift operation outside the range '0..31', shifting by negative or overly large values. Inspection ID: ShiftOutOfRangeJS", + "markdown": "Reports a shift operation where the second operand is a constant outside the reasonable range, for example, an integer shift operation outside the range `0..31`, shifting by negative or overly large values.\n\nInspection ID: ShiftOutOfRangeJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ShiftOutOfRangeJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 24, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSClosureCompilerSyntax", + "shortDescription": { + "text": "Incorrect usage of JSDoc tags" + }, + "fullDescription": { + "text": "Reports warnings implied by Google Closure Compiler annotations including correct use of '@abstract', '@interface', and '@implements' tags. Inspection ID: JSClosureCompilerSyntax", + "markdown": "Reports warnings implied by *Google Closure Compiler* annotations including correct use of `@abstract`, `@interface`, and `@implements` tags.\n\nInspection ID: JSClosureCompilerSyntax" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSClosureCompilerSyntax", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryContinueJS", + "shortDescription": { + "text": "Unnecessary 'continue' statement" + }, + "fullDescription": { + "text": "Reports an unnecessary 'continue' statement at the end of a loop. Suggests removing such statements. Inspection ID: UnnecessaryContinueJS", + "markdown": "Reports an unnecessary `continue` statement at the end of a loop. Suggests removing such statements.\n\nInspection ID: UnnecessaryContinueJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryContinueJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertLetToConst", + "shortDescription": { + "text": "'let' is used instead of 'const'" + }, + "fullDescription": { + "text": "Reports a 'let' declaration that can be made 'const'. Inspection ID: ES6ConvertLetToConst", + "markdown": "Reports a `let` declaration that can be made `const`. \n\nInspection ID: ES6ConvertLetToConst" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertLetToConst", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXDomNesting", + "shortDescription": { + "text": "Invalid DOM element nesting" + }, + "fullDescription": { + "text": "Detects HTML elements in JSX files which are not nested properly according to the DOM specification. React reports runtime warnings on incorrectly nested elements. Inspection ID: JSXDomNesting", + "markdown": "Detects HTML elements in JSX files which are not nested properly according to the DOM specification. React reports runtime warnings on incorrectly nested elements.\n\nInspection ID: JSXDomNesting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSXDomNesting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/React", + "index": 28, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptValidateTypes", + "shortDescription": { + "text": "Type mismatch" + }, + "fullDescription": { + "text": "Reports a parameter, return value, or assigned expression of incorrect type. Inspection ID: TypeScriptValidateTypes", + "markdown": "Reports a parameter, return value, or assigned expression of incorrect type.\n\nInspection ID: TypeScriptValidateTypes" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptValidateTypes", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadExpressionStatementJS", + "shortDescription": { + "text": "Expression statement which is not assignment or call" + }, + "fullDescription": { + "text": "Reports an expression statement that is neither an assignment nor a call. Such statements usually indicate an error. Inspection ID: BadExpressionStatementJS", + "markdown": "Reports an expression statement that is neither an assignment nor a call. Such statements usually indicate an error.\n\nInspection ID: BadExpressionStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "BadExpressionStatementJS", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 34, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingFloatingPointLiteralJS", + "shortDescription": { + "text": "Confusing floating point literal" + }, + "fullDescription": { + "text": "Reports any floating point number that does not have a decimal point, or any numbers before the decimal point, or and numbers after the decimal point. Such literals may be confusing, and violate several coding standards. Inspection ID: ConfusingFloatingPointLiteralJS", + "markdown": "Reports any floating point number that does not have a decimal point, or any numbers before the decimal point, or and numbers after the decimal point. Such literals may be confusing, and violate several coding standards.\n\nInspection ID: ConfusingFloatingPointLiteralJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingFloatingPointLiteralJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatementWithLabelJS", + "shortDescription": { + "text": "'break' statement with label" + }, + "fullDescription": { + "text": "Reports a labeled 'break' statement. Inspection ID: BreakStatementWithLabelJS", + "markdown": "Reports a labeled `break` statement.\n\nInspection ID: BreakStatementWithLabelJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BreakStatementWithLabelJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueOrBreakFromFinallyBlockJS", + "shortDescription": { + "text": "'continue' or 'break' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports a 'break' or 'continue' statement inside a 'finally' block. Such statements are very confusing, may hide exceptions, and complicate debugging. Inspection ID: ContinueOrBreakFromFinallyBlockJS", + "markdown": "Reports a `break` or `continue` statement inside a `finally` block. Such statements are very confusing, may hide exceptions, and complicate debugging.\n\nInspection ID: ContinueOrBreakFromFinallyBlockJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueOrBreakFromFinallyBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StatementsPerFunctionJS", + "shortDescription": { + "text": "Overly long function" + }, + "fullDescription": { + "text": "Reports an overly long function. Function length is calculated by counting up the number of non-empty statements in the function. Functions that are too long are error-prone and difficult to test. Use the field below to specify the maximum acceptable number of statements in a function. Inspection ID: StatementsPerFunctionJS", + "markdown": "Reports an overly long function. Function length is calculated by counting up the number of non-empty statements in the function. Functions that are too long are error-prone and difficult to test.\n\n\nUse the field below to specify the maximum acceptable number of statements in a function.\n\nInspection ID: StatementsPerFunctionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionTooLongJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 42, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLocalVariableJS", + "shortDescription": { + "text": "Redundant local variable" + }, + "fullDescription": { + "text": "Reports an unnecessary local variable that does not make a function more comprehensible: a local variable that is immediately returned a local variable that is immediately assigned to another variable and is not used anymore a local variable that always has the same value as another local variable or parameter. Use the checkbox below to have this inspection ignore variables that are immediately returned or thrown. Some coding styles suggest using such variables for clarity and ease of debugging. Inspection ID: UnnecessaryLocalVariableJS", + "markdown": "Reports an unnecessary local variable that does not make a function more comprehensible:\n\n* a local variable that is immediately returned\n* a local variable that is immediately assigned to another variable and is not used anymore\n* a local variable that always has the same value as another local variable or parameter.\n\n\nUse the checkbox below to have this inspection ignore variables that are immediately\nreturned or thrown. Some coding styles suggest using such variables for clarity and\nease of debugging.\n\nInspection ID: UnnecessaryLocalVariableJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLocalVariableJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Data flow", + "index": 21, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMethodCanBeStatic", + "shortDescription": { + "text": "Method can be made 'static'" + }, + "fullDescription": { + "text": "Reports a class method that can be safely made 'static'. A method can be 'static' if it does not reference any of its class' non-static methods and non-static fields and is not overridden in a subclass. Use the first checkbox below to inspect only 'private' methods. Inspection ID: JSMethodCanBeStatic", + "markdown": "Reports a class method that can be safely made `static`. A method can be `static` if it does not reference any of its class' non-static methods and non-static fields and is not overridden in a subclass.\n\n\nUse the first checkbox below to inspect only `private` methods.\n\nInspection ID: JSMethodCanBeStatic" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSMethodCanBeStatic", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDeclarationsAtScopeStart", + "shortDescription": { + "text": "'var' declared not at the beginning of a function" + }, + "fullDescription": { + "text": "Checks that declarations of local variables declared with var are at the top of a function scope. By default, variable declarations are always moved (\"hoisted\") invisibly to the top of their containing scope when the code is executed. Therefore, declaring them at the top of the scope helps represent this behavior in the code. Inspection ID: JSDeclarationsAtScopeStart", + "markdown": "Checks that declarations of local variables declared with **var** are at the top of a function scope. \n\nBy default, variable declarations are always moved (\"hoisted\") invisibly to the top of their containing scope when the code is executed. Therefore, declaring them at the top of the scope helps represent this behavior in the code.\n\nInspection ID: JSDeclarationsAtScopeStart" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSDeclarationsAtScopeStart", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 13, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatementWithLabelJS", + "shortDescription": { + "text": "'continue' statement with label" + }, + "fullDescription": { + "text": "Reports a labeled 'continue' statement. Inspection ID: ContinueStatementWithLabelJS", + "markdown": "Reports a labeled `continue` statement.\n\nInspection ID: ContinueStatementWithLabelJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueStatementWithLabelJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSObjectNullOrUndefined", + "shortDescription": { + "text": "Object is 'null' or 'undefined'" + }, + "fullDescription": { + "text": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is 'undefined' or 'null'. Inspection ID: JSObjectNullOrUndefined", + "markdown": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is `undefined` or `null`.\n\nInspection ID: JSObjectNullOrUndefined" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSObjectNullOrUndefined", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptMissingConfigOption", + "shortDescription": { + "text": "Missing tsconfig.json option " + }, + "fullDescription": { + "text": "Reports a usage that requires an explicit option in 'tsconfig.json'. For example, to use JSX in '.tsx' files, 'tsconfig.json' must contain '\"jsx\"' property. Inspection ID: TypeScriptMissingConfigOption", + "markdown": "Reports a usage that requires an explicit option in `tsconfig.json`. For example, to use JSX in `.tsx` files, `tsconfig.json` must contain `\"jsx\"` property.\n\nInspection ID: TypeScriptMissingConfigOption" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeScriptMissingConfigOption", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXUnresolvedComponent", + "shortDescription": { + "text": "Unresolved JSX component" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a JSX component. Suggests adding a missing import statement if the referenced component is defined in the project or its dependencies or creating a new component with this name. The template for a new component can be modified in Editor | File and Code Templates. Inspection ID: JSXUnresolvedComponent", + "markdown": "Reports an unresolved reference to a JSX component. Suggests adding a missing import statement if the referenced component is defined in the project or its dependencies or creating a new component with this name.\n\nThe template for a new component can be modified in Editor \\| File and Code Templates.\n\nInspection ID: JSXUnresolvedComponent" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSXUnresolvedComponent", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnBreakStatementJS", + "shortDescription": { + "text": "Unnecessary label on 'break' statement" + }, + "fullDescription": { + "text": "Reports a labeled 'break' statement whose labels may be removed without changing the flow of control. Inspection ID: UnnecessaryLabelOnBreakStatementJS", + "markdown": "Reports a labeled `break` statement whose labels may be removed without changing the flow of control.\n\nInspection ID: UnnecessaryLabelOnBreakStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLabelOnBreakStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ShorthandObjectProperty", + "shortDescription": { + "text": "Property can be replaced with shorthand" + }, + "fullDescription": { + "text": "Reports an object property that can be converted to ES6 shorthand style and provides a quick-fix to do it. Example: 'var obj = {foo:foo}' After applying the quick-fix the code looks as follows: 'var obj = {foo}' Inspection ID: ES6ShorthandObjectProperty", + "markdown": "Reports an object property that can be converted to ES6 shorthand style and provides a quick-fix to do it.\n\nExample:\n\n\n var obj = {foo:foo}\n\nAfter applying the quick-fix the code looks as follows:\n\n\n var obj = {foo}\n\nInspection ID: ES6ShorthandObjectProperty" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ShorthandObjectProperty", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatementJS", + "shortDescription": { + "text": "'continue' statement" + }, + "fullDescription": { + "text": "Reports a 'continue' statement. Inspection ID: ContinueStatementJS", + "markdown": "Reports a `continue` statement.\n\nInspection ID: ContinueStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ContinueStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToForLoopParameterJS", + "shortDescription": { + "text": "Assignment to 'for' loop parameter" + }, + "fullDescription": { + "text": "Reports an assignment to a variable declared as a 'for' loop parameter. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error. Inspection ID: AssignmentToForLoopParameterJS", + "markdown": "Reports an assignment to a variable declared as a `for` loop parameter. Although occasionally intended, this construct can be extremely confusing, and is often a result of an error.\n\nInspection ID: AssignmentToForLoopParameterJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentToForLoopParameterJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 47, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidConstructorUsage", + "shortDescription": { + "text": "Potentially invalid constructor usage" + }, + "fullDescription": { + "text": "Reports a usage of a potentially invalid constructor function, for example: a function that is not a constructor after 'new', using a constructor's prototype or calling a constructor without 'new'. A constructor function is assumed to have an upper case name (optional) or have an explicit JSDoc '@constructor' tag. Inspection ID: JSPotentiallyInvalidConstructorUsage", + "markdown": "Reports a usage of a potentially invalid constructor function, for example: a function that is not a constructor after `new`, using a constructor's prototype or calling a constructor without `new`. A constructor function is assumed to have an upper case name (optional) or have an explicit JSDoc `@constructor` tag.\n\nInspection ID: JSPotentiallyInvalidConstructorUsage" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidConstructorUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessArithmeticExpressionJS", + "shortDescription": { + "text": "Pointless arithmetic expression" + }, + "fullDescription": { + "text": "Reports an arithmetic expression that include adding or subtracting zero, multiplying by zero or one, division by one, and shift by zero. Such expressions may result from not fully completed automated refactoring. Inspection ID: PointlessArithmeticExpressionJS", + "markdown": "Reports an arithmetic expression that include adding or subtracting zero, multiplying by zero or one, division by one, and shift by zero. Such expressions may result from not fully completed automated refactoring.\n\nInspection ID: PointlessArithmeticExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessArithmeticExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NodeCoreCodingAssistance", + "shortDescription": { + "text": "Unresolved Node.js APIs" + }, + "fullDescription": { + "text": "Suggests configuring coding assistance for Node.js, for example, 'require' and/or core modules ('path', 'http', 'fs', etc.). See https://nodejs.org/api/ for the complete list. Inspection ID: NodeCoreCodingAssistance", + "markdown": "Suggests configuring coding assistance for Node.js, for example, `require` and/or core modules ('path', 'http', 'fs', etc.).\n\n\nSee for the complete list.\n\nInspection ID: NodeCoreCodingAssistance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NodeCoreCodingAssistance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Node.js", + "index": 55, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUndeclaredVariable", + "shortDescription": { + "text": "Implicitly declared global JavaScript variable" + }, + "fullDescription": { + "text": "Reports an implicit declaration of a global variable. Example: 'var aaa = 1; // good\n bbb = 2; // bad, if bbb is not declared with 'var' somewhere' Inspection ID: JSUndeclaredVariable", + "markdown": "Reports an implicit declaration of a global variable.\n\nExample:\n\n\n var aaa = 1; // good\n bbb = 2; // bad, if bbb is not declared with 'var' somewhere\n\nInspection ID: JSUndeclaredVariable" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSUndeclaredVariable", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DivideByZeroJS", + "shortDescription": { + "text": "Division by zero" + }, + "fullDescription": { + "text": "Reports division by zero or a remainder by zero. Inspection ID: DivideByZeroJS", + "markdown": "Reports division by zero or a remainder by zero.\n\nInspection ID: DivideByZeroJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DivideByZeroJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPrimitiveTypeWrapperUsage", + "shortDescription": { + "text": "Primitive type object wrapper used" + }, + "fullDescription": { + "text": "Reports an improper usage of a wrapper for primitive types or a property of a primitive type being modified, as in the latter case the assigned value will be lost. Inspection ID: JSPrimitiveTypeWrapperUsage", + "markdown": "Reports an improper usage of a wrapper for primitive types or a property of a primitive type being modified, as in the latter case the assigned value will be lost.\n\nInspection ID: JSPrimitiveTypeWrapperUsage" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPrimitiveTypeWrapperUsage", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptSmartCast", + "shortDescription": { + "text": "Narrowed type" + }, + "fullDescription": { + "text": "Reports a usage of a variable where the variable type is narrowed by a type guard. Note that severity level doesn't affect this inspection. Inspection ID: TypeScriptSmartCast", + "markdown": "Reports a usage of a variable where the variable type is narrowed by a type guard. Note that severity level doesn't affect this inspection.\n\nInspection ID: TypeScriptSmartCast" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeScriptSmartCast", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertIndexedForToForOf", + "shortDescription": { + "text": "Indexed 'for' is used instead of 'for..of'" + }, + "fullDescription": { + "text": "Reports an indexed 'for' loop used on an array. Suggests replacing it with a 'for..of' loop. 'for..of' loops are introduced in ECMAScript 6 and iterate over 'iterable' objects. Inspection ID: ES6ConvertIndexedForToForOf", + "markdown": "Reports an indexed [for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for) loop used on an array. Suggests replacing it with a [for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop. \n`for..of` loops are introduced in ECMAScript 6 and iterate over `iterable` objects.\n\nInspection ID: ES6ConvertIndexedForToForOf" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertIndexedForToForOf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSLastCommaInArrayLiteral", + "shortDescription": { + "text": "Unneeded last comma in array literal" + }, + "fullDescription": { + "text": "Reports a usage of a trailing comma in an array literal. The warning is reported only when the JavaScript language version is set to ECMAScript 5.1. Although trailing commas in arrays are allowed by the specification, some browsers may throw an error when a trailing comma is used. You can configure formatting options for trailing commas in Code Style | JavaScript or TypeScript | Punctuation. Inspection ID: JSLastCommaInArrayLiteral", + "markdown": "Reports a usage of a trailing comma in an array literal.\n\nThe warning is reported only when the JavaScript language version is set to ECMAScript 5.1.\n\nAlthough trailing commas in arrays are allowed by the specification, some browsers may throw an error when a trailing comma is used.\n\nYou can configure formatting options for trailing commas in **Code Style** \\| **JavaScript** or **TypeScript** \\| **Punctuation**.\n\nInspection ID: JSLastCommaInArrayLiteral" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSLastCommaInArrayLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpressionJS", + "shortDescription": { + "text": "Conditional expression" + }, + "fullDescription": { + "text": "Reports a ternary conditional expression. Some coding standards prohibit such expressions in favor of explicit 'if' statements. Inspection ID: ConditionalExpressionJS", + "markdown": "Reports a ternary conditional expression. Some coding standards prohibit such expressions in favor of explicit `if` statements.\n\nInspection ID: ConditionalExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertVarToLetConst", + "shortDescription": { + "text": "'var' is used instead of 'let' or 'const'" + }, + "fullDescription": { + "text": "Reports a 'var' declaration that is used instead of 'let' or 'const'. Both 'let' and 'const' are block-scoped and behave more strictly. Suggests replacing all 'var' declarations with 'let' or 'const' declarations, depending on the semantics of a particular value. The declarations may be moved to the top of the function or placed before the first usage of the variable to avoid Reference errors. Select the 'Conservatively convert var with Fix all action' option to prevent any changes in these complex cases when using the 'Fix all' action. Inspection ID: ES6ConvertVarToLetConst", + "markdown": "Reports a `var` declaration that is used instead of `let` or `const`. \nBoth `let` and `const` are block-scoped and behave more strictly. \n\nSuggests replacing all `var` declarations with `let` or `const` declarations, depending on the semantics of a particular value. The declarations may be moved to the top of the function or placed before the first usage of the variable to avoid Reference errors. \nSelect the 'Conservatively convert var with Fix all action' option to prevent any changes in these complex cases when using the 'Fix all' action.\n\nInspection ID: ES6ConvertVarToLetConst" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertVarToLetConst", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBooleanExpressionJS", + "shortDescription": { + "text": "Pointless statement or boolean expression" + }, + "fullDescription": { + "text": "Reports a pointless or pointlessly complicated boolean expression or statement. Example: 'let a = !(false && x);\n let b = false || x;' After the quick fix is applied the result looks like: 'let a = true;\n let b = x;' Inspection ID: PointlessBooleanExpressionJS", + "markdown": "Reports a pointless or pointlessly complicated boolean expression or statement.\n\nExample:\n\n\n let a = !(false && x);\n let b = false || x;\n\nAfter the quick fix is applied the result looks like:\n\n\n let a = true;\n let b = x;\n\nInspection ID: PointlessBooleanExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessBooleanExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSReferencingMutableVariableFromClosure", + "shortDescription": { + "text": "Referencing mutable variable from closure" + }, + "fullDescription": { + "text": "Reports access to outer mutable variables from functions. Example: 'for (var i = 1; i <= 3; i++) {\n setTimeout(function() {\n console.log(i); // bad\n }, 0);\n }' Inspection ID: JSReferencingMutableVariableFromClosure", + "markdown": "Reports access to outer mutable variables from functions.\n\nExample:\n\n\n for (var i = 1; i <= 3; i++) {\n setTimeout(function() {\n console.log(i); // bad\n }, 0);\n }\n\nInspection ID: JSReferencingMutableVariableFromClosure" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSReferencingMutableVariableFromClosure", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DynamicallyGeneratedCodeJS", + "shortDescription": { + "text": "Execution of dynamically generated code" + }, + "fullDescription": { + "text": "Reports a call of the 'eval()', 'setTimeout()', or 'setInterval()' function or an allocation of a 'Function' object. These functions are used to execute arbitrary strings of JavaScript text, which often dynamically generated. This can be very confusing, and may be a security risk. Ignores the cases when a callback function is provided to these methods statically, without code generation. Inspection ID: DynamicallyGeneratedCodeJS", + "markdown": "Reports a call of the `eval()`, `setTimeout()`, or `setInterval()` function or an allocation of a `Function` object. These functions are used to execute arbitrary strings of JavaScript text, which often dynamically generated. This can be very confusing, and may be a security risk. \n\nIgnores the cases when a callback function is provided to these methods statically, without code generation.\n\nInspection ID: DynamicallyGeneratedCodeJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DynamicallyGeneratedCodeJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedConditionalExpressionJS", + "shortDescription": { + "text": "Negated conditional expression" + }, + "fullDescription": { + "text": "Reports a conditional expression whose condition is negated. Suggests flipping the order of branches in the conditional expression to increase the clarity of the statement. Example: '!condition ? 2 : 1' Inspection ID: NegatedConditionalExpressionJS", + "markdown": "Reports a conditional expression whose condition is negated. Suggests flipping the order of branches in the conditional expression to increase the clarity of the statement. Example: `!condition ? 2 : 1`\n\nInspection ID: NegatedConditionalExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegatedConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUrlImportUsage", + "shortDescription": { + "text": "URL import is used" + }, + "fullDescription": { + "text": "Checks used URL imports in the JavaScript language. Suggests downloading the module for the specified remote URL. Such association enables the IDE to provide proper code completion and navigation. URLs in import specifiers are supported only for ECMAScript modules in the JavaScript language. Inspection ID: JSUrlImportUsage", + "markdown": "Checks used URL imports in the JavaScript language. Suggests downloading the module for the specified remote URL. Such association enables the IDE to provide proper code completion and navigation. \n\nURLs in import specifiers are supported only for ECMAScript modules in the JavaScript language.\n\nInspection ID: JSUrlImportUsage" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSUrlImportUsage", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 60, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnContinueStatementJS", + "shortDescription": { + "text": "Unnecessary label on 'continue' statement" + }, + "fullDescription": { + "text": "Reports a labeled 'continue' statement whose labels may be removed without changing the flow of control. Inspection ID: UnnecessaryLabelOnContinueStatementJS", + "markdown": "Reports a labeled `continue` statement whose labels may be removed without changing the flow of control.\n\nInspection ID: UnnecessaryLabelOnContinueStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryLabelOnContinueStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedEqualityJS", + "shortDescription": { + "text": "Chained equality" + }, + "fullDescription": { + "text": "Reports a chained equality comparison (i.e. 'a==b==c'). Such comparisons are confusing. Inspection ID: ChainedEqualityJS", + "markdown": "Reports a chained equality comparison (i.e. `a==b==c`). Such comparisons are confusing.\n\nInspection ID: ChainedEqualityJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ChainedEqualityComparisonsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 13, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SillyAssignmentJS", + "shortDescription": { + "text": "Variable is assigned to itself" + }, + "fullDescription": { + "text": "Reports an assignment in the form 'x = x'. Inspection ID: SillyAssignmentJS", + "markdown": "Reports an assignment in the form `x = x`.\n\nInspection ID: SillyAssignmentJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SillyAssignmentJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 47, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidTargetOfIndexedPropertyAccess", + "shortDescription": { + "text": "Possibly incorrect target of indexed property access" + }, + "fullDescription": { + "text": "Reports a potentially invalid indexed property access, for example, 'Array[1]'. Inspection ID: JSPotentiallyInvalidTargetOfIndexedPropertyAccess", + "markdown": "Reports a potentially invalid indexed property access, for example, `Array[1]`.\n\nInspection ID: JSPotentiallyInvalidTargetOfIndexedPropertyAccess" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidTargetOfIndexedPropertyAccess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSAccessibilityCheck", + "shortDescription": { + "text": "Inaccessible @private and @protected members referenced" + }, + "fullDescription": { + "text": "Reports a reference to a JavaScript member that is marked with a '@private' or '@protected' tag but does not comply with visibility rules that these tags imply. Inspection ID: JSAccessibilityCheck", + "markdown": "Reports a reference to a JavaScript member that is marked with a `@private` or `@protected` tag but does not comply with visibility rules that these tags imply.\n\nInspection ID: JSAccessibilityCheck" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSAccessibilityCheck", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertRequireIntoImport", + "shortDescription": { + "text": "'require()' is used instead of 'import'" + }, + "fullDescription": { + "text": "Reports a 'require()' statement. Suggests converting it to a 'require()' call with an 'import' statement. Enable 'Convert require() inside inner scopes with Fix all action' to convert all 'require()' calls inside the nested functions and statements when using the 'Fix all' action. Please note that converting 'require()' statements inside inner scopes to 'import' statements may cause changes in the semantics of the code. Import statements are static module dependencies and are hoisted, which means that they are moved to the top of the current module. 'require()' calls load modules dynamically. They can be executed conditionally, and their scope is defined by the expression in which they are used. Clear the 'Convert require() inside inner scopes with Fix all action' checkbox to prevent any changes in these complex cases when using the 'Fix all' action. Inspection ID: ES6ConvertRequireIntoImport", + "markdown": "Reports a `require()` statement. Suggests converting it to a `require()` call with an `import` statement. \n\nEnable 'Convert require() inside inner scopes with Fix all action' to convert all `require()` calls inside the nested functions and statements when using the 'Fix all' action. \n\nPlease note that converting `require()` statements inside inner scopes to `import` statements may cause changes in the semantics of the code. Import statements are static module dependencies and are hoisted, which means that they are moved to the top of the current module. `require()` calls load modules dynamically. They can be executed conditionally, and their scope is defined by the expression in which they are used. \nClear the 'Convert require() inside inner scopes with Fix all action' checkbox to prevent any changes in these complex cases when using the 'Fix all' action.\n\nInspection ID: ES6ConvertRequireIntoImport" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertRequireIntoImport", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithMultipleLoopsJS", + "shortDescription": { + "text": "Function with multiple loops" + }, + "fullDescription": { + "text": "Reports a function with multiple loop statements. Inspection ID: FunctionWithMultipleLoopsJS", + "markdown": "Reports a function with multiple loop statements.\n\nInspection ID: FunctionWithMultipleLoopsJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithMultipleLoopsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 42, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LabeledStatementJS", + "shortDescription": { + "text": "Labeled statement" + }, + "fullDescription": { + "text": "Reports a labeled statement. Inspection ID: LabeledStatementJS", + "markdown": "Reports a labeled statement.\n\nInspection ID: LabeledStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LabeledStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NpmUsedModulesInstalled", + "shortDescription": { + "text": "Missing module dependency" + }, + "fullDescription": { + "text": "Reports a module from a 'require()' call or an 'import' statement that is not installed or is not listed in package.json dependencies. Suggests installing the module and/or including it into package.json. For 'require()' calls, works only in the files from the scope of Node.js Core JavaScript library. Inspection ID: NpmUsedModulesInstalled", + "markdown": "Reports a module from a `require()` call or an `import` statement that is not installed or is not listed in package.json dependencies.\n\nSuggests installing the module and/or including it into package.json.\n\nFor `require()` calls, works only in the files from the scope of *Node.js Core* JavaScript library.\n\nInspection ID: NpmUsedModulesInstalled" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "NpmUsedModulesInstalled", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 60, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedCatchParameterJS", + "shortDescription": { + "text": "Unused 'catch' parameter" + }, + "fullDescription": { + "text": "Reports a 'catch' parameter that is not used in the corresponding block. The 'catch' parameters named 'ignore' or 'ignored' are ignored. Use the checkbox below to disable this inspection for 'catch' blocks with comments. Inspection ID: UnusedCatchParameterJS", + "markdown": "Reports a `catch` parameter that is not used in the corresponding block. The `catch` parameters named `ignore` or `ignored` are ignored.\n\n\nUse the checkbox below to disable this inspection for `catch`\nblocks with comments.\n\nInspection ID: UnusedCatchParameterJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedCatchParameterJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WithStatementJS", + "shortDescription": { + "text": "'with' statement" + }, + "fullDescription": { + "text": "Reports a 'with' statements. Such statements result in potentially confusing implicit bindings, and may behave strangely in setting new variables. Inspection ID: WithStatementJS", + "markdown": "Reports a `with` statements. Such statements result in potentially confusing implicit bindings, and may behave strangely in setting new variables.\n\nInspection ID: WithStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WithStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptCheckImport", + "shortDescription": { + "text": "Unresolved imported name" + }, + "fullDescription": { + "text": "Reports an unresolved name or binding in an 'import' declaration in TypeScript code. Inspection ID: TypeScriptCheckImport", + "markdown": "Reports an unresolved name or binding in an `import` declaration in TypeScript code.\n\nInspection ID: TypeScriptCheckImport" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptCheckImport", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSConstantReassignment", + "shortDescription": { + "text": "Attempt to assign to const or readonly variable" + }, + "fullDescription": { + "text": "Reports reassigning a value to a constant or a readonly variable. Inspection ID: JSConstantReassignment", + "markdown": "Reports reassigning a value to a constant or a readonly variable.\n\nInspection ID: JSConstantReassignment" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSConstantReassignment", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 34, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicNumberJS", + "shortDescription": { + "text": "Magic number" + }, + "fullDescription": { + "text": "Reports a \"magic number\" that is a numeric literal used without being named by a constant declaration. Magic numbers can result in code whose intention is unclear, and may result in errors if a magic number is changed in one code location but remains unchanged in another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0.0 and 1.0 are ignored. Inspection ID: MagicNumberJS", + "markdown": "Reports a \"magic number\" that is a numeric literal used without being named by a constant declaration. Magic numbers can result in code whose intention is unclear, and may result in errors if a magic number is changed in one code location but remains unchanged in another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0.0 and 1.0 are ignored.\n\nInspection ID: MagicNumberJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MagicNumberJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionNamingConventionJS", + "shortDescription": { + "text": "Function naming convention" + }, + "fullDescription": { + "text": "Reports a function whose name is too short, too long, or does not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression for function names. Use the standard 'java.util.regex' format for regular expressions. Inspection ID: FunctionNamingConventionJS", + "markdown": "Reports a function whose name is too short, too long, or does not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nfor function names. Use the standard `java.util.regex` format for regular expressions.\n\nInspection ID: FunctionNamingConventionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionNamingConventionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 64, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXSyntaxUsed", + "shortDescription": { + "text": "JSX syntax used" + }, + "fullDescription": { + "text": "Reports a usage of a JSX tag in JavaScript code. Inspection ID: JSXSyntaxUsed", + "markdown": "Reports a usage of a JSX tag in JavaScript code.\n\nInspection ID: JSXSyntaxUsed" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSXSyntaxUsed", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSJoinVariableDeclarationAndAssignment", + "shortDescription": { + "text": "Variable declaration can be merged with the first assignment to the variable" + }, + "fullDescription": { + "text": "Reports a variable that is declared without an initializer and is used much further in the code or in a single nested scope. Suggests moving the variable closer to its usages and joining it with the initializer expression. Inspection ID: JSJoinVariableDeclarationAndAssignment", + "markdown": "Reports a variable that is declared without an initializer and is used much further in the code or in a single nested scope. Suggests moving the variable closer to its usages and joining it with the initializer expression.\n\nInspection ID: JSJoinVariableDeclarationAndAssignment" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSJoinVariableDeclarationAndAssignment", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSRedundantSwitchStatement", + "shortDescription": { + "text": "'switch' statement is redundant and can be replaced" + }, + "fullDescription": { + "text": "Reports a 'switch' statement with an empty body, or with only one 'case' branch, or with a 'default' branch only. Inspection ID: JSRedundantSwitchStatement", + "markdown": "Reports a `switch` statement with an empty body, or with only one `case` branch, or with a `default` branch only.\n\nInspection ID: JSRedundantSwitchStatement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSRedundantSwitchStatement", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 65, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptLibrary", + "shortDescription": { + "text": "Missing global library" + }, + "fullDescription": { + "text": "Reports a TypeScript library file that is required for a symbol but is not listed under the 'lib' compiler option in 'tsconfig.json'. Inspection ID: TypeScriptLibrary", + "markdown": "Reports a TypeScript library file that is required for a symbol but is not listed under the `lib` compiler option in `tsconfig.json`.\n\nInspection ID: TypeScriptLibrary" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptLibrary", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptMissingAugmentationImport", + "shortDescription": { + "text": "Missing augmentation import" + }, + "fullDescription": { + "text": "Reports a usage from augmentation module without an explicit import. Inspection ID: TypeScriptMissingAugmentationImport", + "markdown": "Reports a usage from [augmentation module](https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation) without an explicit import.\n\nInspection ID: TypeScriptMissingAugmentationImport" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptMissingAugmentationImport", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnusedGlobalSymbols", + "shortDescription": { + "text": "Unused global symbol" + }, + "fullDescription": { + "text": "Reports an unused globally accessible public function, variable, class, or property. Inspection ID: JSUnusedGlobalSymbols", + "markdown": "Reports an unused globally accessible public function, variable, class, or property.\n\nInspection ID: JSUnusedGlobalSymbols" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnusedGlobalSymbols", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unused symbols", + "index": 19, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertModuleExportToExport", + "shortDescription": { + "text": "'module.exports' is used instead of 'export'" + }, + "fullDescription": { + "text": "Reports a 'module.export' statement. Suggests replacing it with an 'export' or 'export default' statement. Please note that the quick-fix for converting 'module.export' into 'export' is not available for 'module.export' inside functions or statements because 'export' statements can only be at the top level of a module. Inspection ID: ES6ConvertModuleExportToExport", + "markdown": "Reports a `module.export` statement. Suggests replacing it with an `export` or `export default` statement. \n\nPlease note that the quick-fix for converting `module.export` into `export` is not available for `module.export` inside functions or statements because `export` statements can only be at the top level of a module.\n\nInspection ID: ES6ConvertModuleExportToExport" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertModuleExportToExport", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DocumentWriteJS", + "shortDescription": { + "text": "Call to 'document.write()'" + }, + "fullDescription": { + "text": "Reports a method call to 'document.write()' or 'document.writeln()'. Most usages of such calls are performed better with explicit DOM calls, such as 'getElementByID()' and 'createElement()'. Additionally, the 'write()' and 'writeln()' calls will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can result in difficulty to point out bugs. Inspection ID: DocumentWriteJS", + "markdown": "Reports a method call to `document.write()` or `document.writeln()`. Most usages of such calls are performed better with explicit DOM calls, such as `getElementByID()` and `createElement()`. Additionally, the `write()` and `writeln()` calls will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can result in difficulty to point out bugs.\n\nInspection ID: DocumentWriteJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DocumentWriteJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/DOM issues", + "index": 66, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BlockStatementJS", + "shortDescription": { + "text": "Unnecessary block statement" + }, + "fullDescription": { + "text": "Reports a block statement that is not used as the body of 'if', 'for', 'while', 'do', 'with', or 'try' statements, or as the body of a function declaration. Starting from ECMAScript 6, JavaScript blocks introduce new scopes for 'let' and 'const' variables, but still free-standing block statements may be confusing and result in subtle bugs when used with 'var' variables. Inspection ID: BlockStatementJS", + "markdown": "Reports a block statement that is not used as the body of `if`, `for`, `while`, `do`, `with`, or `try` statements, or as the body of a function declaration. Starting from ECMAScript 6, JavaScript blocks introduce new scopes for `let` and `const` variables, but still free-standing block statements may be confusing and result in subtle bugs when used with `var` variables.\n\nInspection ID: BlockStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "BlockStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousFunctionJS", + "shortDescription": { + "text": "Anonymous function" + }, + "fullDescription": { + "text": "Reports an anonymous function. An explicit name of a function expression may be helpful for debugging. Ignores function expressions without names if they have a 'name' property specified in the ECMAScript 6 standard. For example, 'var bar = function() {};' is not reported. Inspection ID: AnonymousFunctionJS", + "markdown": "Reports an anonymous function. An explicit name of a function expression may be helpful for debugging. Ignores function expressions without names if they have a `name` property specified in the ECMAScript 6 standard. For example, `var bar = function() {};` is not reported.\n\nInspection ID: AnonymousFunctionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AnonymousFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially undesirable code constructs", + "index": 15, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectAllocationIgnoredJS", + "shortDescription": { + "text": "Result of object allocation ignored" + }, + "fullDescription": { + "text": "Reports object allocation where the result of the allocated object is ignored, for example, 'new Error();' as a statement, without any assignment. Such allocation expressions may indicate an odd object initialization strategy. Inspection ID: ObjectAllocationIgnoredJS", + "markdown": "Reports object allocation where the result of the allocated object is ignored, for example, `new Error();` as a statement, without any assignment. Such allocation expressions may indicate an odd object initialization strategy.\n\nInspection ID: ObjectAllocationIgnoredJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ObjectAllocationIgnored", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteRecursionJS", + "shortDescription": { + "text": "Infinite recursion" + }, + "fullDescription": { + "text": "Reports a function which must either recurse infinitely or throw an exception. Such functions may not return normally. Inspection ID: InfiniteRecursionJS", + "markdown": "Reports a function which must either recurse infinitely or throw an exception. Such functions may not return normally.\n\nInspection ID: InfiniteRecursionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InfiniteRecursionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSTypeOfValues", + "shortDescription": { + "text": "'typeof' comparison with non-standard value" + }, + "fullDescription": { + "text": "Reports a comparison of a 'typeof' expression with a literal string which is not one of the standard types: 'undefined', 'object', 'boolean', 'number', 'string', 'function', or 'symbol'. Such comparisons always return 'false'. Inspection ID: JSTypeOfValues", + "markdown": "Reports a comparison of a `typeof` expression with a literal string which is not one of the standard types: `undefined`, `object`, `boolean`, `number`, `string`, `function`, or `symbol`. Such comparisons always return `false`.\n\nInspection ID: JSTypeOfValues" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSTypeOfValues", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedConditionalExpressionJS", + "shortDescription": { + "text": "Nested conditional expression" + }, + "fullDescription": { + "text": "Reports a ternary conditional expression within another ternary condition. Such nested conditionals may be extremely confusing, and best replaced by more explicit conditional logic. Inspection ID: NestedConditionalExpressionJS", + "markdown": "Reports a ternary conditional expression within another ternary condition. Such nested conditionals may be extremely confusing, and best replaced by more explicit conditional logic.\n\nInspection ID: NestedConditionalExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedConditionalExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncompatibleMaskJS", + "shortDescription": { + "text": "Incompatible bitwise mask operation" + }, + "fullDescription": { + "text": "Reports a bitwise mask expression which for sure evaluates to 'true' or 'false'. Expressions are of the form '(var & constant1) == constant2' or '(var | constant1) == constant2', where 'constant1' and 'constant2' are incompatible bitmask constants. Example: '// Incompatible mask: as the last byte in mask is zero,\n// something like 0x1200 would be possible, but not 0x1234\nif ((mask & 0xFF00) == 0x1234) {...}' Inspection ID: IncompatibleMaskJS", + "markdown": "Reports a bitwise mask expression which for sure evaluates to `true` or `false`. Expressions are of the form `(var & constant1) == constant2` or `(var | constant1) == constant2`, where `constant1` and `constant2` are incompatible bitmask constants.\n\nExample:\n\n\n // Incompatible mask: as the last byte in mask is zero,\n // something like 0x1200 would be possible, but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}\n\nInspection ID: IncompatibleMaskJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncompatibleBitwiseMaskOperation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 24, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextLabelInSwitchStatementJS", + "shortDescription": { + "text": "Text label in 'switch' statement" + }, + "fullDescription": { + "text": "Reports a labeled statement inside a 'switch' statement, which often results from a typo. Example: 'switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }' Inspection ID: TextLabelInSwitchStatementJS", + "markdown": "Reports a labeled statement inside a `switch` statement, which often results from a typo.\n\nExample:\n\n\n switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }\n\nInspection ID: TextLabelInSwitchStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TextLabelInSwitchStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 65, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6PossiblyAsyncFunction", + "shortDescription": { + "text": "'await' in non-async function" + }, + "fullDescription": { + "text": "Reports a usage of 'await' in a function that was possibly intended to be async but is actually missing the 'async' modifier. Although 'await' can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made 'async'. Inspection ID: ES6PossiblyAsyncFunction", + "markdown": "Reports a usage of `await` in a function that was possibly intended to be async but is actually missing the `async` modifier. Although `await` can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made `async`.\n\nInspection ID: ES6PossiblyAsyncFunction" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6PossiblyAsyncFunction", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 67, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyCatchBlockJS", + "shortDescription": { + "text": "Empty 'catch' block" + }, + "fullDescription": { + "text": "Reports an empty 'catch' block. This indicates that errors are simply ignored instead of handling them. Any comment in a 'catch' block mutes the inspection. Inspection ID: EmptyCatchBlockJS", + "markdown": "Reports an empty `catch` block. This indicates that errors are simply ignored instead of handling them. \n\nAny comment in a `catch` block mutes the inspection.\n\nInspection ID: EmptyCatchBlockJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyCatchBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSHint", + "shortDescription": { + "text": "JSHint" + }, + "fullDescription": { + "text": "Reports a problem detected by the JSHint linter. Inspection ID: JSHint", + "markdown": "Reports a problem detected by the [JSHint](https://jshint.com/) linter.\n\nInspection ID: JSHint" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSHint", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code quality tools", + "index": 68, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FlowJSFlagCommentPlacement", + "shortDescription": { + "text": "Misplaced @flow flag" + }, + "fullDescription": { + "text": "Reports a '@flow' flag comment that is not located at the top of a file. Inspection ID: FlowJSFlagCommentPlacement", + "markdown": "Reports a `@flow` flag comment that is not located at the top of a file.\n\nInspection ID: FlowJSFlagCommentPlacement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FlowJSFlagCommentPlacement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Flow type checker", + "index": 16, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Eslint", + "shortDescription": { + "text": "ESLint" + }, + "fullDescription": { + "text": "Reports a discrepancy detected by the ESLint linter. The highlighting is based on the rule severity specified in the ESLint configuration file for each individual rule. Clear the 'Use rule severity from the configuration file' checkbox to use the severity configured in this inspection for all ESLint rules. Inspection ID: Eslint", + "markdown": "Reports a discrepancy detected by the [ESLint](https://eslint.org) linter. \n\nThe highlighting is based on the rule severity specified in the [ESLint configuration file](https://eslint.org/docs/user-guide/configuring) for each individual rule. \n\nClear the 'Use rule severity from the configuration file' checkbox to use the severity configured in this inspection for all ESLint rules.\n\nInspection ID: Eslint" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "Eslint", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code quality tools", + "index": 68, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDuplicatedDeclaration", + "shortDescription": { + "text": "Duplicate declaration" + }, + "fullDescription": { + "text": "Reports multiple declarations in a scope. Inspection ID: JSDuplicatedDeclaration", + "markdown": "Reports multiple declarations in a scope.\n\nInspection ID: JSDuplicatedDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSDuplicatedDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSEqualityComparisonWithCoercion.TS", + "shortDescription": { + "text": "Equality operator may cause type coercion" + }, + "fullDescription": { + "text": "Reports a usage of equality operators may cause unexpected type coercions. Suggests replacing '==' or '!=' equality operators with type-safe '===' or '!==' operators. Depending on the option selected, one of the following cases will be reported: All usages of '==' and '!=' operators. All usages except comparison with null. Some code styles allow using 'x == null' as a replacement for 'x === null || x === undefined'. Only suspicious expressions, such as: '==' or '!=' comparisons with '0', '''', 'null', 'true', 'false', or 'undefined'. Inspection ID: JSEqualityComparisonWithCoercion.TS", + "markdown": "Reports a usage of equality operators may cause unexpected type coercions. Suggests replacing `==` or `!=` equality operators with type-safe `===` or `!==` operators.\n\nDepending on the option selected, one of the following cases will be reported:\n\n* All usages of `==` and `!=` operators.\n* All usages except comparison with null. Some code styles allow using `x == null` as a replacement for `x === null || x === undefined`.\n* Only suspicious expressions, such as: `==` or `!=` comparisons with `0`, `''`, `null`, `true`, `false`, or `undefined`.\n\nInspection ID: JSEqualityComparisonWithCoercion.TS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EqualityComparisonWithCoercionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSOctalInteger", + "shortDescription": { + "text": "Octal integer" + }, + "fullDescription": { + "text": "Reports a deprecated octal integer literal prefixed with '0' instead of '0o'. Such literals are not allowed in modern ECMAScript code, and using them in the strict mode is an error. To force this inspection for ES5 and ES3 language levels, select the 'Warn about obsolete octal literals in ES5- code' checkbox below. Inspection ID: JSOctalInteger", + "markdown": "Reports a deprecated octal integer literal prefixed with `0` instead of `0o`. \nSuch literals are not allowed in modern ECMAScript code, and using them in the strict mode is an error. \nTo force this inspection for ES5 and ES3 language levels, select the 'Warn about obsolete octal literals in ES5- code' checkbox below.\n\nInspection ID: JSOctalInteger" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSOctalInteger", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 34, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionCaughtLocallyJS", + "shortDescription": { + "text": "Exception used for local control-flow" + }, + "fullDescription": { + "text": "Reports a 'throw' statement whose exceptions are always caught by the containing 'try' statement. Using 'throw' statements as a 'goto' to change the local flow of control is confusing. Inspection ID: ExceptionCaughtLocallyJS", + "markdown": "Reports a `throw` statement whose exceptions are always caught by the containing `try` statement. Using `throw` statements as a `goto` to change the local flow of control is confusing.\n\nInspection ID: ExceptionCaughtLocallyJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ExceptionCaughtLocallyJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowFromFinallyBlockJS", + "shortDescription": { + "text": "'throw' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports s 'throw' statement inside a 'finally' block. Such 'throw' statements may mask exceptions thrown, and complicate debugging. Inspection ID: ThrowFromFinallyBlockJS", + "markdown": "Reports s `throw` statement inside a `finally` block. Such `throw` statements may mask exceptions thrown, and complicate debugging.\n\nInspection ID: ThrowFromFinallyBlockJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThrowInsideFinallyBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptValidateGenericTypes", + "shortDescription": { + "text": "Incorrect generic type argument" + }, + "fullDescription": { + "text": "Reports an invalid type argument in a function, interface, or class declaration. Inspection ID: TypeScriptValidateGenericTypes", + "markdown": "Reports an invalid type argument in a function, interface, or class declaration.\n\nInspection ID: TypeScriptValidateGenericTypes" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "TypeScriptValidateGenericTypes", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclomaticComplexityJS", + "shortDescription": { + "text": "Overly complex function" + }, + "fullDescription": { + "text": "Reports a function with too many branching points in a function (too high cyclomatic complexity). Such functions may be confusing and hard to test. Use the field provided below to specify the maximum acceptable cyclomatic complexity for a function. Inspection ID: CyclomaticComplexityJS", + "markdown": "Reports a function with too many branching points in a function (too high cyclomatic complexity). Such functions may be confusing and hard to test.\n\n\nUse the field provided below to specify the maximum acceptable cyclomatic complexity for a function.\n\nInspection ID: CyclomaticComplexityJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 42, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMismatchedCollectionQueryUpdate", + "shortDescription": { + "text": "Mismatched query and update of collection" + }, + "fullDescription": { + "text": "Reports a collection of fields or variables whose contents are either queried and not updated or updated and not queried. Such mismatched queries and updates are pointless and may indicate either dead code or a typographical error. Query methods are automatically detected, based on whether they return something, or a callback is passed to them. Use the table below to specify which methods are update methods. Inspection ID: JSMismatchedCollectionQueryUpdate", + "markdown": "Reports a collection of fields or variables whose contents are either queried and not updated or updated and not queried. Such mismatched queries and updates are pointless and may indicate either dead code or a typographical error.\n\n\nQuery methods are automatically detected, based on whether they return something, or a callback is passed to them.\nUse the table below to specify which methods are update methods.\n\nInspection ID: JSMismatchedCollectionQueryUpdate" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSMismatchedCollectionQueryUpdate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageJsonMismatchedDependency", + "shortDescription": { + "text": "Mismatched dependencies in package.json" + }, + "fullDescription": { + "text": "Reports a dependency from package.json that is not installed or doesn't match the specified version range. Inspection ID: PackageJsonMismatchedDependency", + "markdown": "Reports a dependency from package.json that is not installed or doesn't match the specified [version range](https://docs.npmjs.com/about-semantic-versioning).\n\nInspection ID: PackageJsonMismatchedDependency" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PackageJsonMismatchedDependency", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 60, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSPotentiallyInvalidUsageOfThis", + "shortDescription": { + "text": "Potentially invalid reference to 'this' from closure" + }, + "fullDescription": { + "text": "Reports a 'this' in closure that is used for referencing properties of outer context. Example: 'function Outer() {\n this.outerProp = 1;\n function inner() {\n // bad, because 'outerProp' of Outer\n // won't be updated here\n // on calling 'new Outer()' as may be expected\n this.outerProp = 2;\n }\n inner();\n}' Inspection ID: JSPotentiallyInvalidUsageOfThis", + "markdown": "Reports a `this` in closure that is used for referencing properties of outer context.\n\nExample:\n\n\n function Outer() {\n this.outerProp = 1;\n function inner() {\n // bad, because 'outerProp' of Outer\n // won't be updated here\n // on calling 'new Outer()' as may be expected\n this.outerProp = 2;\n }\n inner();\n }\n\nInspection ID: JSPotentiallyInvalidUsageOfThis" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSPotentiallyInvalidUsageOfThis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSMissingSwitchDefault", + "shortDescription": { + "text": "'switch' statement has no 'default' branch" + }, + "fullDescription": { + "text": "Reports a 'switch' statement without a 'default' clause when some possible values are not enumerated. Inspection ID: JSMissingSwitchDefault", + "markdown": "Reports a `switch` statement without a `default` clause when some possible values are not enumerated.\n\nInspection ID: JSMissingSwitchDefault" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSMissingSwitchDefault", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 65, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSXNamespaceValidation", + "shortDescription": { + "text": "Missing JSX namespace" + }, + "fullDescription": { + "text": "Reports a usage of a JSX construction without importing namespace. Having the namespace in the file scope ensures proper code compilation. Inspection ID: JSXNamespaceValidation", + "markdown": "Reports a usage of a JSX construction without importing namespace. Having the namespace in the file scope ensures proper code compilation.\n\nInspection ID: JSXNamespaceValidation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSXNamespaceValidation", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 60, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnresolvedLibraryURL", + "shortDescription": { + "text": "Missed locally stored library for HTTP link" + }, + "fullDescription": { + "text": "Reports a URL of an external JavaScript library that is not associated with any locally stored file. Suggests downloading the library. Such association enables the IDE to provide proper code completion and navigation. Inspection ID: JSUnresolvedLibraryURL", + "markdown": "Reports a URL of an external JavaScript library that is not associated with any locally stored file. Suggests downloading the library. Such association enables the IDE to provide proper code completion and navigation.\n\nInspection ID: JSUnresolvedLibraryURL" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnresolvedLibraryURL", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6PreferShortImport", + "shortDescription": { + "text": "Import can be shortened" + }, + "fullDescription": { + "text": "Reports an ES6 import whose 'from' part can be shortened. Suggests importing the parent directory. Inspection ID: ES6PreferShortImport", + "markdown": "Reports an ES6 import whose `from` part can be shortened. Suggests importing the parent directory.\n\nInspection ID: ES6PreferShortImport" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ES6PreferShortImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBitwiseExpressionJS", + "shortDescription": { + "text": "Bitwise expression can be simplified" + }, + "fullDescription": { + "text": "Reports an expression that includes 'and' with zero, 'or' by zero, or shifting by zero. Such expressions may result from not fully completed automated refactorings. Inspection ID: PointlessBitwiseExpressionJS", + "markdown": "Reports an expression that includes `and` with zero, `or` by zero, or shifting by zero. Such expressions may result from not fully completed automated refactorings.\n\nInspection ID: PointlessBitwiseExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PointlessBitwiseExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Bitwise operation issues", + "index": 24, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteLoopJS", + "shortDescription": { + "text": "Infinite loop statement" + }, + "fullDescription": { + "text": "Reports a 'for', 'while', or 'do' statement which can only exit by throwing an exception. Such statements often indicate coding errors. Inspection ID: InfiniteLoopJS", + "markdown": "Reports a `for`, `while`, or `do` statement which can only exit by throwing an exception. Such statements often indicate coding errors.\n\nInspection ID: InfiniteLoopJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InfiniteLoopJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSStringConcatenationToES6Template", + "shortDescription": { + "text": "String concatenation is used instead of template literal" + }, + "fullDescription": { + "text": "Reports a string concatenation. Suggests replacing it with a template literal Example '\"result: \" + a + \".\"' After applying the quick-fix the code looks as follows: '`result: ${a}.`' Inspection ID: JSStringConcatenationToES6Template", + "markdown": "Reports a string concatenation. Suggests replacing it with a [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)\n\nExample\n\n \"result: \" + a + \".\" \n\nAfter applying the quick-fix the code looks as follows:\n\n `result: ${a}.` \n\nInspection ID: JSStringConcatenationToES6Template" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSStringConcatenationToES6Template", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSArrowFunctionBracesCanBeRemoved", + "shortDescription": { + "text": "Redundant braces around arrow function body" + }, + "fullDescription": { + "text": "Reports an arrow function whose body only consists of braces and exactly one statement. Suggests converting to concise syntax without braces. 'let incrementer = (x) => {return x + 1};' After the quick-fix is applied, the code fragment looks as follows: 'let incrementer = (x) => x + 1;' Inspection ID: JSArrowFunctionBracesCanBeRemoved", + "markdown": "Reports an arrow function whose body only consists of braces and exactly one statement. Suggests converting to concise syntax without braces.\n\n\n let incrementer = (x) => {return x + 1};\n\nAfter the quick-fix is applied, the code fragment looks as follows:\n\n\n let incrementer = (x) => x + 1;\n\nInspection ID: JSArrowFunctionBracesCanBeRemoved" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSArrowFunctionBracesCanBeRemoved", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 13, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAssignmentWithOperatorAssignmentJS", + "shortDescription": { + "text": "Assignment could be replaced with operator assignment" + }, + "fullDescription": { + "text": "Reports an assignment operation that can be replaced by an operator assignment to make your code shorter and probably clearer. Example: 'x = x + 3;'\n 'x = x / 3;'\n After the quick fix is applied the result looks like: 'x += 3;'\n 'x /= 3;'\n Inspection ID: ReplaceAssignmentWithOperatorAssignmentJS", + "markdown": "Reports an assignment operation that can be replaced by an operator assignment to make your code shorter and probably clearer.\n\n\nExample:\n\n x = x + 3;\n x = x / 3;\n\nAfter the quick fix is applied the result looks like:\n\n x += 3;\n x /= 3;\n\nInspection ID: ReplaceAssignmentWithOperatorAssignmentJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "AssignmentReplaceableWithOperatorAssignmentJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 47, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSFileReferences", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference in a JavaScript file, including CommonJS and AMD modules references. Inspection ID: JSFileReferences", + "markdown": "Reports an unresolved file reference in a JavaScript file, including CommonJS and AMD modules references.\n\nInspection ID: JSFileReferences" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSFileReferences", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithInconsistentReturnsJS", + "shortDescription": { + "text": "Function with inconsistent returns" + }, + "fullDescription": { + "text": "Reports a function that returns a value in some cases while in other cases no value is returned. This usually indicates an error. Example: 'function foo() {\n if (true)\n return 3;\n return;\n}'\n Inspection ID: FunctionWithInconsistentReturnsJS", + "markdown": "Reports a function that returns a value in some cases while in other cases no value is returned. This usually indicates an error.\n\nExample:\n\n\n function foo() {\n if (true)\n return 3;\n return;\n }\n\nInspection ID: FunctionWithInconsistentReturnsJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithInconsistentReturnsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 34, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ClassMemberInitializationOrder", + "shortDescription": { + "text": "Use of possibly unassigned property in a static initializer" + }, + "fullDescription": { + "text": "Reports a class member initializer which references another non-hoisted class member while the latter may be not initialized yet. Initialization of class members happens consequently for fields, so a field cannot reference another field that is declared later. Inspection ID: ES6ClassMemberInitializationOrder", + "markdown": "Reports a class member initializer which references another non-hoisted class member while the latter may be not initialized yet. \n\nInitialization of class members happens consequently for fields, so a field cannot reference another field that is declared later.\n\nInspection ID: ES6ClassMemberInitializationOrder" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ES6ClassMemberInitializationOrder", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyTryBlockJS", + "shortDescription": { + "text": "Empty 'try' block" + }, + "fullDescription": { + "text": "Reports an empty 'try' block, which usually indicates an error. Inspection ID: EmptyTryBlockJS", + "markdown": "Reports an empty `try` block, which usually indicates an error.\n\nInspection ID: EmptyTryBlockJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyTryBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReservedWordUsedAsNameJS", + "shortDescription": { + "text": "Reserved word used as name" + }, + "fullDescription": { + "text": "Reports a JavaScript reserved word used as a name. The JavaScript specification reserves a number of words which are currently not used as keywords. Using those words as identifiers may result in broken code if later versions of JavaScript start using them as keywords. Inspection ID: ReservedWordUsedAsNameJS", + "markdown": "Reports a JavaScript reserved word used as a name. The JavaScript specification reserves a number of words which are currently not used as keywords. Using those words as identifiers may result in broken code if later versions of JavaScript start using them as keywords.\n\nInspection ID: ReservedWordUsedAsNameJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReservedWordAsName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 34, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSClassNamingConvention", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports a class or a function that is annotated with a JSDoc '@constructor' or '@class' tag whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression expected for classes names. Use the standard 'java.util.regex' format for regular expressions. Inspection ID: JSClassNamingConvention", + "markdown": "Reports a class or a function that is annotated with a JSDoc `@constructor` or `@class` tag whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nexpected for classes names. Use the standard `java.util.regex` format for regular expressions.\n\nInspection ID: JSClassNamingConvention" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSClassNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 64, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedFunctionJS", + "shortDescription": { + "text": "Nested function" + }, + "fullDescription": { + "text": "Reports a function nested inside another function. Although JavaScript allows functions to be nested, such constructs may be confusing. Use the checkbox below to ignore anonymous nested functions. Inspection ID: NestedFunctionJS", + "markdown": "Reports a function nested inside another function. Although JavaScript allows functions to be nested, such constructs may be confusing.\n\n\nUse the checkbox below to ignore anonymous nested functions.\n\nInspection ID: NestedFunctionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XHTMLIncompatabilitiesJS", + "shortDescription": { + "text": "Incompatible XHTML usages" + }, + "fullDescription": { + "text": "Reports common JavaScript DOM patterns which may present problems with XHTML documents. In particular, the patterns detected will behave completely differently depending on whether the document is loaded as XML or HTML. This can result in subtle bugs where script behaviour is dependent on the MIME-type of the document, rather than its content. Patterns detected include document.body, document.images, document.applets, document.links, document.forms, and document.anchors. Inspection ID: XHTMLIncompatabilitiesJS", + "markdown": "Reports common JavaScript DOM patterns which may present problems with XHTML documents. In particular, the patterns detected will behave completely differently depending on whether the document is loaded as XML or HTML. This can result in subtle bugs where script behaviour is dependent on the MIME-type of the document, rather than its content. Patterns detected include **document.body** , **document.images** , **document.applets** , **document.links** , **document.forms** , and **document.anchors** .\n\nInspection ID: XHTMLIncompatabilitiesJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XHTMLIncompatabilitiesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/DOM issues", + "index": 66, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncrementDecrementResultUsedJS", + "shortDescription": { + "text": "Result of increment or decrement used" + }, + "fullDescription": { + "text": "Reports an increment ('++') or decrement ('--') expression where the result of the assignment is used in a containing expression. Such assignments can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Example: 'var a = b++' Inspection ID: IncrementDecrementResultUsedJS", + "markdown": "Reports an increment (`++`) or decrement (`--`) expression where the result of the assignment is used in a containing expression. Such assignments can result in confusion due to the order of operations, as evaluation of the assignment may affect the outer expression in unexpected ways. Example: `var a = b++`\n\nInspection ID: IncrementDecrementResultUsedJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IncrementDecrementResultUsedJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousTypeOfGuard", + "shortDescription": { + "text": "Unsound type guard check" + }, + "fullDescription": { + "text": "Reports a 'typeof' or 'instanceof' unsound type guard check. The 'typeof x' type guard can be unsound in one of the following two cases: 'typeof x' never corresponds to the specified value (for example, 'typeof x === 'number'' when 'x' is of the type 'string | boolean') 'typeof x' always corresponds to the specified value (for example, 'typeof x === 'string'' when 'x' is of the type 'string') The 'x instanceof A' type guard can be unsound in one of the following two cases: The type of 'x' is not related to 'A' The type of 'x' is 'A' or a subtype of 'A' Inspection ID: SuspiciousTypeOfGuard", + "markdown": "Reports a `typeof` or `instanceof` unsound type guard check. The `typeof x` type guard can be unsound in one of the following two cases:\n\n* `typeof x` never corresponds to the specified value (for example, `typeof x === 'number'` when `x` is of the type 'string \\| boolean')\n* `typeof x` always corresponds to the specified value (for example, `typeof x === 'string'` when `x` is of the type 'string')\n\nThe `x instanceof A` type guard can be unsound in one of the following two cases:\n\n* The type of `x` is not related to `A`\n* The type of `x` is `A` or a subtype of `A`\n\nInspection ID: SuspiciousTypeOfGuard" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SuspiciousTypeOfGuard", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptJSXUnresolvedComponent", + "shortDescription": { + "text": "Unresolved JSX component" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a JSX component. Suggests adding an import statement if the referenced component is defined in the project or its dependencies or creating a new component with the specified name. The template for a new component can be modified in Editor | File and Code Templates. Inspection ID: TypeScriptJSXUnresolvedComponent", + "markdown": "Reports an unresolved reference to a JSX component. Suggests adding an import statement if the referenced component is defined in the project or its dependencies or creating a new component with the specified name.\n\nThe template for a new component can be modified in Editor \\| File and Code Templates.\n\nInspection ID: TypeScriptJSXUnresolvedComponent" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptJSXUnresolvedComponent", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptFieldCanBeMadeReadonly", + "shortDescription": { + "text": "Field can be readonly" + }, + "fullDescription": { + "text": "Reports a private field that can be made readonly (for example, if the field is assigned only in the constructor). Inspection ID: TypeScriptFieldCanBeMadeReadonly", + "markdown": "Reports a private field that can be made readonly (for example, if the field is assigned only in the constructor).\n\nInspection ID: TypeScriptFieldCanBeMadeReadonly" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptFieldCanBeMadeReadonly", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6DestructuringVariablesMerge", + "shortDescription": { + "text": "Destructuring properties with the same key" + }, + "fullDescription": { + "text": "Reports multiple destructuring properties with identical keys. Suggests merging the properties. Inspection ID: ES6DestructuringVariablesMerge", + "markdown": "Reports multiple destructuring properties with identical keys. Suggests merging the properties.\n\nInspection ID: ES6DestructuringVariablesMerge" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6DestructuringVariablesMerge", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopStatementThatDoesntLoopJS", + "shortDescription": { + "text": "Loop statement that doesn't loop" + }, + "fullDescription": { + "text": "Reports a 'for', 'while', or 'do' statement whose bodies are guaranteed to execute at most once. Normally, this indicates an error. Inspection ID: LoopStatementThatDoesntLoopJS", + "markdown": "Reports a `for`, `while`, or `do` statement whose bodies are guaranteed to execute at most once. Normally, this indicates an error.\n\nInspection ID: LoopStatementThatDoesntLoopJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LoopStatementThatDoesntLoopJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedIfStatementJS", + "shortDescription": { + "text": "Negated 'if' statement" + }, + "fullDescription": { + "text": "Reports if statements which have an else branch and a negated condition. Flipping the order of the if and else branches will usually increase the clarity of such statements. Inspection ID: NegatedIfStatementJS", + "markdown": "Reports **if** statements which have an **else** branch and a negated condition. Flipping the order of the **if** and **else** branches will usually increase the clarity of such statements.\n\nInspection ID: NegatedIfStatementJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NegatedIfStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSNonASCIINames", + "shortDescription": { + "text": "Identifiers with non-ASCII symbols" + }, + "fullDescription": { + "text": "Reports a non-ASCII symbol in a name. If the 'Allow only ASCII names' option is selected, reports all names that contain non-ASCII symbols. Otherwise reports all names that contain both ASCII and non-ASCII symbols. Inspection ID: JSNonASCIINames", + "markdown": "Reports a non-ASCII symbol in a name. \n\nIf the 'Allow only ASCII names' option is selected, reports all names that contain non-ASCII symbols. \nOtherwise reports all names that contain both ASCII and non-ASCII symbols.\n\nInspection ID: JSNonASCIINames" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSNonASCIINames", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 64, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptRedundantGenericType", + "shortDescription": { + "text": "Redundant type arguments" + }, + "fullDescription": { + "text": "Reports a type argument that is equal to the default one and can be removed. Example: 'type Foo = T;\nlet z: Foo;' Inspection ID: TypeScriptRedundantGenericType", + "markdown": "Reports a type argument that is equal to the default one and can be removed.\n\n\nExample:\n\n\n type Foo = T;\n let z: Foo;\n\nInspection ID: TypeScriptRedundantGenericType" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptRedundantGenericType", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptUMDGlobal", + "shortDescription": { + "text": "Referenced UMD global variable" + }, + "fullDescription": { + "text": "Reports a usage of a Universal Module Definition (UMD) global variable if the current file is a module (ECMAScript or CommonJS). Referencing UMD variables without explicit imports can lead to a runtime error if the library isn't included implicitly. Inspection ID: TypeScriptUMDGlobal", + "markdown": "Reports a usage of a Universal Module Definition (UMD) global variable if the current file is a module (ECMAScript or CommonJS). Referencing UMD variables without explicit imports can lead to a runtime error if the library isn't included implicitly.\n\nInspection ID: TypeScriptUMDGlobal" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptUMDGlobal", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryReturnJS", + "shortDescription": { + "text": "Unnecessary 'return' statement" + }, + "fullDescription": { + "text": "Reports an unnecessary 'return' statement, that is, a 'return' statement that returns no value and occurs just before the function would have \"fallen through\" the bottom. These statements may be safely removed. Inspection ID: UnnecessaryReturnJS", + "markdown": "Reports an unnecessary `return` statement, that is, a `return` statement that returns no value and occurs just before the function would have \"fallen through\" the bottom. These statements may be safely removed.\n\nInspection ID: UnnecessaryReturnJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnnecessaryReturnStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpressionWithIdenticalBranchesJS", + "shortDescription": { + "text": "Conditional expression with identical branches" + }, + "fullDescription": { + "text": "Reports a ternary conditional expression with identical 'then' and 'else' branches. Inspection ID: ConditionalExpressionWithIdenticalBranchesJS", + "markdown": "Reports a ternary conditional expression with identical `then` and `else` branches.\n\nInspection ID: ConditionalExpressionWithIdenticalBranchesJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConditionalExpressionWithIdenticalBranchesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnfilteredForInLoop", + "shortDescription": { + "text": "Unfiltered for..in loop" + }, + "fullDescription": { + "text": "Reports unfiltered 'for-in' loops. The use of this construct results in processing not only own properties of an object but properties from its prototype as well. It may be unexpected in some specific cases, for example, in utility methods that copy or modify all properties or when 'Object''s prototype may be incorrectly modified. For example, the following code will print 42 and myMethod: 'Object.prototype.myMethod = function myMethod() {};\nlet a = { foo: 42 };\nfor (let i in a) {\n console.log(a[i]);\n}' Suggests replacing the whole loop with a 'Object.keys()' method or adding a 'hasOwnProperty()' check. After applying the quick-fix the code looks as follows: 'for (let i in a) {\n if (a.hasOwnProperty(i)) {\n console.log(a[i]);\n }\n}' Inspection ID: JSUnfilteredForInLoop", + "markdown": "Reports unfiltered `for-in` loops. \n\nThe use of this construct results in processing not only own properties of an object but properties from its prototype as well. It may be unexpected in some specific cases, for example, in utility methods that copy or modify all properties or when `Object`'s prototype may be incorrectly modified. For example, the following code will print **42** and **myMethod** : \n\n\n Object.prototype.myMethod = function myMethod() {};\n let a = { foo: 42 };\n for (let i in a) {\n console.log(a[i]);\n }\n\nSuggests replacing the whole loop with a `Object.keys()` method or adding a `hasOwnProperty()` check. After applying the quick-fix the code looks as follows:\n\n\n for (let i in a) {\n if (a.hasOwnProperty(i)) {\n console.log(a[i]);\n }\n }\n\nInspection ID: JSUnfilteredForInLoop" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnfilteredForInLoop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSAnnotator", + "shortDescription": { + "text": "ECMAScript specification is not followed" + }, + "fullDescription": { + "text": "Reports basic syntax issues and inconsistencies with language specification, such as invalid usages of keywords, usages of incompatible numeric format, or multiple parameters to getters/setters. Generally, such errors must always be reported and shouldn't be disabled. But in some cases, such as issues due to the dynamic nature of JavaScript, the use of not yet supported language features, or bugs in IDE's checker, it may be handy to disable reporting these very basic errors. Inspection ID: JSAnnotator", + "markdown": "Reports basic syntax issues and inconsistencies with language specification, such as invalid usages of keywords, usages of incompatible numeric format, or multiple parameters to getters/setters. \nGenerally, such errors must always be reported and shouldn't be disabled. But in some cases, such as issues due to the dynamic nature of JavaScript, the use of not yet supported language features, or bugs in IDE's checker, it may be handy to disable reporting these very basic errors.\n\nInspection ID: JSAnnotator" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JSAnnotator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSIncompatibleTypesComparison", + "shortDescription": { + "text": "Comparison of expressions having incompatible types" + }, + "fullDescription": { + "text": "Reports a comparison with operands of incompatible types or an operand with a type without possible common values. Inspection ID: JSIncompatibleTypesComparison", + "markdown": "Reports a comparison with operands of incompatible types or an operand with a type without possible common values.\n\nInspection ID: JSIncompatibleTypesComparison" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSIncompatibleTypesComparison", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSLastCommaInObjectLiteral", + "shortDescription": { + "text": "Unneeded last comma in object literal" + }, + "fullDescription": { + "text": "Reports usages of a trailing comma in object literals. The warning is reported only when the JavaScript language version is set to ECMAScript 5.1. Trailing commas in object literals are allowed by the specification, however, some browsers might throw an error when a trailing comma is used. You can configure formatting options for trailing commas in Code Style | JavaScript or TypeScript | Punctuation. Inspection ID: JSLastCommaInObjectLiteral", + "markdown": "Reports usages of a trailing comma in object literals.\n\nThe warning is reported only when the JavaScript language version is set to ECMAScript 5.1.\n\nTrailing commas in object literals are allowed by the specification, however, some browsers might throw an error when a trailing comma is used.\n\nYou can configure formatting options for trailing commas in **Code Style** \\| **JavaScript** or **TypeScript** \\| **Punctuation**.\n\nInspection ID: JSLastCommaInObjectLiteral" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSLastCommaInObjectLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSFunctionExpressionToArrowFunction", + "shortDescription": { + "text": "Function expression is used instead of arrow function" + }, + "fullDescription": { + "text": "Reports a function expression. Suggests converting it to an arrow function. Example: 'arr.map(function(el) {return el + 1})' After applying the quick-fix the code looks as follows: 'arr.map(el => el + 1)' Inspection ID: JSFunctionExpressionToArrowFunction", + "markdown": "Reports a [function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function) expression. Suggests converting it to an [arrow function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions).\n\nExample:\n\n arr.map(function(el) {return el + 1})\n\nAfter applying the quick-fix the code looks as follows:\n\n arr.map(el => el + 1)\n\nInspection ID: JSFunctionExpressionToArrowFunction" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSFunctionExpressionToArrowFunction", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6TopLevelAwaitExpression", + "shortDescription": { + "text": "Top-level 'await' expression" + }, + "fullDescription": { + "text": "Reports a usage of a top-level 'await' expression. While the new 'top-level async' proposal is on its way, using 'await' outside async functions is not allowed. Inspection ID: ES6TopLevelAwaitExpression", + "markdown": "Reports a usage of a top-level `await` expression. While the new 'top-level async' proposal is on its way, using `await` outside async functions is not allowed.\n\nInspection ID: ES6TopLevelAwaitExpression" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ES6TopLevelAwaitExpression", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 67, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6MissingAwait", + "shortDescription": { + "text": "Missing await for an async function call" + }, + "fullDescription": { + "text": "Reports an 'async' function call without an expected 'await' prefix inside an 'async' function. Such call returns a 'Promise' and control flow is continued immediately. Example: 'async function bar() { /* ... */ }\nasync function foo() {\n bar(); // bad\n}' After the quick-fix is applied, the 'await' prefix is added: 'async function bar() { /* ... */ }\nasync function foo() {\n await bar(); // good\n}' When the 'Report for promises in return statements' checkbox is selected, also suggests adding 'await' in return statements. While this is generally not necessary, it gives two main benefits. You won't forget to add 'await' when surrounding your code with 'try-catch'. An explicit 'await' helps V8 runtime to provide async stack traces. Inspection ID: ES6MissingAwait", + "markdown": "Reports an `async` function call without an expected `await` prefix inside an `async` function. Such call returns a `Promise` and control flow is continued immediately.\n\nExample:\n\n\n async function bar() { /* ... */ }\n async function foo() {\n bar(); // bad\n }\n\n\nAfter the quick-fix is applied, the `await` prefix is added:\n\n\n async function bar() { /* ... */ }\n async function foo() {\n await bar(); // good\n }\n\nWhen the 'Report for promises in return statements' checkbox is selected, also suggests adding `await` in return statements. \nWhile this is generally not necessary, it gives two main benefits. \n\n* You won't forget to add `await` when surrounding your code with `try-catch`.\n* An explicit `await` helps V8 runtime to provide [async stack traces](https://bit.ly/v8-zero-cost-async-stack-traces).\n\nInspection ID: ES6MissingAwait" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6MissingAwait", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 67, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TailRecursionJS", + "shortDescription": { + "text": "Tail recursion" + }, + "fullDescription": { + "text": "Reports a tail recursion, that is, when a function calls itself as its last action before returning. A tail recursion can always be replaced by looping, which will be considerably faster. Some JavaScript engines perform this optimization, while others do not. Thus, tail recursive solutions may have considerably different performance characteristics in different environments. Inspection ID: TailRecursionJS", + "markdown": "Reports a tail recursion, that is, when a function calls itself as its last action before returning. A tail recursion can always be replaced by looping, which will be considerably faster. Some JavaScript engines perform this optimization, while others do not. Thus, tail recursive solutions may have considerably different performance characteristics in different environments.\n\nInspection ID: TailRecursionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TailRecursionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Control flow issues", + "index": 2, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6ConvertToForOf", + "shortDescription": { + "text": "'for..in' is used instead of 'for..of'" + }, + "fullDescription": { + "text": "Reports a usage of a 'for..in' loop on an array. Suggests replacing it with a 'for..of' loop. 'for..of' loops, which are introduced in ECMAScript 6, iterate over 'iterable' objects. For arrays, this structure is preferable to 'for..in', because it works only with array values but not with array object's properties. Inspection ID: ES6ConvertToForOf", + "markdown": "Reports a usage of a [for..in](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) loop on an array. Suggests replacing it with a [for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop. \n`for..of` loops, which are introduced in ECMAScript 6, iterate over `iterable` objects. For arrays, this structure is preferable to `for..in`, because it works only with array values but not with array object's properties.\n\nInspection ID: ES6ConvertToForOf" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6ConvertToForOf", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/ES2015 migration aids", + "index": 25, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterNamingConventionJS", + "shortDescription": { + "text": "Function parameter naming convention" + }, + "fullDescription": { + "text": "Reports a function parameter whose name is too short, too long, or doesn't follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names. Use the standard 'java.util.regex' format regular expressions. Inspection ID: ParameterNamingConventionJS", + "markdown": "Reports a function parameter whose name is too short, too long, or doesn't follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression\nexpected for local variables names. Use the standard `java.util.regex` format regular expressions.\n\nInspection ID: ParameterNamingConventionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ParameterNamingConventionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 64, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUndefinedPropertyAssignment", + "shortDescription": { + "text": "Undefined property assignment" + }, + "fullDescription": { + "text": "Reports an assignment to a property that is not defined in the type of a variable. Example: '/**\n * @type {{ property1: string, property2: number }}\n */\nlet myVariable = create();\n\nmyVariable.newProperty = 3; // bad' Inspection ID: JSUndefinedPropertyAssignment", + "markdown": "Reports an assignment to a property that is not defined in the type of a variable.\n\nExample:\n\n\n /**\n * @type {{ property1: string, property2: number }}\n */\n let myVariable = create();\n\n myVariable.newProperty = 3; // bad\n\nInspection ID: JSUndefinedPropertyAssignment" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSUndefinedPropertyAssignment", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 13, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StandardJS", + "shortDescription": { + "text": "Standard code style" + }, + "fullDescription": { + "text": "Reports a discrepancy detected by the JavaScript Standard Style linter. The highlighting severity in the editor is based on the severity level the linter reports. Inspection ID: StandardJS", + "markdown": "Reports a discrepancy detected by the [JavaScript Standard Style](https://standardjs.com/) linter. \n\nThe highlighting severity in the editor is based on the severity level the linter reports.\n\nInspection ID: StandardJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "StandardJS", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code quality tools", + "index": 68, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParametersPerFunctionJS", + "shortDescription": { + "text": "Function with too many parameters" + }, + "fullDescription": { + "text": "Reports a function with too many parameters. Such functions often indicate problems with design. Use the field below to specify the maximum acceptable number of parameters for a function. Inspection ID: ParametersPerFunctionJS", + "markdown": "Reports a function with too many parameters. Such functions often indicate problems with design.\n\n\nUse the field below to specify the maximum acceptable number of parameters for a function.\n\nInspection ID: ParametersPerFunctionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexFunctionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 42, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThisExpressionReferencesGlobalObjectJS", + "shortDescription": { + "text": "'this' expression which references the global object" + }, + "fullDescription": { + "text": "Reports a 'this' expression outside an object literal or a constructor body. Such 'this' expressions reference the top-level \"global\" JavaScript object, but are mostly useless. Inspection ID: ThisExpressionReferencesGlobalObjectJS", + "markdown": "Reports a `this` expression outside an object literal or a constructor body. Such `this` expressions reference the top-level \"global\" JavaScript object, but are mostly useless.\n\nInspection ID: ThisExpressionReferencesGlobalObjectJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ThisExpressionReferencesGlobalObjectJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Validity issues", + "index": 34, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedAssignmentJS", + "shortDescription": { + "text": "Nested assignment" + }, + "fullDescription": { + "text": "Reports an assignment expression nested inside another expression, for example, 'a = b = 1'. Such expressions may be confusing and violate the general design principle that a given construct should do precisely one thing. Inspection ID: NestedAssignmentJS", + "markdown": "Reports an assignment expression nested inside another expression, for example, `a = b = 1`. Such expressions may be confusing and violate the general design principle that a given construct should do precisely one thing.\n\nInspection ID: NestedAssignmentJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NestedAssignmentJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Assignment issues", + "index": 47, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DefaultNotLastCaseInSwitchJS", + "shortDescription": { + "text": "'default' not last case in 'switch'" + }, + "fullDescription": { + "text": "Reports a 'switch' statement where the 'default' case comes before another case instead of being the very last case, which may cause confusion. Inspection ID: DefaultNotLastCaseInSwitchJS", + "markdown": "Reports a `switch` statement where the `default` case comes before another case instead of being the very last case, which may cause confusion.\n\nInspection ID: DefaultNotLastCaseInSwitchJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "DefaultNotLastCaseInSwitchJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 65, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingPlusesOrMinusesJS", + "shortDescription": { + "text": "Confusing sequence of '+' or '-'" + }, + "fullDescription": { + "text": "Reports a suspicious combination of '+' or '-' characters in JavaScript code (for example, 'a+++b'. Such sequences are confusing, and their semantics may change through changes in the whitespace. Inspection ID: ConfusingPlusesOrMinusesJS", + "markdown": "Reports a suspicious combination of `+` or `-` characters in JavaScript code (for example, `a+++b`. Such sequences are confusing, and their semantics may change through changes in the whitespace.\n\nInspection ID: ConfusingPlusesOrMinusesJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ConfusingPlusesOrMinusesJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSDeprecatedSymbols", + "shortDescription": { + "text": "Deprecated symbol used" + }, + "fullDescription": { + "text": "Reports a usage of a deprecated function variable. Inspection ID: JSDeprecatedSymbols", + "markdown": "Reports a usage of a deprecated function variable.\n\nInspection ID: JSDeprecatedSymbols" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSDeprecatedSymbols", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableNamingConventionJS", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports a local variable whose name is too short, too long, or doesn't follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length, and a regular expression expected for local variables names. Use the standard 'java.util.regex' format regular expressions. Inspection ID: LocalVariableNamingConventionJS", + "markdown": "Reports a local variable whose name is too short, too long, or doesn't follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length, and a regular expression\nexpected for local variables names. Use the standard `java.util.regex` format regular expressions.\n\nInspection ID: LocalVariableNamingConventionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LocalVariableNamingConventionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Naming conventions", + "index": 64, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyFinallyBlockJS", + "shortDescription": { + "text": "Empty 'finally' block" + }, + "fullDescription": { + "text": "Reports an empty 'finally' block, which usually indicates an error. Inspection ID: EmptyFinallyBlockJS", + "markdown": "Reports an empty `finally` block, which usually indicates an error.\n\nInspection ID: EmptyFinallyBlockJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyFinallyBlockJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Try statement issues", + "index": 41, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSCommentMatchesSignature", + "shortDescription": { + "text": "Mismatched JSDoc and function signature" + }, + "fullDescription": { + "text": "Reports mismatch between the names and the number of parameters within a JSDoc comment and the actual parameters of a function. Suggests updating parameters in JSDoc comment. Example: '/**\n * @param height Height in pixels\n */\nfunction sq(height, width) {} // width is not documented' After the quick-fix is applied: '/**\n * @param height Height in pixels\n * @param width\n */\nfunction sq(height, width) {}' Inspection ID: JSCommentMatchesSignature", + "markdown": "Reports mismatch between the names and the number of parameters within a JSDoc comment and the actual parameters of a function. Suggests updating parameters in JSDoc comment.\n\n**Example:**\n\n\n /**\n * @param height Height in pixels\n */\n function sq(height, width) {} // width is not documented\n\nAfter the quick-fix is applied:\n\n\n /**\n * @param height Height in pixels\n * @param width\n */\n function sq(height, width) {}\n\nInspection ID: JSCommentMatchesSignature" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSCommentMatchesSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UpdateDependencyToLatestVersion", + "shortDescription": { + "text": "Update package.json dependencies to latest versions" + }, + "fullDescription": { + "text": "Suggests to upgrade your package.json dependencies to the latest versions, ignoring specified versions. Inspection ID: UpdateDependencyToLatestVersion", + "markdown": "Suggests to upgrade your package.json dependencies to the latest versions, ignoring specified versions.\n\nInspection ID: UpdateDependencyToLatestVersion" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "UpdateDependencyToLatestVersion", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 60, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptConfig", + "shortDescription": { + "text": "Inconsistent tsconfig.json properties" + }, + "fullDescription": { + "text": "Reports inconsistency of a 'paths', 'checkJs', or 'extends' property in a tsconfig.json file. The 'checkJs' property requires 'allowJs'. The 'extends' property should be a valid file reference. Inspection ID: TypeScriptConfig", + "markdown": "Reports inconsistency of a `paths`, `checkJs`, or `extends` property in a tsconfig.json file. \nThe `checkJs` property requires `allowJs`. \nThe `extends` property should be a valid file reference.\n\nInspection ID: TypeScriptConfig" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TypeScriptConfig", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSSuspiciousNameCombination", + "shortDescription": { + "text": "Suspicious variable/parameter name combination" + }, + "fullDescription": { + "text": "Reports an assignment or a function call where the name of the target variable or the function parameter does not match the name of the value assigned to it. Example: 'var x = 0;\n var y = x;' or 'var x = 0, y = 0;\n var rc = new Rectangle(y, x, 20, 20);' Here the inspection guesses that 'x' and 'y' are mixed up. Specify the names that should not be used together. An error is reported if a parameter name or an assignment target name contains words from one group while the name of the assigned or passed variable contains words from another group. Inspection ID: JSSuspiciousNameCombination", + "markdown": "Reports an assignment or a function call where the name of the target variable or the function parameter does not match the name of the value assigned to it.\n\nExample:\n\n\n var x = 0;\n var y = x;\n\nor\n\n\n var x = 0, y = 0;\n var rc = new Rectangle(y, x, 20, 20);\n\nHere the inspection guesses that `x` and `y` are mixed up.\n\nSpecify the names that should not be used together. An error is reported\nif a parameter name or an assignment target name contains words from one group while the name of the assigned or passed\nvariable contains words from another group.\n\nInspection ID: JSSuspiciousNameCombination" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSSuspiciousNameCombination", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSUnresolvedExtXType", + "shortDescription": { + "text": "Unresolved Ext JS xtype" + }, + "fullDescription": { + "text": "Reports an Ext JS 'xtype' reference that doesn't have a corresponding class. Inspection ID: JSUnresolvedExtXType", + "markdown": "Reports an Ext JS `xtype` reference that doesn't have a corresponding class.\n\nInspection ID: JSUnresolvedExtXType" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JSUnresolvedExtXType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForLoopThatDoesntUseLoopVariableJS", + "shortDescription": { + "text": "'for' loop where update or condition does not use loop variable" + }, + "fullDescription": { + "text": "Reports a 'for' loop where the condition or update does not use the 'for' loop variable. Inspection ID: ForLoopThatDoesntUseLoopVariableJS", + "markdown": "Reports a `for` loop where the condition or update does not use the `for` loop variable.\n\nInspection ID: ForLoopThatDoesntUseLoopVariableJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ForLoopThatDoesntUseLoopVariableJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Probable bugs", + "index": 17, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeScriptAbstractClassConstructorCanBeMadeProtected", + "shortDescription": { + "text": "Abstract class constructor can be made protected" + }, + "fullDescription": { + "text": "Reports a public constructor of an abstract class and suggests making it protected (because it is useless to have it public). Inspection ID: TypeScriptAbstractClassConstructorCanBeMadeProtected", + "markdown": "Reports a public constructor of an abstract class and suggests making it protected (because it is useless to have it public).\n\nInspection ID: TypeScriptAbstractClassConstructorCanBeMadeProtected" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "TypeScriptAbstractClassConstructorCanBeMadeProtected", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/TypeScript", + "index": 30, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithMultipleReturnPointsJS", + "shortDescription": { + "text": "Function with multiple return points" + }, + "fullDescription": { + "text": "Reports a function with multiple return points. Such functions are hard to understand and maintain. Inspection ID: FunctionWithMultipleReturnPointsJS", + "markdown": "Reports a function with multiple return points. Such functions are hard to understand and maintain.\n\nInspection ID: FunctionWithMultipleReturnPointsJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithMultipleReturnPointsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 42, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSIgnoredPromiseFromCall", + "shortDescription": { + "text": "Result of method call returning a promise is ignored" + }, + "fullDescription": { + "text": "Reports a function call that returns a 'Promise' that is not used later. Such calls are usually unintended and indicate an error. Inspection ID: JSIgnoredPromiseFromCall", + "markdown": "Reports a function call that returns a `Promise` that is not used later. Such calls are usually unintended and indicate an error.\n\nInspection ID: JSIgnoredPromiseFromCall" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSIgnoredPromiseFromCall", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Async code and promises", + "index": 67, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreeNegationsPerFunctionJS", + "shortDescription": { + "text": "Function with more than three negations" + }, + "fullDescription": { + "text": "Reports a function with three or more negation operations ('!' or '!='). Such functions may be unnecessarily confusing. Inspection ID: ThreeNegationsPerFunctionJS", + "markdown": "Reports a function with three or more negation operations (`!` or `!=`). Such functions may be unnecessarily confusing.\n\nInspection ID: ThreeNegationsPerFunctionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "FunctionWithMoreThanThreeNegationsJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Function metrics", + "index": 42, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSRemoveUnnecessaryParentheses", + "shortDescription": { + "text": "Unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports redundant parentheses. In expressions: 'var x = ((1) + 2) + 3' In arrow function argument lists: 'var incrementer = (x) => x + 1' In TypeScript and Flow type declarations: 'type Card = (Suit & Rank) | (Suit & Number)' Inspection ID: JSRemoveUnnecessaryParentheses", + "markdown": "Reports redundant parentheses.\n\nIn expressions:\n\n var x = ((1) + 2) + 3\n\nIn arrow function argument lists:\n\n var incrementer = (x) => x + 1\n\nIn TypeScript and Flow type declarations:\n\n type Card = (Suit & Rank) | (Suit & Number)\n\nInspection ID: JSRemoveUnnecessaryParentheses" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JSRemoveUnnecessaryParentheses", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Code style issues", + "index": 13, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexBooleanExpressionJS", + "shortDescription": { + "text": "Overly complex boolean expression" + }, + "fullDescription": { + "text": "Reports a boolean expression with too many terms. Such expressions may be confusing and bug-prone. Use the field below to specify the maximum number of terms allowed in an arithmetic expression. Inspection ID: OverlyComplexBooleanExpressionJS", + "markdown": "Reports a boolean expression with too many terms. Such expressions may be confusing and bug-prone.\n\n\nUse the field below to specify the maximum number of terms allowed in an arithmetic expression.\n\nInspection ID: OverlyComplexBooleanExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexBooleanExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexArithmeticExpressionJS", + "shortDescription": { + "text": "Overly complex arithmetic expression" + }, + "fullDescription": { + "text": "Reports an arithmetic expression with too many terms. Such expressions may be confusing and bug-prone. Use the field below to specify the maximum number of terms allowed in an arithmetic expression. Inspection ID: OverlyComplexArithmeticExpressionJS", + "markdown": "Reports an arithmetic expression with too many terms. Such expressions may be confusing and bug-prone.\n\n\nUse the field below to specify the maximum number of terms allowed in an arithmetic expression.\n\nInspection ID: OverlyComplexArithmeticExpressionJS" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "OverlyComplexArithmeticExpressionJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Potentially confusing code constructs", + "index": 36, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ES6RedundantNestingInTemplateLiteral", + "shortDescription": { + "text": "Redundant nesting in template literal" + }, + "fullDescription": { + "text": "Reports nested instances of a string or a template literal. Suggests inlining the nested instances into the containing template string. Example: 'let a = `Hello, ${`Brave ${\"New\"}`} ${\"World\"}!`' After applying the quick-fix the code looks as follows: 'let a = `Hello, Brave New World!`' Inspection ID: ES6RedundantNestingInTemplateLiteral", + "markdown": "Reports nested instances of a string or a template literal. Suggests inlining the nested instances into the containing template string.\n\nExample:\n\n\n let a = `Hello, ${`Brave ${\"New\"}`} ${\"World\"}!`\n\nAfter applying the quick-fix the code looks as follows:\n\n\n let a = `Hello, Brave New World!`\n\nInspection ID: ES6RedundantNestingInTemplateLiteral" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "ES6RedundantNestingInTemplateLiteral", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringLiteralBreaksHTMLJS", + "shortDescription": { + "text": "String literal which breaks HTML parsing" + }, + "fullDescription": { + "text": "Reports a string literal that contains a '= 5.0.0) gem to be present in the Gemfile or gemspec. See the Brakeman website for more information. Inspection ID: Brakeman", + "markdown": "Reports issues from the [Brakeman](https://github.com/presidentbeef/brakeman) scanner. Requires the `brakeman` (\\>= 5.0.0) gem to be present in the Gemfile or gemspec.\n\nSee the [Brakeman website](https://brakemanscanner.org/) for more information.\n\nInspection ID: Brakeman" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Brakeman", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Gems and gem management", + "index": 22, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyClassVariableNamingConvention", + "shortDescription": { + "text": "Unconventional class variable name" + }, + "fullDescription": { + "text": "Reports class variables with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating class variable names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyClassVariableNamingConvention", + "markdown": "Reports class variables with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating class variable names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyClassVariableNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyClassVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbenvGemsetsConfig", + "shortDescription": { + "text": "Missing Rbenv gemset" + }, + "fullDescription": { + "text": "Reports gemsets in '.rbenv-gemsets' that can't be found in the project interpreter, and local gemsets that can't be found in the project root. Provides quick fixes to create the missing gemsets. Inspection ID: RbenvGemsetsConfig", + "markdown": "Reports gemsets in '.rbenv-gemsets' that can't be found in the project interpreter, and local gemsets that can't be found in the project root. Provides quick fixes to create the missing gemsets.\n\nInspection ID: RbenvGemsetsConfig" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RbenvGemsetsConfig", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Gems and gem management", + "index": 22, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RailsChecklist05", + "shortDescription": { + "text": "'find' or 'find_by' method call in view" + }, + "fullDescription": { + "text": "Reports usages of 'find' or 'find_by' in a view or view helper. Database interaction should be performed by the controller and stored in variables for the view to access. Inspired by 'Ruby on Rails Code Quality Checklist' Inspection ID: RailsChecklist05", + "markdown": "Reports usages of `find` or `find_by` in a view or view helper. Database interaction should be performed by the controller and stored in variables for the view to access.\n\nInspired by ['Ruby on Rails Code Quality Checklist'](https://matthewpaulmoore.com/post/5190436725/ruby-on-rails-code-quality-checklist)\n\nInspection ID: RailsChecklist05" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RailsChecklist05", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Rails", + "index": 29, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyDeprecatedSyntaxInspection", + "shortDescription": { + "text": "Deprecated syntax" + }, + "fullDescription": { + "text": "Reports the use of the syntax deprecated from Ruby 1.9. For example, ':' instead of 'then' for one-line 'if', 'when', 'unless'. Example: 'condition = true\nif condition: 1 else 0 # -> if condition then 1 else 0\nunless condition: 0 else 1 # -> unless condition then 0 else 1\n\nvalue = 1\ncase value\nwhen 1: true # -> when 1 then true\nend'\n Inspection ID: RubyDeprecatedSyntaxInspection", + "markdown": "Reports the use of the syntax deprecated from Ruby 1.9. For example, `:` instead of `then` for one-line `if`, `when`, `unless`.\n\nExample:\n\n condition = true\n if condition: 1 else 0 # -> if condition then 1 else 0\n unless condition: 0 else 1 # -> unless condition then 0 else 1\n\n value = 1\n case value\n when 1: true # -> when 1 then true\n end\n\nInspection ID: RubyDeprecatedSyntaxInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyDeprecatedSyntaxInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Language level migration aids", + "index": 31, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsBadTypeArgumentType", + "shortDescription": { + "text": "Bad type argument type" + }, + "fullDescription": { + "text": "Reports type arguments passed to generic types which do not subtype the expected upper bound. Type arguments must be a subtype of any specified upper bound. Example: 'class Example[A < Numeric]\nend\n\n# 'String' is not a subtype of 'Numeric'\ntype example = Example[String]' Inspection ID: RbsBadTypeArgumentType", + "markdown": "Reports type arguments passed to generic types which do not subtype the expected upper bound. Type arguments must be a subtype of any specified upper bound.\n\nExample:\n\n class Example[A < Numeric]\n end\n\n # 'String' is not a subtype of 'Numeric'\n type example = Example[String]\n\nInspection ID: RbsBadTypeArgumentType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsBadTypeArgumentType", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnconventionalTypeAliasName", + "shortDescription": { + "text": "Unconventional type alias name" + }, + "fullDescription": { + "text": "Reports type aliases with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating type alias names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RbsUnconventionalTypeAliasName", + "markdown": "Reports type aliases with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating type alias names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RbsUnconventionalTypeAliasName" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsUnconventionalTypeAliasName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Naming conventions", + "index": 39, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsMissingTypeSignature", + "shortDescription": { + "text": "Missing type signature" + }, + "fullDescription": { + "text": "Reports missing type signatures for classes, modules, constants, global/instance/class variables, methods, and aliases. Example: '# Missing type signature for 'Example'\nclass Example\nend' Inspection ID: RbsMissingTypeSignature", + "markdown": "Reports missing type signatures for classes, modules, constants, global/instance/class variables, methods, and aliases.\n\nExample:\n\n # Missing type signature for 'Example'\n class Example\n end\n\nInspection ID: RbsMissingTypeSignature" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsMissingTypeSignature", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/RBS", + "index": 40, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnconventionalInterfaceName", + "shortDescription": { + "text": "Unconventional interface name" + }, + "fullDescription": { + "text": "Reports interfaces with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating interface names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RbsUnconventionalInterfaceName", + "markdown": "Reports interfaces with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating interface names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RbsUnconventionalInterfaceName" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsUnconventionalInterfaceName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Naming conventions", + "index": 39, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyMismatchedParameterType", + "shortDescription": { + "text": "Mismatched parameter type" + }, + "fullDescription": { + "text": "Reports default method and block parameter assignments whose inferred types don't match the parameter's expected type. The expected parameter type is taken from the RBS type signature. Inspection ID: RubyMismatchedParameterType", + "markdown": "Reports default method and block parameter assignments whose inferred types don't match the parameter's expected type. The expected parameter type is taken from the RBS type signature.\n\nInspection ID: RubyMismatchedParameterType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyMismatchedParameterType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubySuperCallWithoutSuperclassInspection", + "shortDescription": { + "text": "'super' call with no superclass defined" + }, + "fullDescription": { + "text": "Reports 'super' calls outside of methods or in classes that have no superclass defined. These calls are redundant and can safely be removed. Inspection ID: RubySuperCallWithoutSuperclassInspection", + "markdown": "Reports `super` calls outside of methods or in classes that have no superclass defined. These calls are redundant and can safely be removed.\n\nInspection ID: RubySuperCallWithoutSuperclassInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubySuperCallWithoutSuperclassInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberDuplicatedStep", + "shortDescription": { + "text": "Duplicated step definitions" + }, + "fullDescription": { + "text": "Reports duplicated Cucumber step definitions. Inspection ID: CucumberDuplicatedStep", + "markdown": "Reports duplicated Cucumber step definitions.\n\nInspection ID: CucumberDuplicatedStep" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "CucumberDuplicatedStep", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Cucumber", + "index": 48, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RailsParamDefResolve", + "shortDescription": { + "text": "Unexpected argument in method call" + }, + "fullDescription": { + "text": "Reports unexpected parameter values in method calls. Some method calls expect specific symbols, strings, or other constants as arguments. For example, 'Object#send' expects a symbol representing a method name as the first argument. If something else is passed as the first argument, a warning arises. Inspection ID: RailsParamDefResolve", + "markdown": "Reports unexpected parameter values in method calls. Some method calls expect specific symbols, strings, or other constants as arguments. For example, `Object#send` expects a symbol representing a method name as the first argument. If something else is passed as the first argument, a warning arises.\n\nInspection ID: RailsParamDefResolve" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RailsParamDefResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnusedUseClause", + "shortDescription": { + "text": "Unused use clause" + }, + "fullDescription": { + "text": "Reports use clauses that are unused or unnecessary within the file. A quick fix is available to remove the unused or unnecessary use clause. Example: '# Unused use clause\nuse Object as Example' Inspection ID: RbsUnusedUseClause", + "markdown": "Reports use clauses that are unused or unnecessary within the file.\n\nA quick fix is available to remove the unused or unnecessary use clause.\n\nExample:\n\n # Unused use clause\n use Object as Example\n\nInspection ID: RbsUnusedUseClause" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RbsUnusedUseClause", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Data flow", + "index": 52, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyInstanceVariableNamingConvention", + "shortDescription": { + "text": "Unconventional instance variable name" + }, + "fullDescription": { + "text": "Reports instance variables with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating instance variable names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyInstanceVariableNamingConvention", + "markdown": "Reports instance variables with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating instance variable names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyInstanceVariableNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyInstanceVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingYardReturnTag", + "shortDescription": { + "text": "Missing '@return' tag in method" + }, + "fullDescription": { + "text": "Reports methods that are not annotated with a '@return' tag. A quick-fix is available to add the missing '@return' tag. Inspection ID: MissingYardReturnTag", + "markdown": "Reports methods that are not annotated with a `@return` tag. A quick-fix is available to add the missing `@return` tag.\n\nInspection ID: MissingYardReturnTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MissingYardReturnTag", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/YARD", + "index": 53, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsLiteralClassReferenced", + "shortDescription": { + "text": "Literal class referenced" + }, + "fullDescription": { + "text": "Reports references to the classes 'NilClass', 'TrueClass', and 'FalseClass' in type signatures. Usage of these classes is unnecessarily verbose. A quick fix is available to replace the 'NilClass', 'TrueClass', or 'FalseClass' usage with its respective literal. Example: '# 'NilClass' referenced instead of 'nil', ...\ntype example = NilClass | TrueClass | FalseClass' After the quick fix: 'type example = nil | true | false' Inspection ID: RbsLiteralClassReferenced", + "markdown": "Reports references to the classes `NilClass`, `TrueClass`, and `FalseClass` in type signatures. Usage of these classes is unnecessarily verbose.\n\nA quick fix is available to replace the `NilClass`, `TrueClass`, or `FalseClass` usage with its\nrespective literal.\n\nExample:\n\n # 'NilClass' referenced instead of 'nil', ...\n type example = NilClass | TrueClass | FalseClass\n\nAfter the quick fix:\n\n type example = nil | true | false\n\nInspection ID: RbsLiteralClassReferenced" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsLiteralClassReferenced", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Code style issues", + "index": 56, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnconventionalUseAliasName", + "shortDescription": { + "text": "Unconventional use alias name" + }, + "fullDescription": { + "text": "Reports use aliases with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating type alias names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RbsUnconventionalUseAliasName", + "markdown": "Reports use aliases with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating type alias names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RbsUnconventionalUseAliasName" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsUnconventionalUseAliasName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Naming conventions", + "index": 39, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyHashKeysTypesInspection", + "shortDescription": { + "text": "Incorrect 'Hash[...]' call" + }, + "fullDescription": { + "text": "Reports improperly constructed 'Hash[...]' calls. There are 3 correct ways to construct a new hash using '[...]': 'Hash['a', 100, 'b', 200]' 'Hash[ [ ['a', 100], ['b', 200] ] ]' 'Hash['a' => 100, 'b' => 200]' Inspired by 'Ruby Style Guide' Inspection ID: RubyHashKeysTypesInspection", + "markdown": "Reports improperly constructed `Hash[...]` calls. There are 3 correct ways to construct a new hash using `[...]`:\n\n* `Hash['a', 100, 'b', 200]`\n* `Hash[ [ ['a', 100], ['b', 200] ] ]`\n* `Hash['a' => 100, 'b' => 200]`\n\nInspired by ['Ruby Style Guide'](https://github.com/bbatsov/ruby-style-guide)\n\nInspection ID: RubyHashKeysTypesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyHashKeysTypesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InvalidCallToProtectedPrivateMethod", + "shortDescription": { + "text": "Invalid call to protected/private method" + }, + "fullDescription": { + "text": "Reports invalid calls to protected/private methods. You can call a protected method using an implicit or explicit receiver of the correct type. You can call a private method only with an implicit receiver (except for 'self' setter methods, for example, 'self.foo='). You can call both protected and private methods only from the context of a method handler. Inspection ID: InvalidCallToProtectedPrivateMethod", + "markdown": "Reports invalid calls to protected/private methods.\n\nYou can call a protected method using an implicit or explicit receiver of the correct type.\n\nYou can call a private method only with an implicit receiver (except for `self` setter methods, for example, `self.foo=`).\n\nYou can call both protected and private methods only from the context of a method handler.\n\nInspection ID: InvalidCallToProtectedPrivateMethod" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "InvalidCallToProtectedPrivateMethod", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyUnlessWithElseInspection", + "shortDescription": { + "text": "'unless' statement with 'else'" + }, + "fullDescription": { + "text": "Reports 'unless' statements used with 'else'. It is preferable to put the positive branch first. Example: '# Bad practice\na = 1\nunless a > 2\n puts 'a is 2 or less'\nelse\n puts 'a is greater than 2'\nend'\n A quick-fix is available to convert an 'unless' into 'if'. After the quick-fix is applied, the result looks like this: '# Good practice\na = 1\nif a > 2\n puts 'a is greater than 2'\nelse\n puts 'a is 2 or less'\nend'\n Inspired by 'Ruby Style Guide' Inspection ID: RubyUnlessWithElseInspection", + "markdown": "Reports `unless` statements used with `else`. It is preferable to put the positive branch first.\n\nExample:\n\n # Bad practice\n a = 1\n unless a > 2\n puts 'a is 2 or less'\n else\n puts 'a is greater than 2'\n end\n\nA quick-fix is available to convert an `unless` into `if`. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n a = 1\n if a > 2\n puts 'a is greater than 2'\n else\n puts 'a is 2 or less'\n end\n\nInspired by ['Ruby Style Guide'](https://github.com/rubocop-hq/ruby-style-guide#no-else-with-unless)\n\nInspection ID: RubyUnlessWithElseInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyUnlessWithElseInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyTooManyInstanceVariablesInspection", + "shortDescription": { + "text": "Class/module with too many instance variables" + }, + "fullDescription": { + "text": "Reports classes/modules with too many instance variables. This usually means they are trying to 'do too much', and may need to be refactored into multiple smaller components. Use the Number of instance variables field to specify the maximum number of instance variables a class/module is allowed to have. Inspired by 'Reek Code Smells' Inspection ID: RubyTooManyInstanceVariablesInspection", + "markdown": "Reports classes/modules with too many instance variables. This usually means they are trying to 'do too much', and may need to be refactored into multiple smaller components.\n\nUse the *Number of instance variables* field to specify the maximum number of instance variables a class/module is allowed to have.\n\nInspired by ['Reek Code Smells'](https://github.com/troessner/reek/blob/master/docs/Too-Many-Instance-Variables.md)\n\nInspection ID: RubyTooManyInstanceVariablesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyTooManyInstanceVariablesInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code metrics", + "index": 58, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyForLoopInspection", + "shortDescription": { + "text": "Unconventional 'for' loop" + }, + "fullDescription": { + "text": "Reports usages of 'for' loops. It is preferable to use '.each' over 'for' loops. Example: '# Bad practice\nfor i in 0..5\n puts \"Value is #{i}\"\nend'\n A quick-fix is available to convert a 'for' loop into an '.each' loop. After the quick-fix is applied, the result looks like this: '# Good practice\n(0..5).each do |i|\n puts \"Value is #{i}\"\nend'\n Inspired by 'Roodi' Inspection ID: RubyForLoopInspection", + "markdown": "Reports usages of `for` loops. It is preferable to use `.each` over `for` loops.\n\nExample:\n\n # Bad practice\n for i in 0..5\n puts \"Value is #{i}\"\n end\n\nA quick-fix is available to convert a `for` loop into an `.each` loop. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n (0..5).each do |i|\n puts \"Value is #{i}\"\n end\n\nInspired by ['Roodi'](https://github.com/martinjandrews/roodi)\n\nInspection ID: RubyForLoopInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RubyForLoopInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyUnnecessarySemicolon", + "shortDescription": { + "text": "Redundant semicolon" + }, + "fullDescription": { + "text": "Reports redundant semicolons in the code. Semicolons are unnecessary in Ruby, excepting the case of joining multi-line statements into a single line. Inspection ID: RubyUnnecessarySemicolon", + "markdown": "Reports redundant semicolons in the code. Semicolons are unnecessary in Ruby, excepting the case of joining multi-line statements into a single line.\n\nInspection ID: RubyUnnecessarySemicolon" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyUnnecessarySemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Redundant code", + "index": 59, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubySimplifyBooleanInspection", + "shortDescription": { + "text": "Expression can be simplified" + }, + "fullDescription": { + "text": "Reports boolean expressions that can be simplified. Inspection ID: RubySimplifyBooleanInspection", + "markdown": "Reports boolean expressions that can be simplified.\n\nInspection ID: RubySimplifyBooleanInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubySimplifyBooleanInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Redundant code", + "index": 59, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyInstanceVariableToStringInspection", + "shortDescription": { + "text": "Interpolated variable without braces" + }, + "fullDescription": { + "text": "Reports interpolated variables (instance or global) without braces in expression substitutions. Example: '# Bad practice\n@name = 'John Doe'\nputs \"Hi #@name\"'\n A quick-fix is available to insert the missing braces. After the quick-fix is applied, the result looks like this: '# Good practice\n@name = 'John Doe'\nputs \"Hi #{@name}\"'\n Inspection ID: RubyInstanceVariableToStringInspection", + "markdown": "Reports interpolated variables (instance or global) without braces in expression substitutions.\n\nExample:\n\n # Bad practice\n @name = 'John Doe'\n puts \"Hi #@name\"\n\nA quick-fix is available to insert the missing braces. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n @name = 'John Doe'\n puts \"Hi #{@name}\"\n\nInspection ID: RubyInstanceVariableToStringInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyInstanceVariableToStringInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyClassMethodNamingConvention", + "shortDescription": { + "text": "Unconventional class method name" + }, + "fullDescription": { + "text": "Reports class methods with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating class method names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyClassMethodNamingConvention", + "markdown": "Reports class methods with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating class method names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyClassMethodNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyClassMethodNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyDeadCode", + "shortDescription": { + "text": "Unreachable code" + }, + "fullDescription": { + "text": "Reports unreachable code that will never be executed in any control flow and can be safely removed. Example: 'def largest_number(x, y)\n if x > y\n return x\n else\n return y\n end\n puts 'The largest number is ' + x #unreachable code\nend'\n Inspection ID: RubyDeadCode", + "markdown": "Reports unreachable code that will never be executed in any control flow and can be safely removed.\n\nExample:\n\n def largest_number(x, y)\n if x > y\n return x\n else\n return y\n end\n puts 'The largest number is ' + x #unreachable code\n end\n\nInspection ID: RubyDeadCode" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyDeadCode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Data flow", + "index": 62, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyInstanceMethodNamingConvention", + "shortDescription": { + "text": "Unconventional instance method name" + }, + "fullDescription": { + "text": "Reports instance methods with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating instance method names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyInstanceMethodNamingConvention", + "markdown": "Reports instance methods with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating instance method names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyInstanceMethodNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyInstanceMethodNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyUnnecessaryReturnStatement", + "shortDescription": { + "text": "Redundant 'return' statement" + }, + "fullDescription": { + "text": "Reports redundant 'return' keywords and statements. A 'return' keyword is not necessary for the last value in methods and control flow statements. Since Ruby 1.8, 'return' statements inside assignment methods are redundant because the return value is always equal to the parameter value. Inspection ID: RubyUnnecessaryReturnStatement", + "markdown": "Reports redundant `return` keywords and statements. A `return` keyword is not necessary for the last value in methods and control flow statements.\n\nSince Ruby 1.8, `return` statements inside assignment methods are redundant because the return value is always equal to the\nparameter value.\n\nInspection ID: RubyUnnecessaryReturnStatement" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyUnnecessaryReturnStatement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Redundant code", + "index": 59, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyGlobalVariableNamingConvention", + "shortDescription": { + "text": "Unconventional global variable name" + }, + "fullDescription": { + "text": "Reports global variables with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating global variable names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyGlobalVariableNamingConvention", + "markdown": "Reports global variables with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating global variable names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyGlobalVariableNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyGlobalVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyUnusedLocalVariable", + "shortDescription": { + "text": "Unused local variable/parameter" + }, + "fullDescription": { + "text": "Reports local variable or parameter declarations and assignments that are unused. An unused declaration or assignment can be safely removed. Inspection ID: RubyUnusedLocalVariable", + "markdown": "Reports local variable or parameter declarations and assignments that are unused.\n\nAn unused declaration or assignment can be safely removed.\n\nInspection ID: RubyUnusedLocalVariable" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyUnusedLocalVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Data flow", + "index": 62, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyQuotedStringsInspection", + "shortDescription": { + "text": "Unnecessary use of double quotes in string" + }, + "fullDescription": { + "text": "Reports double-quoted strings that can be converted to single-quoted. Any string that doesn't contain any expression substitutions, or special symbols may be converted. Example: '# Bad practice\n\"Hello world\"\n\"Hello \\\"John Doe\\\"\"'\n A quick-fix to convert a double-quoted string is available. After the quick-fix is applied, the result looks like this: '# Good practice\n'Hello world'\n'Hello \"John Doe\"'\n\"Hello 'John Doe'\"'\n Use the Ignore strings containing single quotes checkbox to ignore strings that require escaping. Inspired by 'RuboCop' Inspection ID: RubyQuotedStringsInspection", + "markdown": "Reports double-quoted strings that can be converted to single-quoted. Any string that doesn't contain any expression substitutions, or special symbols may be converted.\n\nExample:\n\n # Bad practice\n \"Hello world\"\n \"Hello \\\"John Doe\\\"\"\n\nA quick-fix to convert a double-quoted string is available. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n 'Hello world'\n 'Hello \"John Doe\"'\n \"Hello 'John Doe'\"\n\nUse the *Ignore strings containing single quotes* checkbox to ignore strings that require escaping.\n\nInspired by ['RuboCop'](https://github.com/rubocop-hq/ruby-style-guide#consistent-string-literals)\n\nInspection ID: RubyQuotedStringsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RubyQuotedStringsInspection", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyResolve", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports references in the code that cannot be resolved to any declaration (for example, a method reference or a constant reference). Unresolved references often occur because of typos and can lead to runtime errors: 'NoMethodError', 'NameError', and so on. When looking for a declaration, the receiver type (explicit or typed, resolve) is checked first. If there is no matching declaration found on the receiver, any matching declaration from the project (implicit or text-based, resolve) is accepted. By default, a warning arises when there are no matching declarations irrespective of the receiver, i.e. implicit resolve fails. Use the Report unresolved references on typed receivers checkbox to show warnings when there are no matching declarations on the receiver. Inspection ID: RubyResolve", + "markdown": "Reports references in the code that cannot be resolved to any declaration (for example, a method reference or a constant reference). Unresolved references often occur because of typos and can lead to runtime errors: `NoMethodError`, `NameError`, and so on.\n\nWhen looking for a declaration, the receiver type (explicit or typed, resolve) is checked first. If there is no matching declaration\nfound on the receiver, any matching declaration from the project (implicit or text-based, resolve) is accepted.\n\nBy default, a warning arises when there are no matching declarations irrespective of the receiver, i.e. implicit resolve fails.\n\nUse the *Report unresolved references* on typed receivers checkbox to show warnings when there are no matching declarations on the receiver.\n\nInspection ID: RubyResolve" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyTooManyMethodsInspection", + "shortDescription": { + "text": "Class/module with too many methods" + }, + "fullDescription": { + "text": "Reports classes/modules with too many methods. This usually means they are trying to 'do too much', and may need to be refactored into multiple smaller components. Use the Number of methods field to specify the maximum number of methods a class/module is allowed to have. Use the Ignore test classes checkbox to ignore test classes. Inspired by 'Reek Code Smells' Inspection ID: RubyTooManyMethodsInspection", + "markdown": "Reports classes/modules with too many methods. This usually means they are trying to 'do too much', and may need to be refactored into multiple smaller components.\n\nUse the *Number of methods* field to specify the maximum number of methods a class/module is allowed to have.\n\nUse the *Ignore test classes* checkbox to ignore test classes.\n\nInspired by ['Reek Code Smells'](https://github.com/troessner/reek/blob/master/docs/Too-Many-Methods.md)\n\nInspection ID: RubyTooManyMethodsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyTooManyMethodsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code metrics", + "index": 58, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyAssignmentExpressionInConditionalInspection", + "shortDescription": { + "text": "Assignment expression in conditional" + }, + "fullDescription": { + "text": "Reports usages of assignment expressions in conditionals. Assignments in conditionals can make the code harder to read and are often a typo ('=' instead of '=='). Use the Report assignments in parentheses checkbox to highlight assignments in parentheses. Inspection ID: RubyAssignmentExpressionInConditionalInspection", + "markdown": "Reports usages of assignment expressions in conditionals. Assignments in conditionals can make the code harder to read and are often a typo (`=` instead of `==`).\n\nUse the *Report assignments in parentheses* checkbox to highlight assignments in parentheses.\n\nInspection ID: RubyAssignmentExpressionInConditionalInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyAssignmentExpressionInConditionalInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyBracketErrorInspection", + "shortDescription": { + "text": "Unbalanced brackets" + }, + "fullDescription": { + "text": "Reports blocks of code with unbalanced brackets. A quick-fix is available to add the missing bracket. Inspection ID: RubyBracketErrorInspection", + "markdown": "Reports blocks of code with unbalanced brackets. A quick-fix is available to add the missing bracket.\n\nInspection ID: RubyBracketErrorInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RubyBracketErrorInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyMismatchedGlobalVariableType", + "shortDescription": { + "text": "Mismatched global variable type" + }, + "fullDescription": { + "text": "Reports global variable assignments whose inferred types don't match the global variable's expected type. The expected constant type is taken from the RBS type signature. Inspection ID: RubyMismatchedGlobalVariableType", + "markdown": "Reports global variable assignments whose inferred types don't match the global variable's expected type. The expected constant type is taken from the RBS type signature.\n\nInspection ID: RubyMismatchedGlobalVariableType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyMismatchedGlobalVariableType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnnecessaryParentheses", + "shortDescription": { + "text": "Unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports unnecessary parentheses within function types. Functions without parameters do not require parentheses. A quick fix is available to remove the unnecessary parentheses. Example: 'class Example\n # Unnecessary parentheses in function type\n def call: () -> untyped\nend' After the quick fix: 'class Example\n def call: -> untyped\nend' Inspection ID: RbsUnnecessaryParentheses", + "markdown": "Reports unnecessary parentheses within function types. Functions without parameters do not require parentheses.\n\nA quick fix is available to remove the unnecessary parentheses.\n\nExample:\n\n class Example\n # Unnecessary parentheses in function type\n def call: () -> untyped\n end\n\nAfter the quick fix:\n\n class Example\n def call: -> untyped\n end\n\nInspection ID: RbsUnnecessaryParentheses" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RbsUnnecessaryParentheses", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Code style issues", + "index": 56, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertOneChainedExprToSafeNavigation", + "shortDescription": { + "text": "Complex call chain" + }, + "fullDescription": { + "text": "Reports chained calls that can be simplified with the safe navigation operator ('&.'). A group of chained calls is a common pattern to check for 'nil' in each call component. Example: '# Bad practice\nif user && user.profile && user.profile.thumbnails\nend'\n A quick-fix is available to simplify the expression with '&.'. After the quick-fix is applied, the result looks like this: '# Good practice\nif user&.profile&.thumbnails\nend'\n Inspection ID: ConvertOneChainedExprToSafeNavigation", + "markdown": "Reports chained calls that can be simplified with the safe navigation operator (`&.`). A group of chained calls is a common pattern to check for `nil` in each call component.\n\nExample:\n\n # Bad practice\n if user && user.profile && user.profile.thumbnails\n end\n\nA quick-fix is available to simplify the expression with `&.`. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n if user&.profile&.thumbnails\n end\n\nInspection ID: ConvertOneChainedExprToSafeNavigation" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ConvertOneChainedExprToSafeNavigation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyDuplicatedKeysInHashInspection", + "shortDescription": { + "text": "Duplicate key in hash" + }, + "fullDescription": { + "text": "Reports duplicate keys in hashes, method definitions, and calls. Duplicate hash keys (except for the last one) are silently ignored at runtime and are often a sign of a typo or bug. Inspection ID: RubyDuplicatedKeysInHashInspection", + "markdown": "Reports duplicate keys in hashes, method definitions, and calls. Duplicate hash keys (except for the last one) are silently ignored at runtime and are often a sign of a typo or bug.\n\nInspection ID: RubyDuplicatedKeysInHashInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyDuplicatedKeysInHashInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyNestedTernaryOperatorsInspection", + "shortDescription": { + "text": "Nested ternary operator" + }, + "fullDescription": { + "text": "Reports nested ternary operators. Nested ternary operators can be difficult to read, and it is often preferable to use at least one 'if' statement instead. Example: 'min = x < y ? (x < z ? x : z) : (y < z ? y : z)' After the quick-fix is applied, the result looks like this: 'min = if x < y\n x < z ? x : z\nelse\n y < z ? y : z\nend'\n Inspired by 'Ruby Style Guide' Inspection ID: RubyNestedTernaryOperatorsInspection", + "markdown": "Reports nested ternary operators. Nested ternary operators can be difficult to read, and it is often preferable to use at least one `if` statement instead.\n\nExample:\n\n`min = x < y ? (x < z ? x : z) : (y < z ? y : z)`\nAfter the quick-fix is applied, the result looks like this:\n\n min = if x < y\n x < z ? x : z\n else\n y < z ? y : z\n end\n\nInspired by ['Ruby Style Guide'](https://github.com/rubocop-hq/ruby-style-guide#no-nested-ternary)\n\nInspection ID: RubyNestedTernaryOperatorsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RubyNestedTernaryOperatorsInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsIncorrectTypeArgumentVariance", + "shortDescription": { + "text": "Incorrect type argument variance" + }, + "fullDescription": { + "text": "Reports type arguments used in an inheritance statement (a superclass clause, self-type, or an inclusion call) which have incorrect variances. Type arguments passed to an inheritance statement must match in variance with the declaring type variable. Example: 'module Enumerable[unchecked out A]\nend\n\nclass Example[in A]\n # Contravariant type variable 'A' of class 'Example' used as a covariant argument\n include Enumerable[A]\nend' Inspection ID: RbsIncorrectTypeArgumentVariance", + "markdown": "Reports type arguments used in an inheritance statement (a superclass clause, self-type, or an inclusion call) which have incorrect variances. Type arguments passed to an inheritance statement must match in variance with the declaring type variable.\n\nExample:\n\n module Enumerable[unchecked out A]\n end\n\n class Example[in A]\n # Contravariant type variable 'A' of class 'Example' used as a covariant argument\n include Enumerable[A]\n end\n\nInspection ID: RbsIncorrectTypeArgumentVariance" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsIncorrectTypeArgumentVariance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyIfCanBeCaseInspection", + "shortDescription": { + "text": "Simplifiable 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be replaced with 'case' statements. Use the Minimum number of branches field to specify the minimum number of 'when' branches for the resulting 'case' statement. Example: 'fruit = gets\n\nif fruit == 'apple' # Simplifiable 'if' statement\n puts 'This is apple!'\nelsif fruit == 'peach'\n puts 'This is peach!'\nelsif fruit == 'orange'\n puts 'This is orange!'\nelsif fruit == 'banana'\n puts 'This is banana!'\nend'\n Inspection ID: RubyIfCanBeCaseInspection", + "markdown": "Reports `if` statements that can be replaced with `case` statements.\n\nUse the *Minimum number of branches* field to specify the minimum number of `when` branches for the resulting\n`case` statement.\n\nExample:\n\n fruit = gets\n\n if fruit == 'apple' # Simplifiable 'if' statement\n puts 'This is apple!'\n elsif fruit == 'peach'\n puts 'This is peach!'\n elsif fruit == 'orange'\n puts 'This is orange!'\n elsif fruit == 'banana'\n puts 'This is banana!'\n end\n\nInspection ID: RubyIfCanBeCaseInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyIfCanBeCaseInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingYardParamTag", + "shortDescription": { + "text": "Missing '@param' tag in method parameter" + }, + "fullDescription": { + "text": "Reports method parameters without '@param' tags. A quick-fix is available to add the missing '@param' tags. Use the Generated tag format field to specify the format for the added '@param' tags. Inspection ID: MissingYardParamTag", + "markdown": "Reports method parameters without `@param` tags. A quick-fix is available to add the missing `@param` tags.\n\nUse the *Generated tag format* field to specify the format for the added `@param` tags.\n\nInspection ID: MissingYardParamTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "MissingYardParamTag", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/YARD", + "index": 53, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyMismatchedVariableType", + "shortDescription": { + "text": "Mismatched variable type" + }, + "fullDescription": { + "text": "Reports instance and class variable assignments whose inferred types don't match the variable's expected type. The expected variable type is taken from the RBS type signature. Inspection ID: RubyMismatchedVariableType", + "markdown": "Reports instance and class variable assignments whose inferred types don't match the variable's expected type. The expected variable type is taken from the RBS type signature.\n\nInspection ID: RubyMismatchedVariableType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyMismatchedVariableType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyEmptyRescueBlockInspection", + "shortDescription": { + "text": "Empty 'rescue' block" + }, + "fullDescription": { + "text": "Reports empty 'rescue' blocks. While occasionally intentional, empty 'rescue' blocks usually indicate coding errors and can make debugging difficult. Use the Ignore 'rescue' blocks with comments checkbox to define whether 'rescue' blocks containing only comments count. Use the Ignore for 'rescue' parameters named '_' checkbox to define whether 'rescue' blocks with '_''s as parameters count. Inspired by 'Roodi' Inspection ID: RubyEmptyRescueBlockInspection", + "markdown": "Reports empty `rescue` blocks. While occasionally intentional, empty `rescue` blocks usually indicate coding errors and can make debugging difficult.\n\nUse the *Ignore 'rescue' blocks with comments* checkbox to define whether `rescue` blocks containing only comments count.\n\nUse the *Ignore for 'rescue' parameters named '_'* checkbox to define whether `rescue` blocks with `_`'s as parameters count.\n\nInspired by ['Roodi'](https://github.com/martinjandrews/roodi#readme)\n\nInspection ID: RubyEmptyRescueBlockInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyEmptyRescueBlockInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyIncorrectArgumentCount", + "shortDescription": { + "text": "Incorrect call argument count" + }, + "fullDescription": { + "text": "Reports method calls where the number of arguments passed (including blocks) doesn't match the method's signature. The method's signature is taken from either of: The method declaration The RBS type signature A quick fix is available in some situations to add missing or remove excess arguments. Example: 'def example\nend\n\n# Too many arguments provided\nexample(true)'\n Inspection ID: RubyIncorrectArgumentCount", + "markdown": "Reports method calls where the number of arguments passed (including blocks) doesn't match the method's signature. The method's signature is taken from either of:\n\n* The method declaration\n* The RBS type signature\n\nA quick fix is available in some situations to add missing or remove excess arguments.\n\nExample:\n\n def example\n end\n\n # Too many arguments provided\n example(true)\n\nInspection ID: RubyIncorrectArgumentCount" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyArgCount", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GemInspection", + "shortDescription": { + "text": "Missing gem" + }, + "fullDescription": { + "text": "Reports missing gems from the current interpreter. Quick-fixes to install the missing gems are available. Missing gems can prevent the application from running correctly, and the IDE from performing accurate code completion, navigation, and analysis. Inspection ID: GemInspection", + "markdown": "Reports missing gems from the current interpreter. Quick-fixes to install the missing gems are available.\n\nMissing gems can prevent the application from running correctly, and the IDE from performing accurate code completion, navigation, and\nanalysis.\n\nInspection ID: GemInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "GemInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Gems and gem management", + "index": 22, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyControlFlowConversionInspection", + "shortDescription": { + "text": "Negative condition in control flow statement" + }, + "fullDescription": { + "text": "Reports control flow statements with negative conditions. It is preferable to use a negated control flow statement with a positive condition. Inspired by 'Ruby Style Guide' Inspection ID: RubyControlFlowConversionInspection", + "markdown": "Reports control flow statements with negative conditions. It is preferable to use a negated control flow statement with a positive condition.\n\nInspired by ['Ruby Style Guide'](https://github.com/rubocop-hq/ruby-style-guide#unless-for-negatives)\n\nInspection ID: RubyControlFlowConversionInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyControlFlowConversionInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsModuleUsedAsSuperclass", + "shortDescription": { + "text": "Module used as superclass" + }, + "fullDescription": { + "text": "Reports modules used in superclass clauses. Superclass clauses are only allowed to reference classes. A quick fix is available to remove the invalid superclass clause. Example: '# Module 'Kernel' used as a superclass\nclass Example < Kernel\nend' After the quick fix: 'class Example\nend' Inspection ID: RbsModuleUsedAsSuperclass", + "markdown": "Reports modules used in superclass clauses. Superclass clauses are only allowed to reference classes.\n\nA quick fix is available to remove the invalid superclass clause.\n\nExample:\n\n # Module 'Kernel' used as a superclass\n class Example < Kernel\n end\n\nAfter the quick fix:\n\n class Example\n end\n\nInspection ID: RbsModuleUsedAsSuperclass" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsModuleUsedAsSuperclass", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Inheritance issues", + "index": 73, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyModifiedFrozenObject", + "shortDescription": { + "text": "Frozen object modification" + }, + "fullDescription": { + "text": "Reports method calls that attempt to modify frozen objects. Modifying frozen objects will raise an error at runtime. Inspection ID: RubyModifiedFrozenObject", + "markdown": "Reports method calls that attempt to modify frozen objects.\n\nModifying frozen objects will raise an error at runtime.\n\nInspection ID: RubyModifiedFrozenObject" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RubyModifiedFrozenObject", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Data flow", + "index": 62, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyParameterNamingConvention", + "shortDescription": { + "text": "Unconventional parameter name" + }, + "fullDescription": { + "text": "Reports parameters with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating parameter names. Use the Min length and Max length fields to specify the minimum and maximum length of a name correspondingly. Use the Ignore… checkboxes to skip the validation of block, lambda, or rescue parameter names. Inspection ID: RubyParameterNamingConvention", + "markdown": "Reports parameters with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating parameter names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name correspondingly.\n\nUse the *Ignore...* checkboxes to skip the validation of block, lambda, or rescue parameter names.\n\nInspection ID: RubyParameterNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyParameterNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyCaseWithoutElseBlockInspection", + "shortDescription": { + "text": "'case' statement without 'else' block" + }, + "fullDescription": { + "text": "Reports 'case' statements without 'else' blocks. An 'else' block should always be present to specify the default result if no match is found. Example: '# Bad practice\ncase status\nwhen :active\n perform_action\nend'\n A quick-fix is available to insert an 'else' block. After the quick-fix is applied, the result looks like this: '# Good practice\ncase status\nwhen :active\n perform_action\nelse\n # type code here\nend'\n Inspired by 'Roodi' Inspection ID: RubyCaseWithoutElseBlockInspection", + "markdown": "Reports `case` statements without `else` blocks. An `else` block should always be present to specify the default result if no match is found.\n\nExample:\n\n # Bad practice\n case status\n when :active\n perform_action\n end\n\nA quick-fix is available to insert an `else` block. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n case status\n when :active\n perform_action\n else\n # type code here\n end\n\nInspired by ['Roodi'](https://github.com/martinjandrews/roodi)\n\nInspection ID: RubyCaseWithoutElseBlockInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyCaseWithoutElseBlockInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyStringKeysInHashInspection", + "shortDescription": { + "text": "Hash with strings as keys" + }, + "fullDescription": { + "text": "Reports hashes with strings as keys. It is preferable to use symbols instead of strings as hash keys. Example: '# Bad practice\n{ 'foo' => 1, 'bar' => 2 }'\n A quick-fix is available to convert all string keys to symbols. After the quick-fix is applied, the result looks like this: '# Good practice\n{ foo: 1, bar: 2 }'\n Inspired by 'RuboCop' Inspection ID: RubyStringKeysInHashInspection", + "markdown": "Reports hashes with strings as keys. It is preferable to use symbols instead of strings as hash keys.\n\nExample:\n\n # Bad practice\n { 'foo' => 1, 'bar' => 2 }\n\nA quick-fix is available to convert all string keys to symbols. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n { foo: 1, bar: 2 }\n\nInspired by ['RuboCop'](https://github.com/rubocop-hq/ruby-style-guide#symbols-as-keys)\n\nInspection ID: RubyStringKeysInHashInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RubyStringKeysInHashInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyEmptyElseBlockInspection", + "shortDescription": { + "text": "Empty 'else' block" + }, + "fullDescription": { + "text": "Reports empty 'else' blocks. While occasionally intentional, empty 'else' blocks usually indicate coding errors and can make debugging difficult. Use the Ignore 'else' blocks with comments checkbox to define whether 'else' blocks containing only comments count. Inspired by 'Ruby Style Guide' Inspection ID: RubyEmptyElseBlockInspection", + "markdown": "Reports empty `else` blocks. While occasionally intentional, empty `else` blocks usually indicate coding errors and can make debugging difficult.\n\nUse the *Ignore 'else' blocks with comments* checkbox to define whether `else` blocks containing only comments count.\n\nInspired by ['Ruby Style Guide'](https://github.com/bbatsov/ruby-style-guide)\n\nInspection ID: RubyEmptyElseBlockInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyEmptyElseBlockInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyClassModuleNamingConvention", + "shortDescription": { + "text": "Unconventional class/module name" + }, + "fullDescription": { + "text": "Reports classes and modules with names that are either too short, too long or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating class and module names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyClassModuleNamingConvention", + "markdown": "Reports classes and modules with names that are either too short, too long or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating class and module names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyClassModuleNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyClassModuleNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RailsActionMailboxMissingProcess", + "shortDescription": { + "text": "Mailbox missing 'process' method" + }, + "fullDescription": { + "text": "Reports mailboxes that are missing the 'process' method. Inspection ID: RailsActionMailboxMissingProcess", + "markdown": "Reports mailboxes that are missing the `process` method.\n\nInspection ID: RailsActionMailboxMissingProcess" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RailsActionMailboxMissingProcess", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Rails", + "index": 29, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyDeprecatedSymbol", + "shortDescription": { + "text": "Deprecated feature" + }, + "fullDescription": { + "text": "Reports usages of deprecated methods and constants. They will be removed in a later version, and it is recommended to find an alternative. Inspection ID: RubyDeprecatedSymbol", + "markdown": "Reports usages of deprecated methods and constants. They will be removed in a later version, and it is recommended to find an alternative.\n\nInspection ID: RubyDeprecatedSymbol" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyDeprecatedSymbol", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Rails", + "index": 29, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyDefParenthesesInspection", + "shortDescription": { + "text": "Incorrect parentheses in method definition" + }, + "fullDescription": { + "text": "Reports method definitions with the incorrect parentheses style. Parentheses are expected in method definitions with parameters, opposite to method definitions without parameters. Example: '# Bad practice\ndef example_method(); end\ndef example_method_with_parameters param1, param2; end'\n Quick-fixes are available to remove the parentheses or add them respectively. After the quick-fixes are applied, the result looks like this: '# Good practice\ndef example_method; end\ndef example_method_with_parameters(param1, param2); end'\n Inspired by 'RuboCop' Inspection ID: RubyDefParenthesesInspection", + "markdown": "Reports method definitions with the incorrect parentheses style. Parentheses are expected in method definitions with parameters, opposite to method definitions without parameters.\n\nExample:\n\n # Bad practice\n def example_method(); end\n def example_method_with_parameters param1, param2; end\n\nQuick-fixes are available to remove the parentheses or add them respectively. After the quick-fixes are applied, the result looks like this:\n\n # Good practice\n def example_method; end\n def example_method_with_parameters(param1, param2); end\n\nInspired by ['RuboCop'](https://github.com/rubocop-hq/ruby-style-guide#method-parens)\n\nInspection ID: RubyDefParenthesesInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RubyDefParenthesesInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyRedundantSafeNavigation", + "shortDescription": { + "text": "Redundant safe navigation" + }, + "fullDescription": { + "text": "Reports the use of the safe navigation operator ('&.') with a non-nil receiver, which can be omitted. Use the Ignored receivers list to specify method calls used as receivers that should be ignored (for example, 'Foo#call' or 'Foo::call' for an instance or a singleton method respectively). Example: 'value = 1\nif value&.even?\n # ...\nend'\n Inspection ID: RubyRedundantSafeNavigation", + "markdown": "Reports the use of the safe navigation operator (`&.`) with a non-nil receiver, which can be omitted.\n\nUse the *Ignored receivers* list to specify method calls used as receivers that should be ignored (for example,\n`Foo#call` or `Foo::call` for an instance or a singleton method respectively).\n\nExample:\n\n value = 1\n if value&.even?\n # ...\n end\n\nInspection ID: RubyRedundantSafeNavigation" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyRedundantSafeNavigation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Data flow", + "index": 62, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyNilAnalysis", + "shortDescription": { + "text": "'nil' dereference" + }, + "fullDescription": { + "text": "Reports possible 'nil' dereferences. Dereferencing 'nil' may cause a 'NoMethodError'. Use the Ignored receivers list to specify method calls used as receivers that should be ignored (for example, 'Foo#call' or 'Foo::call' for an instance or a singleton method respectively). Example: 'def foo\n rand(2) == 1 ? nil : 1\nend\n\na = foo\na.nomethod # method invocation may produce NoMethodError'\n Inspection ID: RubyNilAnalysis", + "markdown": "Reports possible `nil` dereferences. Dereferencing `nil` may cause a `NoMethodError`.\n\nUse the *Ignored receivers* list to specify method calls used as receivers that should be ignored (for example,\n`Foo#call` or `Foo::call` for an instance or a singleton method respectively).\n\nExample:\n\n def foo\n rand(2) == 1 ? nil : 1\n end\n\n a = foo\n a.nomethod # method invocation may produce NoMethodError\n\nInspection ID: RubyNilAnalysis" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyNilAnalysis", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Data flow", + "index": 62, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyLiteralArrayInspection", + "shortDescription": { + "text": "Array of string literals instead of '%w'" + }, + "fullDescription": { + "text": "Reports arrays of string literals that can be replaced with '%w'. Inspired by 'Ruby Style Guide' Inspection ID: RubyLiteralArrayInspection", + "markdown": "Reports arrays of string literals that can be replaced with `%w`.\n\nInspired by ['Ruby Style Guide'](https://github.com/rubocop-hq/ruby-style-guide#percent-w)\n\nInspection ID: RubyLiteralArrayInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RubyLiteralArrayInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnusedTypeAlias", + "shortDescription": { + "text": "Unused type alias" + }, + "fullDescription": { + "text": "Reports type aliases that are unused within the project. A quick fix is available to remove the unused type alias. Example: '# Type alias 'example' is unused\ntype example = untyped' Inspection ID: RbsUnusedTypeAlias", + "markdown": "Reports type aliases that are unused within the project.\n\nA quick fix is available to remove the unused type alias.\n\nExample:\n\n # Type alias 'example' is unused\n type example = untyped\n\nInspection ID: RbsUnusedTypeAlias" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RbsUnusedTypeAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Data flow", + "index": 52, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyMismatchedArgumentType", + "shortDescription": { + "text": "Mismatched argument type" + }, + "fullDescription": { + "text": "Reports method and yield calls with arguments whose inferred types don't match the parameter's expected type. The expected parameter type is taken from any of: The RBS type signature The Sorbet type signature The YARD '@param' tag Example: '# @param [Integer] param\ndef method(param) end\n\nmethod([1, 2])'\n Inspection ID: RubyMismatchedArgumentType", + "markdown": "Reports method and yield calls with arguments whose inferred types don't match the parameter's expected type. The expected parameter type is taken from any of:\n\n* The RBS type signature\n* The Sorbet type signature\n* The YARD `@param` tag\n\nExample:\n\n # @param [Integer] param\n def method(param) end\n\n method([1, 2])\n\nInspection ID: RubyMismatchedArgumentType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyMismatchedArgumentType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsInvalidMethodOverload", + "shortDescription": { + "text": "Invalid method overload" + }, + "fullDescription": { + "text": "Reports invalid method overloads ('...'). A method overload is only valid if there is exactly one other non-overloaded definition for the method. A quick fix is available to remove the invalid method overload. Example: 'class Example\n # Cannot find a non-overloaded declaration for method 'call' of class 'Example'\n def call: -> untyped | ...\nend' After the quick fix: 'class Example\n def call: -> untyped\nend' Inspection ID: RbsInvalidMethodOverload", + "markdown": "Reports invalid method overloads (`...`). A method overload is only valid if there is exactly one other non-overloaded definition for the method.\n\nA quick fix is available to remove the invalid method overload.\n\nExample:\n\n class Example\n # Cannot find a non-overloaded declaration for method 'call' of class 'Example'\n def call: -> untyped | ...\n end\n\nAfter the quick fix:\n\n class Example\n def call: -> untyped\n end\n\nInspection ID: RbsInvalidMethodOverload" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsInvalidMethodOverload", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsIncorrectTypeArgumentCount", + "shortDescription": { + "text": "Incorrect type argument count" + }, + "fullDescription": { + "text": "Reports references to generic types with the incorrect number of type arguments. Usage of a generic type without passing the correct number of type arguments is an error. A quick fix is available to correct the number of type arguments passed. Example: 'class Example[A]\nend\n\n# Too many type arguments provided\ntype example = Example[untyped, untyped]' After the quick fix: 'class Example[A]\nend\n\ntype example = Example[untyped]' Inspection ID: RbsIncorrectTypeArgumentCount", + "markdown": "Reports references to generic types with the incorrect number of type arguments. Usage of a generic type without passing the correct number of type arguments is an error.\n\nA quick fix is available to correct the number of type arguments passed.\n\nExample:\n\n class Example[A]\n end\n\n # Too many type arguments provided\n type example = Example[untyped, untyped]\n\nAfter the quick fix:\n\n class Example[A]\n end\n\n type example = Example[untyped]\n\nInspection ID: RbsIncorrectTypeArgumentCount" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsIncorrectTypeArgumentCount", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsInconsistentClassModuleAlias", + "shortDescription": { + "text": "Inconsistent class/module alias" + }, + "fullDescription": { + "text": "Reports inconsistent declarations of class and module aliases. Classes cannot be aliased as modules, and modules cannot be aliased as classes. Classes aliased as modules and vice versa produce 'InconsistentClassModuleAliasError'. A quick fix is available to navigate to the conflicting declarations. Example: 'class User\nend\n\n# Class 'User' used as a module alias target\nmodule Customer = User' Inspection ID: RbsInconsistentClassModuleAlias", + "markdown": "Reports inconsistent declarations of class and module aliases. Classes cannot be aliased as modules, and modules cannot be aliased as classes.\n\n\nClasses aliased as modules and vice versa produce `InconsistentClassModuleAliasError`.\n\nA quick fix is available to navigate to the conflicting declarations.\n\n\nExample:\n\n\n class User\n end\n\n # Class 'User' used as a module alias target\n module Customer = User\n\nInspection ID: RbsInconsistentClassModuleAlias" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsInconsistentClassModuleAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyThenInMultilineConditionalInspection", + "shortDescription": { + "text": "'then' in multiline 'if'/'unless' block" + }, + "fullDescription": { + "text": "Reports redundant 'then' keywords in multiline 'if/unless' blocks. Example: '# Bad practice\nif x > y then\n x = y\nend'\n A quick-fix is available to remove the 'then' keyword. '# Good practice\nif x > y\n x = y\nend'\n Inspired by 'RuboCop'. Inspection ID: RubyThenInMultilineConditionalInspection", + "markdown": "Reports redundant `then` keywords in multiline `if/unless` blocks.\n\nExample:\n\n # Bad practice\n if x > y then\n x = y\n end\n\nA quick-fix is available to remove the `then` keyword.\n\n # Good practice\n if x > y\n x = y\n end\n\nInspired by ['RuboCop'](https://github.com/rubocop/ruby-style-guide/blob/master/README.adoc#then-in-multi-line-expression).\n\nInspection ID: RubyThenInMultilineConditionalInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyThenInMultilineConditionalInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Redundant code", + "index": 59, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnconventionalTypeVariableName", + "shortDescription": { + "text": "Unconventional type variable name" + }, + "fullDescription": { + "text": "Reports type variables with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating type variable names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RbsUnconventionalTypeVariableName", + "markdown": "Reports type variables with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating type variable names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RbsUnconventionalTypeVariableName" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsUnconventionalTypeVariableName", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Naming conventions", + "index": 39, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsDuplicateDeclarations", + "shortDescription": { + "text": "Duplicate declaration" + }, + "fullDescription": { + "text": "Reports duplicate declarations of classes, modules, interfaces, constants, global variables, type aliases, and methods. Duplicate declarations produce 'DuplicatedDeclarationError'. Duplicate method definitions produce 'DuplicatedMethodDefinitionError'. Duplicate interface method definitions produce 'DuplicatedInterfaceMethodDefinitionError'. A quick fix is available to navigate to the duplicate declaration. Example: '# Duplicate interface declaration\ninterface _Example\nend\n\n# Duplicate interface declaration\ninterface _Example\nend' Inspection ID: RbsDuplicateDeclarations", + "markdown": "Reports duplicate declarations of classes, modules, interfaces, constants, global variables, type aliases, and methods.\n\n* Duplicate declarations produce `DuplicatedDeclarationError`.\n* Duplicate method definitions produce `DuplicatedMethodDefinitionError`.\n* Duplicate interface method definitions produce `DuplicatedInterfaceMethodDefinitionError`.\n\nA quick fix is available to navigate to the duplicate declaration.\n\nExample:\n\n # Duplicate interface declaration\n interface _Example\n end\n\n # Duplicate interface declaration\n interface _Example\n end\n\nInspection ID: RbsDuplicateDeclarations" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsDuplicateDeclarations", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyDynamicConstAssignment", + "shortDescription": { + "text": "Dynamic constant assignment" + }, + "fullDescription": { + "text": "Reports dynamic constant assignment. The dynamic constant assignment is forbidden. The Ruby interpreter considers it as a syntax error. Inspection ID: RubyDynamicConstAssignment", + "markdown": "Reports dynamic constant assignment. The dynamic constant assignment is forbidden. The Ruby interpreter considers it as a syntax error.\n\nInspection ID: RubyDynamicConstAssignment" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RubyDynamicConstAssignment", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsBadTypeVariableDefaultType", + "shortDescription": { + "text": "Bad type variable default type" + }, + "fullDescription": { + "text": "Reports default types in type variable declarations which do not subtype the upper bound. Default types must be a subtype of any specified upper bound. Example: '# 'String' is not a subtype of 'Numeric'\nclass Example[A < Numeric = String]\nend' Inspection ID: RbsBadTypeVariableDefaultType", + "markdown": "Reports default types in type variable declarations which do not subtype the upper bound. Default types must be a subtype of any specified upper bound.\n\nExample:\n\n # 'String' is not a subtype of 'Numeric'\n class Example[A < Numeric = String]\n end\n\nInspection ID: RbsBadTypeVariableDefaultType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsBadTypeVariableDefaultType", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnnecessaryQualifier", + "shortDescription": { + "text": "Unnecessary qualifier" + }, + "fullDescription": { + "text": "Reports unnecessary qualifiers within references. Some qualifiers are unnecessary when there are use clauses or namespaces present. A quick fix is available to remove the unnecessary qualifier. Example: 'use Enumerator::Generator\nclass Example\n # 'Enumerator::Generator' can be shortened\n def call: -> Enumerator::Generator\nend' After the quick fix: 'use Enumerator::Generator\nclass Example\n def call: -> Generator\nend' Inspection ID: RbsUnnecessaryQualifier", + "markdown": "Reports unnecessary qualifiers within references. Some qualifiers are unnecessary when there are use clauses or namespaces present.\n\nA quick fix is available to remove the unnecessary qualifier.\n\nExample:\n\n use Enumerator::Generator\n class Example\n # 'Enumerator::Generator' can be shortened\n def call: -> Enumerator::Generator\n end\n\nAfter the quick fix:\n\n use Enumerator::Generator\n class Example\n def call: -> Generator\n end\n\nInspection ID: RbsUnnecessaryQualifier" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsUnnecessaryQualifier", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Code style issues", + "index": 56, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyArgumentParentheses", + "shortDescription": { + "text": "Whitespace before parentheses in method call" + }, + "fullDescription": { + "text": "Reports method calls (including 'yield') with whitespace before its parentheses. '# Bad practice\nputs ('Hello world!')'\n\n'# Good practice\nputs('Hello world!')'\n Inspired by 'RuboCop' Inspection ID: RubyArgumentParentheses", + "markdown": "Reports method calls (including `yield`) with whitespace before its parentheses.\n\n # Bad practice\n puts ('Hello world!')\n\n # Good practice\n puts('Hello world!')\n\nInspired by ['RuboCop'](https://github.com/rubocop/ruby-style-guide#space-in-method-calls)\n\nInspection ID: RubyArgumentParentheses" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyArgumentParentheses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyJumpError", + "shortDescription": { + "text": "Incorrect context for jump statement" + }, + "fullDescription": { + "text": "Reports the incorrect use of control flow jump statements, such as 'return', 'retry', 'redo', 'break', and 'continue'. Example: 'i = 1\nwhile true\n if i * 6 >= 30\n retry\n end\n puts i * 6\n i += 1\nend'\n Inspection ID: RubyJumpError", + "markdown": "Reports the incorrect use of control flow jump statements, such as `return`, `retry`, `redo`, `break`, and `continue`.\n\nExample:\n\n i = 1\n while true\n if i * 6 >= 30\n retry\n end\n puts i * 6\n i += 1\n end\n\nInspection ID: RubyJumpError" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyJumpError", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Control flow issues", + "index": 57, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsInvalidTypeArgumentUsage", + "shortDescription": { + "text": "Invalid type argument usage" + }, + "fullDescription": { + "text": "Reports type variables used as arguments in locations that their variance does not allow, so long as they are not marked as 'unchecked'. A type variable may have a variance of either covariant ('out'), contravariant ('in'), or invariant (neither 'out' nor 'in'). The following rules are used to check the type arguments used in attribute and method declarations: 'unchecked' type arguments are ignored. Covariant type arguments may only be used in locations that produce values (for example, return types and block parameters). Contravariant type arguments may only be used in locations that consume arguments (for example, parameters and block return types). Invariant type arguments may be used in both locations that produce values and consume arguments. Example: 'class Example[in A, out B]\n # Covariant type variable 'B' of class 'Example' used in a contravariant position, ...\n def call: (B) -> A\nend' Inspection ID: RbsInvalidTypeArgumentUsage", + "markdown": "Reports type variables used as arguments in locations that their variance does not allow, so long as they are not marked as `unchecked`. A type variable may have a variance of either covariant (`out`), contravariant (`in`), or invariant (neither `out` nor `in`).\n\nThe following rules are used to check the type arguments used in attribute and method declarations:\n\n* `unchecked` type arguments are ignored.\n* Covariant type arguments may only be used in locations that produce values (for example, return types and block parameters).\n* Contravariant type arguments may only be used in locations that consume arguments (for example, parameters and block return types).\n* Invariant type arguments may be used in both locations that produce values and consume arguments.\n\nExample:\n\n class Example[in A, out B]\n # Covariant type variable 'B' of class 'Example' used in a contravariant position, ...\n def call: (B) -> A\n end\n\nInspection ID: RbsInvalidTypeArgumentUsage" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsInvalidTypeArgumentUsage", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsCyclicClassModuleAliasDeclaration", + "shortDescription": { + "text": "Cyclic class/module alias declaration" + }, + "fullDescription": { + "text": "Reports cyclic declarations of class or module aliases. Cyclic declarations produce 'CyclicClassAliasDefinitionError'. Example: '# Cyclic class alias declaration\nclass User = Customer\nclass Customer = User' Inspection ID: RbsCyclicClassModuleAliasDeclaration", + "markdown": "Reports cyclic declarations of class or module aliases.\n\n\nCyclic declarations produce `CyclicClassAliasDefinitionError`.\n\n\nExample:\n\n\n # Cyclic class alias declaration\n class User = Customer\n class Customer = User\n\nInspection ID: RbsCyclicClassModuleAliasDeclaration" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsCyclicClassModuleAliasDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnusedInterface", + "shortDescription": { + "text": "Unused interface" + }, + "fullDescription": { + "text": "Reports interfaces that are unused within the project. A quick fix is available to remove the unused interface. Example: '# Interface 'Example' is unused\ninterface _Example\nend' Inspection ID: RbsUnusedInterface", + "markdown": "Reports interfaces that are unused within the project.\n\nA quick fix is available to remove the unused interface.\n\nExample:\n\n # Interface 'Example' is unused\n interface _Example\n end\n\nInspection ID: RbsUnusedInterface" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RbsUnusedInterface", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Data flow", + "index": 52, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyShouldaUnsupportedTestFile", + "shortDescription": { + "text": "Shoulda test with incorrect file name" + }, + "fullDescription": { + "text": "Reports Shoulda tests with incorrect file names. Shoulda test file names should end with '_test.rb', otherwise IDE support may be limited. Inspection ID: RubyShouldaUnsupportedTestFile", + "markdown": "Reports Shoulda tests with incorrect file names. Shoulda test file names should end with '_test.rb', otherwise IDE support may be limited.\n\nInspection ID: RubyShouldaUnsupportedTestFile" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyShouldaUnsupportedTestFile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Gems and gem management", + "index": 22, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports references that cannot be resolved to any declaration. Unresolved references often occur because of typos and can lead to errors like 'UnknownMethodAlias' and 'UnknownTypeName'. Example: '# Cannot find 'Undefined'\ntype example = Undefined' Inspection ID: RbsUnresolvedReference", + "markdown": "Reports references that cannot be resolved to any declaration. Unresolved references often occur because of typos and can lead to errors like `UnknownMethodAlias` and `UnknownTypeName`.\n\nExample:\n\n # Cannot find 'Undefined'\n type example = Undefined\n\nInspection ID: RbsUnresolvedReference" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsUnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsIncorrectInclusionCall", + "shortDescription": { + "text": "Incorrect inclusion call" + }, + "fullDescription": { + "text": "Reports inclusion calls ('include', 'prepend' and 'extend') that reference a class. Inclusion calls are only allowed to reference modules or interfaces. A quick fix is available to remove the incorrect inclusion call. Example: 'class Example\n # Class 'Object' used in an 'include' call\n include Object\nend' After the quick fix: 'class Example\nend' Inspection ID: RbsIncorrectInclusionCall", + "markdown": "Reports inclusion calls (`include`, `prepend` and `extend`) that reference a class. Inclusion calls are only allowed to reference modules or interfaces.\n\nA quick fix is available to remove the incorrect inclusion call.\n\nExample:\n\n class Example\n # Class 'Object' used in an 'include' call\n include Object\n end\n\nAfter the quick fix:\n\n class Example\n end\n\nInspection ID: RbsIncorrectInclusionCall" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsIncorrectInclusionCall", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyScope", + "shortDescription": { + "text": "Variable/parameter scope" + }, + "fullDescription": { + "text": "Reports the use of local variables or parameters that may be unsafe: Implicit or explicit variables or parameters that shadow an outer variable or parameter Uninitialized variables or parameters Redundant variable declarations inside blocks Inspection ID: RubyScope", + "markdown": "Reports the use of local variables or parameters that may be unsafe:\n\n* Implicit or explicit variables or parameters that shadow an outer variable or parameter\n* Uninitialized variables or parameters\n* Redundant variable declarations inside blocks\n\nInspection ID: RubyScope" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyScope", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Data flow", + "index": 62, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyInterpreter", + "shortDescription": { + "text": "No Ruby interpreter configured for the project" + }, + "fullDescription": { + "text": "Reports when the current project has no Ruby interpreter configured, or an invalid interpreter configured. Inspection ID: RubyInterpreter", + "markdown": "Reports when the current project has no Ruby interpreter configured, or an invalid interpreter configured.\n\nInspection ID: RubyInterpreter" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyInterpreter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/General", + "index": 76, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsSimplifiableBooleanUnion", + "shortDescription": { + "text": "Simplifiable boolean union" + }, + "fullDescription": { + "text": "Reports usages of 'true | false' that can be replaced with 'bool'. The 'bool' keyword is a shorthand that aids readability. A quick fix is available to convert any combination of 'true | false' with 'bool'. Example: '# 'true | false' can be simplified\ntype example = true | false' After the quick fix: 'type example = bool' Inspection ID: RbsSimplifiableBooleanUnion", + "markdown": "Reports usages of `true | false` that can be replaced with `bool`. The `bool` keyword is a shorthand that aids readability.\n\nA quick fix is available to convert any combination of `true | false` with `bool`.\n\nExample:\n\n # 'true | false' can be simplified\n type example = true | false\n\nAfter the quick fix:\n\n type example = bool\n\nInspection ID: RbsSimplifiableBooleanUnion" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RbsSimplifiableBooleanUnion", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Code style issues", + "index": 56, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyExpressionInStringInspection", + "shortDescription": { + "text": "Expression substitution in single-quoted string" + }, + "fullDescription": { + "text": "Reports expression substitutions '#{...}' in single-quoted strings. Only the expression substitutions in double-quoted strings are recognized. Inspired by 'RuboCop'. Inspection ID: RubyExpressionInStringInspection", + "markdown": "Reports expression substitutions `#{...}` in single-quoted strings. Only the expression substitutions in double-quoted strings are recognized. Inspired by ['RuboCop'](https://github.com/rubocop/ruby-style-guide/blob/master/README.adoc#single-quote).\n\nInspection ID: RubyExpressionInStringInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyExpressionInStringInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RailsActionMailboxMissingRoutes", + "shortDescription": { + "text": "Mailbox with no routes" + }, + "fullDescription": { + "text": "Reports mailboxes that have no routes pointing to them. Routes can be added via 'ActionMailbox::Routing#routing' calls. Inspection ID: RailsActionMailboxMissingRoutes", + "markdown": "Reports mailboxes that have no routes pointing to them. Routes can be added via `ActionMailbox::Routing#routing` calls.\n\nInspection ID: RailsActionMailboxMissingRoutes" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RailsActionMailboxMissingRoutes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Rails", + "index": 29, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Rubocop", + "shortDescription": { + "text": "RuboCop" + }, + "fullDescription": { + "text": "Reports issues from the RuboCop linter. Requires the 'rubocop' gem to be installed in the project interpreter. If supported, all RuboCop commands run in server mode. Use the Severities mapping fields to customize the highlight levels. Find additional RuboCop settings in Settings | Tools | RuboCop. Inspection ID: Rubocop", + "markdown": "Reports issues from the [RuboCop](https://github.com/rubocop/rubocop) linter. Requires the `rubocop` gem to be installed in the project interpreter. If supported, all RuboCop commands run in [server mode](https://docs.rubocop.org/rubocop/usage/server.html).\n\nUse the *Severities mapping* fields to customize the highlight levels.\n\nFind additional RuboCop settings in [Settings \\| Tools \\| RuboCop](settings://ruby.rubocop).\n\nInspection ID: Rubocop" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "Rubocop", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Gems and gem management", + "index": 22, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyClassVariableUsageInspection", + "shortDescription": { + "text": "Class variable usage" + }, + "fullDescription": { + "text": "Reports the use of class variables. Class variables form a part of the global runtime state and make it easy to create hidden dependencies accidentally. This can make the system error-prone, and it is recommended to avoid using class variables. Inspired by 'Reek Code Smells' Inspection ID: RubyClassVariableUsageInspection", + "markdown": "Reports the use of class variables. Class variables form a part of the global runtime state and make it easy to create hidden dependencies accidentally. This can make the system error-prone, and it is recommended to avoid using class variables.\n\nInspired by ['Reek Code Smells'](https://github.com/troessner/reek/blob/master/docs/Class-Variable.md)\n\nInspection ID: RubyClassVariableUsageInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyClassVariableUsageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsConflictingTypeVariableVariance", + "shortDescription": { + "text": "Conflicting type variable variance" + }, + "fullDescription": { + "text": "Reports type variables whose variance ('in', 'out', or 'unchecked') conflicts with another declaration. Type variables must match in variance between partial declarations of the same class or module, even if the type variables have different names. Example: '# Type variable 'B' of class 'Example' has a variance which conflicts with other declarations, ...\nclass Example[A, in B, out C]\nend\n\n# Type variable 'Y' of class 'Example' has a variance which conflicts with other declarations, ...\nclass Example[X, Y, Z]\nend' Inspection ID: RbsConflictingTypeVariableVariance", + "markdown": "Reports type variables whose variance (`in`, `out`, or `unchecked`) conflicts with another declaration. Type variables must match in variance between partial declarations of the same class or module, even if the type variables have different names.\n\nExample:\n\n # Type variable 'B' of class 'Example' has a variance which conflicts with other declarations, ...\n class Example[A, in B, out C]\n end\n\n # Type variable 'Y' of class 'Example' has a variance which conflicts with other declarations, ...\n class Example[X, Y, Z]\n end\n\nInspection ID: RbsConflictingTypeVariableVariance" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsConflictingTypeVariableVariance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ActionCableChannelNotFound", + "shortDescription": { + "text": "Undefined channel" + }, + "fullDescription": { + "text": "Reports usages of undefined Action Cable channels. Inspection ID: ActionCableChannelNotFound", + "markdown": "Reports usages of undefined Action Cable channels.\n\nInspection ID: ActionCableChannelNotFound" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "ActionCableChannelNotFound", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Rails", + "index": 29, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyModuleAsSuperclassInspection", + "shortDescription": { + "text": "Module used as superclass" + }, + "fullDescription": { + "text": "Reports modules referenced in superclass clauses. Example: 'module Engine\n def electric?\n true\n end\nend\n\nclass Cars < Engine #module is used as superclass\nend'\n Inspection ID: RubyModuleAsSuperclassInspection", + "markdown": "Reports modules referenced in superclass clauses.\n\nExample:\n\n module Engine\n def electric?\n true\n end\n end\n\n class Cars < Engine #module is used as superclass\n end\n\nInspection ID: RubyModuleAsSuperclassInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyModuleAsSuperclassInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Inheritance issues", + "index": 79, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberStepDefinitionParameter", + "shortDescription": { + "text": "Parameters count mismatch" + }, + "fullDescription": { + "text": "Reports step definitions where the number of step name parameters does not match the number of parameters of the Ruby block. Inspection ID: CucumberStepDefinitionParameter", + "markdown": "Reports step definitions where the number of step name parameters does not match the number of parameters of the Ruby block.\n\nInspection ID: CucumberStepDefinitionParameter" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CucumberStepDefinitionParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Cucumber", + "index": 48, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RailsI18nInspection", + "shortDescription": { + "text": "Untranslated i18n property" + }, + "fullDescription": { + "text": "Reports usages of i18n property keys which are missing translations. Inspection ID: RailsI18nInspection", + "markdown": "Reports usages of i18n property keys which are missing translations.\n\nInspection ID: RailsI18nInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RailsI18nInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Rails", + "index": 29, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyMismatchedConstantType", + "shortDescription": { + "text": "Mismatched constant type" + }, + "fullDescription": { + "text": "Reports constant assignments whose inferred types don't match the constant's expected type. The expected constant type is taken from the RBS type signature. Inspection ID: RubyMismatchedConstantType", + "markdown": "Reports constant assignments whose inferred types don't match the constant's expected type. The expected constant type is taken from the RBS type signature.\n\nInspection ID: RubyMismatchedConstantType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyMismatchedConstantType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsDuplicateKeywordParameter", + "shortDescription": { + "text": "Duplicate keyword parameter" + }, + "fullDescription": { + "text": "Reports duplicate keyword parameters in methods, blocks, and proc types. Only the first declaration of each keyword parameter is recognized; all other declarations are ignored. Example: 'class Example\n # Duplicate keyword parameter\n def call: (keyword: untyped, keyword: untyped) -> untyped\nend' Inspection ID: RbsDuplicateKeywordParameter", + "markdown": "Reports duplicate keyword parameters in methods, blocks, and proc types. Only the first declaration of each keyword parameter is recognized; all other declarations are ignored.\n\nExample:\n\n class Example\n # Duplicate keyword parameter\n def call: (keyword: untyped, keyword: untyped) -> untyped\n end\n\nInspection ID: RbsDuplicateKeywordParameter" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RbsDuplicateKeywordParameter", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyMismatchedReturnType", + "shortDescription": { + "text": "Mismatched return type" + }, + "fullDescription": { + "text": "Reports method and block return values whose inferred types don't match the method's expected return type. The expected return type is taken from any of: The RBS type signature The Sorbet type signature The YARD '@return' tag Example: '# @return [Integer]\ndef method\n 1.0\nend'\n Inspection ID: RubyMismatchedReturnType", + "markdown": "Reports method and block return values whose inferred types don't match the method's expected return type. The expected return type is taken from any of:\n\n* The RBS type signature\n* The Sorbet type signature\n* The YARD `@return` tag\n\nExample:\n\n # @return [Integer]\n def method\n 1.0\n end\n\nInspection ID: RubyMismatchedReturnType" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyMismatchedReturnType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Probable bugs", + "index": 44, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyUnnecessaryReturnValue", + "shortDescription": { + "text": "Redundant variable used as 'return' value" + }, + "fullDescription": { + "text": "Reports variables used as return values. Example: '# Bad practice\ndef foo(bar)\n result = bar + 1\n result\nend'\n A quick-fix is available to remove those variables. After the quick-fix is applied, the result looks like this: '# Good practice\ndef foo(bar)\n bar + 1\nend'\n Inspection ID: RubyUnnecessaryReturnValue", + "markdown": "Reports variables used as return values.\n\nExample:\n\n # Bad practice\n def foo(bar)\n result = bar + 1\n result\n end\n\nA quick-fix is available to remove those variables. After the quick-fix is applied, the result looks like this:\n\n # Good practice\n def foo(bar)\n bar + 1\n end\n\nInspection ID: RubyUnnecessaryReturnValue" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyUnnecessaryReturnValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Redundant code", + "index": 59, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyConstantNamingConvention", + "shortDescription": { + "text": "Unconventional constant name" + }, + "fullDescription": { + "text": "Reports any constants whose names are either too short, too long, or do not follow the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating constant names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyConstantNamingConvention", + "markdown": "Reports any constants whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating constant names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyConstantNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyConstantNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyParenthesesAroundConditionInspection", + "shortDescription": { + "text": "Conditional expression with parentheses" + }, + "fullDescription": { + "text": "Reports conditional expressions with parentheses inside 'if', 'elsif', 'unless', 'while', and 'until' statements. Inspired by 'Ruby Style Guide' Inspection ID: RubyParenthesesAroundConditionInspection", + "markdown": "Reports conditional expressions with parentheses inside `if`, `elsif`, `unless`, `while`, and `until` statements.\n\nInspired by ['Ruby Style Guide'](https://github.com/rubocop-hq/ruby-style-guide#no-parens-around-condition)\n\nInspection ID: RubyParenthesesAroundConditionInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyParenthesesAroundConditionInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Code style issues", + "index": 5, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RubyLocalVariableNamingConvention", + "shortDescription": { + "text": "Unconventional local variable name" + }, + "fullDescription": { + "text": "Reports local variables with names that are either too short, too long, or don't match the specified regular expression pattern. Use the Pattern field to specify the regular expression for validating local variable names. Use the Min length and Max length fields to specify the minimum and maximum length of a name respectively. Inspection ID: RubyLocalVariableNamingConvention", + "markdown": "Reports local variables with names that are either too short, too long, or don't match the specified regular expression pattern.\n\nUse the *Pattern* field to specify the regular expression for validating local variable names.\n\nUse the *Min length* and *Max length* fields to specify the minimum and maximum length of a name respectively.\n\nInspection ID: RubyLocalVariableNamingConvention" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RubyLocalVariableNamingConvention", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/Naming conventions", + "index": 23, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsUnusedTypeVariable", + "shortDescription": { + "text": "Unused type variable" + }, + "fullDescription": { + "text": "Reports container, method, and type alias type variables that are unused within the project. Container type variables are only checked if the container has exactly one declaration. A quick fix is available to remove the unused type variable. Example: '# Type variable 'A' of class 'Example' is unused\nclass Example[A]\nend' After the quick fix: 'class Example\nend' Inspection ID: RbsUnusedTypeVariable", + "markdown": "Reports container, method, and type alias type variables that are unused within the project.\n\nContainer type variables are only checked if the container has exactly one declaration.\n\nA quick fix is available to remove the unused type variable.\n\nExample:\n\n # Type variable 'A' of class 'Example' is unused\n class Example[A]\n end\n\nAfter the quick fix:\n\n class Example\n end\n\nInspection ID: RbsUnusedTypeVariable" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RbsUnusedTypeVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Data flow", + "index": 52, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RbsConflictingTypeVariableCount", + "shortDescription": { + "text": "Conflicting type variable count" + }, + "fullDescription": { + "text": "Reports conflicting partial container declarations due to a mismatch between the number of type variables. Declaring a partial container with a differing number of type variables is an error. Quick fixes are available to correct the number of type variables declared or navigate to the conflicting declaration. Example: '# Class 'Example' has 1 type variable which conflicts with other declarations\nclass Example[A]\nend\n\n# Class 'Example' has 2 type variables which conflicts with other declarations\nclass Example[Y, Z]\nend' After the quick fix: 'class Example[A, B]\nend\n\nclass Example[Y, Z]\nend' Inspection ID: RbsConflictingTypeVariableCount", + "markdown": "Reports conflicting partial container declarations due to a mismatch between the number of type variables. Declaring a partial container with a differing number of type variables is an error.\n\nQuick fixes are available to correct the number of type variables declared or navigate to the conflicting declaration.\n\nExample:\n\n # Class 'Example' has 1 type variable which conflicts with other declarations\n class Example[A]\n end\n\n # Class 'Example' has 2 type variables which conflicts with other declarations\n class Example[Y, Z]\n end\n\nAfter the quick fix:\n\n class Example[A, B]\n end\n\n class Example[Y, Z]\n end\n\nInspection ID: RbsConflictingTypeVariableCount" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "RbsConflictingTypeVariableCount", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "RBS/Probable bugs", + "index": 33, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YARDTagsInspection", + "shortDescription": { + "text": "Incorrect tag usage" + }, + "fullDescription": { + "text": "Reports duplicated '@param' tags and undefined parameters in '@param' YARD tags. Inspection ID: YARDTagsInspection", + "markdown": "Reports duplicated `@param` tags and undefined parameters in `@param` YARD tags.\n\nInspection ID: YARDTagsInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "YARDTagsInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Ruby/YARD", + "index": 53, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.plugins.postcss", + "version": "252.24448.0", + "rules": [ + { + "id": "PostCssCustomSelector", + "shortDescription": { + "text": "Invalid custom selector" + }, + "fullDescription": { + "text": "Reports a syntax error in PostCSS Custom Selector. Example: '@custom-selector :--heading h1, h2, h3;' Inspection ID: PostCssCustomSelector", + "markdown": "Reports a syntax error in [PostCSS Custom Selector](https://github.com/postcss/postcss-custom-selectors).\n\nExample:\n\n\n @custom-selector :--heading h1, h2, h3;\n\nInspection ID: PostCssCustomSelector" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssCustomSelector", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 6, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssUnresolvedModuleValueReference", + "shortDescription": { + "text": "Unresolved CSS module value" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a CSS Module Value ('@value' declaration). Example: '@value foo from unknown;' Inspection ID: PostCssUnresolvedModuleValueReference", + "markdown": "Reports an unresolved reference to a [CSS Module Value](https://github.com/css-modules/postcss-modules-values) (`@value` declaration).\n\nExample:\n\n\n @value foo from unknown;\n\nInspection ID: PostCssUnresolvedModuleValueReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssUnresolvedModuleValueReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 6, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssNesting", + "shortDescription": { + "text": "Invalid nested rule" + }, + "fullDescription": { + "text": "Reports a nested style rule whose syntax doesn't comply with the PostCSS Nested or the PostCSS Nesting specification. Example: '.phone {\n &_title {}\n}' Inspection ID: PostCssNesting", + "markdown": "Reports a nested style rule whose syntax doesn't comply with the [PostCSS Nested](https://github.com/postcss/postcss-nested) or the [PostCSS Nesting](https://github.com/csstools/postcss-nesting) specification.\n\nExample:\n\n\n .phone {\n &_title {}\n }\n\nInspection ID: PostCssNesting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PostCssNesting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 6, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssCustomMedia", + "shortDescription": { + "text": "Invalid custom media" + }, + "fullDescription": { + "text": "Reports a syntax error in a PostCSS Custom Media query. Example: '@custom-media --small-viewport (max-width: 30em);' Inspection ID: PostCssCustomMedia", + "markdown": "Reports a syntax error in a [PostCSS Custom Media](https://github.com/postcss/postcss-custom-media) query.\n\nExample:\n\n\n @custom-media --small-viewport (max-width: 30em);\n\nInspection ID: PostCssCustomMedia" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssCustomMedia", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 6, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostCssMediaRange", + "shortDescription": { + "text": "Invalid media query range" + }, + "fullDescription": { + "text": "Checks range context syntax, which may alternatively be used for media features with a 'range' type. Example: '@media screen and (500px <= width <= 1200px) {}' Inspection ID: PostCssMediaRange", + "markdown": "Checks [range context](https://github.com/postcss/postcss-media-minmax) syntax, which may alternatively be used for media features with a 'range' type.\n\nExample:\n\n\n @media screen and (500px <= width <= 1200px) {}\n\nInspection ID: PostCssMediaRange" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "PostCssMediaRange", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "PostCSS", + "index": 6, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.sass", + "version": "252.24448.0", + "rules": [ + { + "id": "SassScssUnresolvedMixin", + "shortDescription": { + "text": "Unresolved mixin" + }, + "fullDescription": { + "text": "Reports an unresolved Sass/SCSS mixin reference. Example: '* {\n @include unknown-mixin;\n}' Inspection ID: SassScssUnresolvedMixin", + "markdown": "Reports an unresolved [Sass/SCSS mixin](https://sass-lang.com/documentation/at-rules/mixin) reference.\n\n**Example:**\n\n\n * {\n @include unknown-mixin;\n }\n\nInspection ID: SassScssUnresolvedMixin" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SassScssUnresolvedMixin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 7, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SassScssResolvedByNameOnly", + "shortDescription": { + "text": "Missing import" + }, + "fullDescription": { + "text": "Reports a reference to a variable, mixin, or function that is declared in another file but this file isn't explicitly imported in the current file. Example: '* {\n margin: $var-in-other-file;\n}' Inspection ID: SassScssResolvedByNameOnly", + "markdown": "Reports a reference to a variable, mixin, or function that is declared in another file but this file isn't explicitly [imported](https://sass-lang.com/documentation/at-rules/import) in the current file.\n\n**Example:**\n\n\n * {\n margin: $var-in-other-file;\n }\n\nInspection ID: SassScssResolvedByNameOnly" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SassScssResolvedByNameOnly", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 7, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SassScssUnresolvedPlaceholderSelector", + "shortDescription": { + "text": "Unresolved placeholder selector" + }, + "fullDescription": { + "text": "Reports an unresolved Sass/SCSS placeholder selector reference. Example: '* {\n @extend %unknown-placeholder-selector;\n}' Inspection ID: SassScssUnresolvedPlaceholderSelector", + "markdown": "Reports an unresolved [Sass/SCSS placeholder selector](https://sass-lang.com/documentation/variables) reference.\n\n**Example:**\n\n\n * {\n @extend %unknown-placeholder-selector;\n }\n\nInspection ID: SassScssUnresolvedPlaceholderSelector" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SassScssUnresolvedPlaceholderSelector", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 7, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SassScssUnresolvedVariable", + "shortDescription": { + "text": "Unresolved variable" + }, + "fullDescription": { + "text": "Reports an unresolved Sass/SCSS variable reference. Example: '* {\n margin: $unknown-var;\n}' Inspection ID: SassScssUnresolvedVariable", + "markdown": "Reports an unresolved [Sass/SCSS variable](https://sass-lang.com/documentation/variables) reference.\n\n**Example:**\n\n\n * {\n margin: $unknown-var;\n }\n\nInspection ID: SassScssUnresolvedVariable" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SassScssUnresolvedVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Sass_SCSS", + "index": 7, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.jetbrains.sh", + "version": "252.24448.0", + "rules": [ + { + "id": "ShellCheck", + "shortDescription": { + "text": "ShellCheck" + }, + "fullDescription": { + "text": "Reports shell script bugs detected by the integrated ShellCheck static analysis tool. Inspection ID: ShellCheck", + "markdown": "Reports shell script bugs detected by the integrated [ShellCheck](https://github.com/koalaman/shellcheck) static analysis tool.\n\nInspection ID: ShellCheck" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "ShellCheck", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "Shell script", + "index": 8, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "Karma", + "version": "252.24448.0", + "rules": [ + { + "id": "KarmaConfigFile", + "shortDescription": { + "text": "Invalid Karma configuration file" + }, + "fullDescription": { + "text": "Reports a potential error in a file path ('basePath', 'files') for a Karma configuration file, for example, 'karma.conf.js'. Inspection ID: KarmaConfigFile", + "markdown": "Reports a potential error in a file path ('basePath', 'files') for a Karma configuration file, for example, `karma.conf.js`.\n\nInspection ID: KarmaConfigFile" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "KarmaConfigFile", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/Unit testing", + "index": 9, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.modules.json", + "version": "252.24448.0", + "rules": [ + { + "id": "JsonSchemaDeprecation", + "shortDescription": { + "text": "Deprecated JSON property" + }, + "fullDescription": { + "text": "Reports a deprecated property in a JSON file. Note that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'. Inspection ID: JsonSchemaDeprecation", + "markdown": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'.\n\nInspection ID: JsonSchemaDeprecation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "JsonSchemaDeprecation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 10, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaRefReference", + "shortDescription": { + "text": "Unresolved '$ref' and '$schema' references" + }, + "fullDescription": { + "text": "Reports an unresolved '$ref' or '$schema' path in a JSON schema. Inspection ID: JsonSchemaRefReference", + "markdown": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. \n\nInspection ID: JsonSchemaRefReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonSchemaRefReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 10, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Json5StandardCompliance", + "shortDescription": { + "text": "Compliance with JSON5 standard" + }, + "fullDescription": { + "text": "Reports inconsistency with the language specification in a JSON5 file. Inspection ID: Json5StandardCompliance", + "markdown": "Reports inconsistency with [the language specification](http://json5.org) in a JSON5 file.\n\nInspection ID: Json5StandardCompliance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Json5StandardCompliance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 10, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonDuplicatePropertyKeys", + "shortDescription": { + "text": "Duplicate keys in object literals" + }, + "fullDescription": { + "text": "Reports a duplicate key in an object literal. Inspection ID: JsonDuplicatePropertyKeys", + "markdown": "Reports a duplicate key in an object literal.\n\nInspection ID: JsonDuplicatePropertyKeys" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonDuplicatePropertyKeys", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 10, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaCompliance", + "shortDescription": { + "text": "Compliance with JSON schema" + }, + "fullDescription": { + "text": "Reports inconsistence between a JSON file and the JSON schema that is assigned to it. Inspection ID: JsonSchemaCompliance", + "markdown": "Reports inconsistence between a JSON file and the [JSON schema](https://json-schema.org) that is assigned to it. \n\nInspection ID: JsonSchemaCompliance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsonSchemaCompliance", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 10, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonStandardCompliance", + "shortDescription": { + "text": "Compliance with JSON standard" + }, + "fullDescription": { + "text": "Reports the following discrepancies of a JSON file with the language specification: A line or block comment (configurable). Multiple top-level values (expect for JSON Lines files, configurable for others). A trailing comma in an object or array (configurable). A single quoted string. A property key is a not a double quoted strings. A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable). Inspection ID: JsonStandardCompliance", + "markdown": "Reports the following discrepancies of a JSON file with [the language specification](https://tools.ietf.org/html/rfc7159):\n\n* A line or block comment (configurable).\n* Multiple top-level values (expect for JSON Lines files, configurable for others).\n* A trailing comma in an object or array (configurable).\n* A single quoted string.\n* A property key is a not a double quoted strings.\n* A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable).\n\nInspection ID: JsonStandardCompliance" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "JsonStandardCompliance", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 10, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.database", + "version": "252.24448.0", + "rules": [ + { + "id": "MongoJSSideEffectsInspection", + "shortDescription": { + "text": "Statement with side effects" + }, + "fullDescription": { + "text": "Reports statements that can cause side effects while the data source is in read-only mode. For more information about enabling read-only mode, see Enable read-only mode for a connection in the IDE documentation. The Disable read-only mode quick-fix turns off the read-only mode for the respective data source. Example: 'db.my_collection.insertOne()' Inspection ID: MongoJSSideEffectsInspection", + "markdown": "Reports statements that can cause side effects while the data source is in read-only mode.\n\nFor more information about enabling read-only mode, see\n[Enable\nread-only mode for a connection in the IDE documentation](https://www.jetbrains.com/help/datagrip/configuring-database-connections.html#enable-read-only-mode-for-a-connection).\n\nThe **Disable read-only mode** quick-fix turns off the read-only mode for the respective data source.\n\nExample:\n\n\n db.my_collection.insertOne()\n\nInspection ID: MongoJSSideEffectsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 11, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MysqlLoadDataPathInspection", + "shortDescription": { + "text": "LOAD statement path" + }, + "fullDescription": { + "text": "Reports paths that start with the tilde character in LOAD statements. Example (MySQL): 'CREATE TABLE table_name (id int);\nLOAD DATA LOCAL INFILE '~/Documents/some_file.txt'\nINTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n'\nIGNORE 1 LINES;' Instead of the tilde character, use a full path to the file. Inspection ID: MysqlLoadDataPathInspection", + "markdown": "Reports paths that start with the tilde character in LOAD statements.\n\nExample (MySQL):\n\n CREATE TABLE table_name (id int);\n LOAD DATA LOCAL INFILE '~/Documents/some_file.txt'\n INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n'\n IGNORE 1 LINES;\n\nInstead of the tilde character, use a full path to the file.\n\nInspection ID: MysqlLoadDataPathInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MysqlLoadDataPath", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "MySQL", + "index": 14, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSExtSideEffectsInspection", + "shortDescription": { + "text": "Statement with side effects" + }, + "fullDescription": { + "text": "Reports statements that may cause side effects while the data source is in read-only mode. The quick-fix turns off the read-only mode for the respective data source. Example: 'db.my_collection.insertOne()' Inspection ID: MongoJSExtSideEffectsInspection", + "markdown": "Reports statements that may cause side effects while the data source is in read-only mode.\n\nThe quick-fix turns off the read-only mode for the respective data source.\n\nExample:\n\n\n db.my_collection.insertOne()\n\nInspection ID: MongoJSExtSideEffectsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 11, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MysqlSpaceAfterFunctionNameInspection", + "shortDescription": { + "text": "Whitespace between the function name and the open parenthesis" + }, + "fullDescription": { + "text": "Reports any whitespace in a function call between the function name and the open parenthesis, which is not supported by default. Example (MySQL): 'SELECT MAX (qty) FROM orders;' Inspection ID: MysqlSpaceAfterFunctionNameInspection", + "markdown": "Reports any whitespace in a function call between the function name and the open parenthesis, which is not supported by default.\n\nExample (MySQL):\n\n SELECT MAX (qty) FROM orders;\n\nInspection ID: MysqlSpaceAfterFunctionNameInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MysqlSpaceAfterFunctionName", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "MySQL", + "index": 14, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlJoinCountInspection", + "shortDescription": { + "text": "Excessive JOIN count" + }, + "fullDescription": { + "text": "Reports queries with excessive number of JOINS. Using too many joins is generally not recommended for performance reasons. 'SELECT * FROM a inner join b using(id) inner join c using (id) inner join d using (id) inner join e using (id)' Inspection ID: SqlJoinCountInspection", + "markdown": "Reports queries with excessive number of JOINS.\n\nUsing too many joins is generally\nnot recommended for performance reasons.\n\n SELECT * FROM a inner join b using(id) inner join c using (id) inner join d using (id) inner join e using (id)\n\nInspection ID: SqlJoinCountInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlJoinCount", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMissingReturnInspection", + "shortDescription": { + "text": "Missing return statement" + }, + "fullDescription": { + "text": "Reports functions that have no RETURN statements. Example (Oracle): 'CREATE FUNCTION foo RETURN int AS\nBEGIN\nEND;' The 'foo' function must return the integer value but the function body returns nothing. To fix the error, add a RETURN statement (for example, 'return 1;'). 'CREATE FUNCTION foo RETURN int AS\nBEGIN\n RETURN 1;\nEND;' Inspection ID: SqlMissingReturnInspection", + "markdown": "Reports functions that have no RETURN statements.\n\nExample (Oracle):\n\n CREATE FUNCTION foo RETURN int AS\n BEGIN\n END;\n\nThe `foo` function must return the integer value but the function body returns nothing. To fix the error,\nadd a RETURN statement (for example, `return 1;`).\n\n CREATE FUNCTION foo RETURN int AS\n BEGIN\n RETURN 1;\n END;\n\nInspection ID: SqlMissingReturnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlMissingReturn", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnusedSubqueryItemInspection", + "shortDescription": { + "text": "Unused subquery item" + }, + "fullDescription": { + "text": "Reports columns, aliases, and other subquery items that are not referenced in the outer query expression. Example (PostgreSQL): 'CREATE TABLE for_subquery(id INT);\nSELECT a, q FROM (SELECT 1 AS a, 10 AS b, 2 + 3 AS q, id\n FROM for_subquery) x;' We reference 'a' and 'q' aliases from a subquery. But the 'b' alias and the 'id' column are not referenced in the outer SELECT statement. Therefore, 'b' and 'id' are grayed out. Inspection ID: SqlUnusedSubqueryItemInspection", + "markdown": "Reports columns, aliases, and other subquery items that are not referenced in the outer query expression.\n\nExample (PostgreSQL):\n\n CREATE TABLE for_subquery(id INT);\n SELECT a, q FROM (SELECT 1 AS a, 10 AS b, 2 + 3 AS q, id\n FROM for_subquery) x;\n\nWe reference `a` and `q` aliases from a subquery. But the `b` alias and the `id` column are\nnot referenced in the outer SELECT statement. Therefore, `b` and `id` are grayed out.\n\nInspection ID: SqlUnusedSubqueryItemInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCaseVsIfInspection", + "shortDescription": { + "text": "Using CASE instead of conditional function and vice versa" + }, + "fullDescription": { + "text": "Reports situations when CASE and IF are interchangeable. Example (MySQL): 'SELECT CASE\nWHEN C1 IS NULL THEN 1\nELSE 0\nEND\nFROM dual;' To keep your code short, you can replace the CASE structure with IF. You can do that by applying the Replace with 'IF' call intention action. The example code will look as follows: 'SELECT IF(C1 IS NULL, 1, 0)\nFROM dual;' To revert IF to CASE, click IF and apply the Replace with CASE expression intention action. Inspection ID: SqlCaseVsIfInspection", + "markdown": "Reports situations when CASE and IF are interchangeable.\n\nExample (MySQL):\n\n SELECT CASE\n WHEN C1 IS NULL THEN 1\n ELSE 0\n END\n FROM dual;\n\nTo keep your code short, you can replace the CASE structure with IF. You can do that by applying the **Replace with 'IF' call**\nintention action. The example code will look as follows:\n\n SELECT IF(C1 IS NULL, 1, 0)\n FROM dual;\n\nTo revert IF to CASE, click IF and apply the **Replace with CASE expression** intention action.\n\nInspection ID: SqlCaseVsIfInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCaseVsIf", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlShouldBeInGroupByInspection", + "shortDescription": { + "text": "Column should be in group by clause" + }, + "fullDescription": { + "text": "Reports columns that are not in the GROUP BY clause or inside an aggregate function call. Example (Microsoft SQL Server): 'CREATE TABLE t1 (a INT, b INT);\nSELECT a, b FROM t1 GROUP BY a;' If you run the SELECT query, you will receive an error because Microsoft SQL Server expects the 'b' column in GROUP BY or used inside an aggregate function. The following two examples will fix the error. 'SELECT a, b FROM t1 GROUP BY a, b;\nSELECT a, max(b) max_b FROM t1 GROUP BY a;' Inspection ID: SqlShouldBeInGroupByInspection", + "markdown": "Reports columns that are not in the GROUP BY clause or inside an aggregate function call.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE t1 (a INT, b INT);\n SELECT a, b FROM t1 GROUP BY a;\n\nIf you run the SELECT query, you will receive an error because Microsoft SQL Server expects the `b` column in GROUP BY or used\ninside an aggregate function. The following two examples will fix the error.\n\n SELECT a, b FROM t1 GROUP BY a, b;\n SELECT a, max(b) max_b FROM t1 GROUP BY a;\n\nInspection ID: SqlShouldBeInGroupByInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlShouldBeInGroupBy", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAutoIncrementDuplicateInspection", + "shortDescription": { + "text": "Auto-increment duplicate" + }, + "fullDescription": { + "text": "Reports tables that contain two columns with an automatic increment. In MySQL, Microsoft SQL Server, and Db2 dialects, a table can have only one field with a auto-increment option, and this field must be a key. Example (MySQL): 'CREATE TABLE my_table\n(\n id INT AUTO_INCREMENT,\n c2 INT AUTO_INCREMENT,\n);' The AUTO_INCREMENT constraint for 'c2' will be highlighted as 'c1' already has this constraint. To fix the warning, you can make 'id' a primary key and delete AUTO_INCREMENT for 'c2'. 'CREATE TABLE my_table\n(\n id INT AUTO_INCREMENT PRIMARY KEY,\n c2 INT,\n);' Inspection ID: SqlAutoIncrementDuplicateInspection", + "markdown": "Reports tables that contain two columns with an automatic increment. In MySQL, Microsoft SQL Server, and Db2 dialects, a table can have only one field with a auto-increment option, and this field must be a key.\n\nExample (MySQL):\n\n CREATE TABLE my_table\n (\n id INT AUTO_INCREMENT,\n c2 INT AUTO_INCREMENT,\n );\n\nThe AUTO_INCREMENT constraint for `c2` will be highlighted as `c1` already has this constraint. To fix the warning,\nyou can make `id` a primary key and delete AUTO_INCREMENT for `c2`.\n\n CREATE TABLE my_table\n (\n id INT AUTO_INCREMENT PRIMARY KEY,\n c2 INT,\n );\n\nInspection ID: SqlAutoIncrementDuplicateInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAutoIncrementDuplicate", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlStringLengthExceededInspection", + "shortDescription": { + "text": "Implicit string truncation" + }, + "fullDescription": { + "text": "Reports variables that exceed the defined length in characters. Example (Microsoft SQL Server): 'CREATE PROCEDURE test() AS\nBEGIN\nDECLARE myVarOk VARCHAR(5) = 'abcde';\nDECLARE myVarExceeded VARCHAR(5) = 'abcde12345';\n\nSET myVarOk = 'xyz';\nSET myVarExceeded = '123456789';\nEND;' The 'myVarExceeded' variable is defined as 'VARCHAR(5)' but both assigned values (''abcde12345'' and ''123456789'') exceed this limitation. You can truncate assigned values or increase the defined length. To increase the length, use the Increase type length quick-fix. After the quick-fix is applied: 'CREATE PROCEDURE test() AS\nBEGIN\nDECLARE myVarOk VARCHAR(5) = 'abcde';\nDECLARE myVarExceeded VARCHAR(10) = 'abcde12345';\n\nSET myVarOk = 'xyz';\nSET myVarExceeded = '123456789';\nEND;' Inspection ID: SqlStringLengthExceededInspection", + "markdown": "Reports variables that exceed the defined length in characters.\n\nExample (Microsoft SQL Server):\n\n CREATE PROCEDURE test() AS\n BEGIN\n DECLARE myVarOk VARCHAR(5) = 'abcde';\n DECLARE myVarExceeded VARCHAR(5) = 'abcde12345';\n\n SET myVarOk = 'xyz';\n SET myVarExceeded = '123456789';\n END;\n\nThe `myVarExceeded` variable is defined as `VARCHAR(5)` but both assigned values (`'abcde12345'` and\n`'123456789'`) exceed this limitation. You can truncate assigned values or increase the defined length.\nTo increase the length, use the **Increase type length** quick-fix.\n\nAfter the quick-fix is applied:\n\n CREATE PROCEDURE test() AS\n BEGIN\n DECLARE myVarOk VARCHAR(5) = 'abcde';\n DECLARE myVarExceeded VARCHAR(10) = 'abcde12345';\n\n SET myVarOk = 'xyz';\n SET myVarExceeded = '123456789';\n END;\n\nInspection ID: SqlStringLengthExceededInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlStringLengthExceeded", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlSideEffectsInspection", + "shortDescription": { + "text": "Statement with side effects" + }, + "fullDescription": { + "text": "Reports statements that might lead to modification of a database during a read-only connection. To enable read-only mode for a connection, right-click a data source in the Database tool window (View | Tool Windows | Database) and select Properties. In the Data Sources and Drivers dialog, click the Options tab and select the Read-only checkbox. Example (MySQL): 'CREATE TABLE foo(a INT);\nINSERT INTO foo VALUES (1);' As 'CREATE TABLE' and 'INSERT INTO' statements lead to a database modification, these statements will be highlighted in read-only connection mode. Inspection ID: SqlSideEffectsInspection", + "markdown": "Reports statements that might lead to modification of a database during a read-only connection.\n\nTo enable read-only mode for a\nconnection,\nright-click a data source in the **Database** tool window (**View \\| Tool Windows \\| Database** ) and select **Properties** .\nIn the **Data Sources and Drivers** dialog, click the **Options** tab and select the **Read-only** checkbox.\n\nExample (MySQL):\n\n CREATE TABLE foo(a INT);\n INSERT INTO foo VALUES (1);\n\nAs `CREATE TABLE` and `INSERT INTO` statements lead to a database modification, these statements will be highlighted\nin read-only connection mode.\n\nInspection ID: SqlSideEffectsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlSideEffects", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDtInspection", + "shortDescription": { + "text": "Ill-formed date/time literals" + }, + "fullDescription": { + "text": "Reports errors in date and time literals. This inspection is available in MySQL, Oracle, Db2, and H2. Example (MySQL): 'SELECT TIME '10 -12:13:14' FROM dual;\nSELECT TIME ' 12 : 13 : 14 ' FROM dual;\nSELECT TIME '12 13 14' FROM dual;\nSELECT TIME '12-13-14' FROM dual;\nSELECT TIME '12.13.14' FROM dual;\nSELECT TIME '12:13:' FROM dual;\nSELECT TIME '12:13' FROM dual;\nSELECT TIME '12:' FROM dual;' In this example, dates ignore the MySQL standard for date and time literals. Therefore, they will be highlighted. For more information about date and time literals in MySQL, see Date and Time Literals at dev.mysql.com. The following date and type literals are valid for MySQL. 'SELECT TIME '12:13:14' FROM dual;\nSELECT TIME '12:13:14.555' FROM dual;\nSELECT TIME '12:13:14.' FROM dual;\nSELECT TIME '-12:13:14' FROM dual;\nSELECT TIME '10 12:13:14' FROM dual;\nSELECT TIME '-10 12:13:14' FROM dual;' Inspection ID: SqlDtInspection", + "markdown": "Reports errors in date and time literals. This inspection is available in MySQL, Oracle, Db2, and H2.\n\nExample (MySQL):\n\n SELECT TIME '10 -12:13:14' FROM dual;\n SELECT TIME ' 12 : 13 : 14 ' FROM dual;\n SELECT TIME '12 13 14' FROM dual;\n SELECT TIME '12-13-14' FROM dual;\n SELECT TIME '12.13.14' FROM dual;\n SELECT TIME '12:13:' FROM dual;\n SELECT TIME '12:13' FROM dual;\n SELECT TIME '12:' FROM dual;\n\nIn this example, dates ignore the MySQL standard for date and time literals. Therefore, they will be highlighted.\nFor more information about date and time literals in MySQL, see [Date and Time Literals at dev.mysql.com](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html).\n\nThe following date and type literals are valid for MySQL.\n\n SELECT TIME '12:13:14' FROM dual;\n SELECT TIME '12:13:14.555' FROM dual;\n SELECT TIME '12:13:14.' FROM dual;\n SELECT TIME '-12:13:14' FROM dual;\n SELECT TIME '10 12:13:14' FROM dual;\n SELECT TIME '-10 12:13:14' FROM dual;\n\nInspection ID: SqlDtInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDateTime", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlIllegalCursorStateInspection", + "shortDescription": { + "text": "Illegal cursor state" + }, + "fullDescription": { + "text": "Reports illegal cursor states inside SQL routines. A routine has CLOSE or FETCH statements but a cursor might be closed. A routine has the OPEN statement but a cursor might be opened. Example (Microsoft SQL Server): 'CREATE TABLE t(col INT);\n\nCREATE PROCEDURE foo() AS\nBEGIN\nDECLARE my_cursor CURSOR FOR SELECT * FROM t;\nDECLARE a INT;\nFETCH my_cursor INTO a;\nCLOSE my_cursor;\nEND;' According to CLOSE (Transact-SQL) at docs.microsoft.com, CLOSE must be issued on an open cursor, and CLOSE is not allowed on cursors that have only been declared or are already closed. So, we need to open the cursor to fix the warning. 'CREATE PROCEDURE foo() AS\nBEGIN\nDECLARE my_cursor CURSOR FOR SELECT * FROM t;\nDECLARE a INT;\nOPEN my_cursor;\nFETCH my_cursor INTO a;\nCLOSE my_cursor;\nEND;' Inspection ID: SqlIllegalCursorStateInspection", + "markdown": "Reports illegal cursor states inside SQL routines.\n\n* A routine has CLOSE or FETCH statements but a cursor might be closed.\n* A routine has the OPEN statement but a cursor might be opened.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE t(col INT);\n\n CREATE PROCEDURE foo() AS\n BEGIN\n DECLARE my_cursor CURSOR FOR SELECT * FROM t;\n DECLARE a INT;\n FETCH my_cursor INTO a;\n CLOSE my_cursor;\n END;\n\nAccording to [CLOSE (Transact-SQL) at\ndocs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/close-transact-sql), CLOSE must be issued on an open cursor, and CLOSE is not allowed on cursors that have only been declared or are\nalready closed. So, we need to open the cursor to fix the warning.\n\n CREATE PROCEDURE foo() AS\n BEGIN\n DECLARE my_cursor CURSOR FOR SELECT * FROM t;\n DECLARE a INT;\n OPEN my_cursor;\n FETCH my_cursor INTO a;\n CLOSE my_cursor;\n END;\n\nInspection ID: SqlIllegalCursorStateInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlIllegalCursorState", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlJoinWithoutOnInspection", + "shortDescription": { + "text": "Unsafe 'join' clause in 'delete' statement" + }, + "fullDescription": { + "text": "Reports missing conditional checks for statements that might modify the whole database. For example, usages of JOIN clauses inside DELETE statements without ON or WHERE. Without conditional checks on JOIN, DELETE drops contents of the entire table. Example (MySQL): 'CREATE TABLE foo (a INT,b INT,c INT);\nCREATE TABLE bar (a INT,b INT,c INT);\n\nDELETE table1 FROM foo table1 INNER JOIN bar table2;' Inspection ID: SqlJoinWithoutOnInspection", + "markdown": "Reports missing conditional checks for statements that might modify the whole database.\n\nFor example, usages of JOIN clauses inside DELETE statements without ON or WHERE. Without conditional checks on JOIN, DELETE drops\ncontents of the entire table.\n\nExample (MySQL):\n\n CREATE TABLE foo (a INT,b INT,c INT);\n CREATE TABLE bar (a INT,b INT,c INT);\n\n DELETE table1 FROM foo table1 INNER JOIN bar table2;\n\nInspection ID: SqlJoinWithoutOnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlJoinWithoutOn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDropIndexedColumnInspection", + "shortDescription": { + "text": "Index is dependent on column" + }, + "fullDescription": { + "text": "Reports cases when you try to drop columns from indexed tables. This inspection is available in Microsoft SQL Server and Sybase ASE. Example (Microsoft SQL Server): 'CREATE TABLE test_index\n(\ncol INT NOT NULL,\ncol2 INT NOT NULL,\ncol3 INT NOT NULL UNIQUE,\ncol4 VARCHAR(200)\n);\n\nCREATE UNIQUE INDEX aaaa ON test_index (col, col2);\n\nALTER TABLE test_index\nDROP COLUMN col;' You cannot delete the 'col' column because it is in the indexed table. To delete the column, you need to delete the 'aaaa' index first (for example, DROP INDEX aaaa). Inspection ID: SqlDropIndexedColumnInspection", + "markdown": "Reports cases when you try to drop columns from indexed tables. This inspection is available in Microsoft SQL Server and Sybase ASE.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE test_index\n (\n col INT NOT NULL,\n col2 INT NOT NULL,\n col3 INT NOT NULL UNIQUE,\n col4 VARCHAR(200)\n );\n\n CREATE UNIQUE INDEX aaaa ON test_index (col, col2);\n\n ALTER TABLE test_index\n DROP COLUMN col;\n\nYou cannot delete the `col` column because it is in the indexed table. To delete the column, you need to delete the\n`aaaa` index first (for example, DROP INDEX aaaa).\n\nInspection ID: SqlDropIndexedColumnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDropIndexedColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCheckUsingColumnsInspection", + "shortDescription": { + "text": "Check using clause columns" + }, + "fullDescription": { + "text": "Reports columns in the USING clause that does not exist in both tables. Example (MySQL): 'CREATE TABLE t1 (i INT, j INT);\nCREATE TABLE t2 (k INT, l INT);\nSELECT * FROM t1 JOIN t2 USING (j);' In USING clauses, a column name must be present in both tables, and the SELECT query will automatically join those tables by using the given column name. As we do not have the 'j' column in 't2', we can rewrite the query using ON. The ON clause can join tables where the column names do not match in both tables. 'SELECT * FROM t1 JOIN t2 ON t1.j = t2.l;' Inspection ID: SqlCheckUsingColumnsInspection", + "markdown": "Reports columns in the USING clause that does not exist in both tables.\n\nExample (MySQL):\n\n CREATE TABLE t1 (i INT, j INT);\n CREATE TABLE t2 (k INT, l INT);\n SELECT * FROM t1 JOIN t2 USING (j);\n\nIn USING clauses, a column name must be present in both tables, and the SELECT query will automatically join\nthose tables by using the given column name. As we do not have the `j` column in `t2`, we can\nrewrite the query using ON. The ON clause can join tables where the column names do not match in both tables.\n\n SELECT * FROM t1 JOIN t2 ON t1.j = t2.l;\n\nInspection ID: SqlCheckUsingColumnsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCheckUsingColumns", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlInsertValuesInspection", + "shortDescription": { + "text": "VALUES clause cardinality" + }, + "fullDescription": { + "text": "Reports situations when a number of parameters in VALUES does not match a number of columns in a target table. Example (MySQL): 'CREATE TABLE foo(a INT, b INT, c INT);\n\nINSERT INTO foo VALUES (1,2,3,4)' The 'foo' table has three columns but in the INSERT INTO statement we pass four. Inspection ID: SqlInsertValuesInspection", + "markdown": "Reports situations when a number of parameters in VALUES does not match a number of columns in a target table.\n\nExample (MySQL):\n\n CREATE TABLE foo(a INT, b INT, c INT);\n\n INSERT INTO foo VALUES (1,2,3,4)\n\nThe `foo` table has three columns but in the INSERT INTO statement we pass four.\n\nInspection ID: SqlInsertValuesInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlInsertValues", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDialectInspection", + "shortDescription": { + "text": "SQL dialect detection" + }, + "fullDescription": { + "text": "Reports situations when a dialect is not assigned to an SQL file. For example, when you open a new SQL file without assigning a dialect to it, you see a notification where the best matching dialect is advised. Click the Use link to use the advised dialect. Alternatively, click the Change dialect to link to select the other dialect. Inspection ID: SqlDialectInspection", + "markdown": "Reports situations when a dialect is not assigned to an SQL file.\n\nFor example, when you open a new SQL file without assigning a dialect\nto it, you see a notification where the best matching dialect is advised. Click the **Use \\** link to use the advised\ndialect. Alternatively, click the **Change dialect to** link to select the other dialect.\n\nInspection ID: SqlDialectInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDialectInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantElseNullInspection", + "shortDescription": { + "text": "Redundant ELSE NULL clause" + }, + "fullDescription": { + "text": "Reports redundant ELSE NULL clauses. Example (MySQL): 'SELECT CASE WHEN 2 > 1 THEN 'OK' ELSE NULL END AS alias FROM foo;' The 'ELSE NULL' part will never be executed and may be omitted. Inspection ID: SqlRedundantElseNullInspection", + "markdown": "Reports redundant ELSE NULL clauses.\n\nExample (MySQL):\n\n SELECT CASE WHEN 2 > 1 THEN 'OK' ELSE NULL END AS alias FROM foo;\n\nThe `ELSE NULL` part will never be executed and may be omitted.\n\nInspection ID: SqlRedundantElseNullInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantElseNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MysqlParsingInspection", + "shortDescription": { + "text": "Unsupported syntax in pre-8.0 versions" + }, + "fullDescription": { + "text": "Reports invalid usages of UNION in queries. The inspection works in MySQL versions that are earlier than 8.0. Example (MySQL): 'SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;' Inspection ID: MysqlParsingInspection", + "markdown": "Reports invalid usages of UNION in queries.\n\nThe inspection works in MySQL versions that are earlier than 8.0.\n\nExample (MySQL):\n\n\n SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;\n\nInspection ID: MysqlParsingInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MysqlParsing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "MySQL", + "index": 14, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCallNotationInspection", + "shortDescription": { + "text": "Using of named and positional arguments" + }, + "fullDescription": { + "text": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2. Example (In PostgreSQL): 'CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n$$\nBEGIN\n RETURN a + b + c;\nEND\n$$;\nSELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\nSELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\nSELECT foo(b => 2, 1, 3);' Inspection ID: SqlCallNotationInspection", + "markdown": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2.\n\nExample (In PostgreSQL):\n\n CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n $$\n BEGIN\n RETURN a + b + c;\n END\n $$;\n SELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\n SELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\n SELECT foo(b => 2, 1, 3);\n\nInspection ID: SqlCallNotationInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlCallNotation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSExtDeprecationInspection", + "shortDescription": { + "text": "Deprecated element" + }, + "fullDescription": { + "text": "Reports usages of deprecated methods in MongoDB and JavaScript code. The quick-fix replaces deprecated methods with recommended alternatives. Example: 'db.my_collection.insert()' After the quick-fix is applied: 'db.my_collection.insertOne()' Inspection ID: MongoJSExtDeprecationInspection", + "markdown": "Reports usages of deprecated methods in MongoDB and JavaScript code.\n\nThe quick-fix replaces deprecated methods with recommended alternatives.\n\nExample:\n\n\n db.my_collection.insert()\n\nAfter the quick-fix is applied:\n\n\n db.my_collection.insertOne()\n\nInspection ID: MongoJSExtDeprecationInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSDeprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 11, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDuplicateColumnInspection", + "shortDescription": { + "text": "Duplicating column name in SELECT" + }, + "fullDescription": { + "text": "Reports duplicated names of column aliases in SELECT lists. Example (Sybase ASE): 'CREATE TABLE t1 (a TEXT, b INT, c INT);\n\nSELECT a AS x, b AS x FROM t1;' The 'x' alias name is used for 'a' and 'b' columns. These assignments are highlighted as errors because you cannot use identical alias names for columns in Sybase ASE. Inspection ID: SqlDuplicateColumnInspection", + "markdown": "Reports duplicated names of column aliases in SELECT lists.\n\nExample (Sybase ASE):\n\n CREATE TABLE t1 (a TEXT, b INT, c INT);\n\n SELECT a AS x, b AS x FROM t1;\n\nThe `x` alias name is used for `a` and `b` columns. These assignments are highlighted as errors because\nyou cannot use identical alias names for columns in Sybase ASE.\n\nInspection ID: SqlDuplicateColumnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDuplicateColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlShadowingAliasInspection", + "shortDescription": { + "text": "Column is shadowed by alias" + }, + "fullDescription": { + "text": "Reports SELECT aliases with names that match column names in the FROM clause. Example (MySQL): 'CREATE TABLE foo (a INT, b INT, c INT);\nSELECT a b, c FROM foo;' The 'a' column uses the 'b' alias but the 'b' name is also used by the column from the 'foo' table. Inspection ID: SqlShadowingAliasInspection", + "markdown": "Reports SELECT aliases with names that match column names in the FROM clause.\n\nExample (MySQL):\n\n CREATE TABLE foo (a INT, b INT, c INT);\n SELECT a b, c FROM foo;\n\nThe `a` column uses the `b` alias but the `b` name is also used by the column from the `foo`\ntable.\n\nInspection ID: SqlShadowingAliasInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlShadowingAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSDeprecationInspection", + "shortDescription": { + "text": "Deprecated element" + }, + "fullDescription": { + "text": "Reports usages of deprecated methods in MongoDB and JavaScript code. The quick-fix replaces deprecated methods with recommended alternatives. Example: 'db.my_collection.insert()' After the quick-fix is applied: 'db.my_collection.insertOne()' Inspection ID: MongoJSDeprecationInspection", + "markdown": "Reports usages of deprecated methods in MongoDB and JavaScript code.\n\nThe quick-fix replaces deprecated methods with recommended alternatives.\n\nExample:\n\n db.my_collection.insert()\n\nAfter the quick-fix is applied:\n\n db.my_collection.insertOne()\n\nInspection ID: MongoJSDeprecationInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSDeprecation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 11, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlTypeInspection", + "shortDescription": { + "text": "Types compatibility" + }, + "fullDescription": { + "text": "Reports type-related errors. Inspection ID: SqlTypeInspection", + "markdown": "Reports type-related errors.\n\nInspection ID: SqlTypeInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnreachableCodeInspection", + "shortDescription": { + "text": "Unreachable code" + }, + "fullDescription": { + "text": "Reports unreachable statements inside SQL routines. Example (Microsoft SQL Server): 'CREATE FUNCTION foo() RETURNS INT AS\nBEGIN\n THROW;\n RETURN 1;\nEND;' In Microsoft SQL Server, the 'THROW' statement raises an exception and transfers execution to the CATCH block of the TRY...CATCH construct. Therefore, the 'RETURN 1;' part will never be executed. Inspection ID: SqlUnreachableCodeInspection", + "markdown": "Reports unreachable statements inside SQL routines.\n\nExample (Microsoft SQL Server):\n\n CREATE FUNCTION foo() RETURNS INT AS\n BEGIN\n THROW;\n RETURN 1;\n END;\n\nIn Microsoft SQL Server, the `THROW` statement raises an exception and transfers execution to the CATCH block of the TRY...CATCH\nconstruct. Therefore, the `RETURN 1;` part will never be executed.\n\nInspection ID: SqlUnreachableCodeInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnreachable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnicodeStringLiteralInspection", + "shortDescription": { + "text": "Unicode usage in SQL" + }, + "fullDescription": { + "text": "Reports string literals that use national characters without the 'N' prefix. Without the N prefix, the string is converted to the default code page of the database. This default code page may not recognize certain characters. For more information, see nchar and nvarchar (Transact-SQL) at docs.microsoft.com. Example (Microsoft SQL Server): 'SELECT 'abcde' AS a;\nSELECT N'abcde' AS b;\nSELECT 'абвгд' AS c;\nSELECT N'абвгд' AS d;' The 'SELECT 'абвгд' AS c;' does not have the 'N' prefix, the ''абвгд'' part will be highlighted. Inspection ID: SqlUnicodeStringLiteralInspection", + "markdown": "Reports string literals that use national characters without the `N` prefix.\n\nWithout the N prefix, the string is converted to the default\ncode page of the database. This default code page may not recognize certain characters. For more information, see\n[nchar and nvarchar\n(Transact-SQL)\nat docs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql).\n\nExample (Microsoft SQL Server):\n\n SELECT 'abcde' AS a;\n SELECT N'abcde' AS b;\n SELECT 'абвгд' AS c;\n SELECT N'абвгд' AS d;\n\nThe `SELECT 'абвгд' AS c;` does not have the `N` prefix, the `'абвгд'` part will be highlighted.\n\nInspection ID: SqlUnicodeStringLiteralInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnicodeStringLiteral", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlSingleSessionModeInspection", + "shortDescription": { + "text": "Create a temporary table without a single session mode" + }, + "fullDescription": { + "text": "Reports temporary tables creation not in the single-session mode. Example (PostgreSQL): 'CREATE TEMPORARY TABLE foo(a INT, b INT);' Inspection ID: SqlSingleSessionModeInspection", + "markdown": "Reports temporary tables creation not in the single-session mode.\n\nExample (PostgreSQL):\n\n CREATE TEMPORARY TABLE foo(a INT, b INT);\n\nInspection ID: SqlSingleSessionModeInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlSingleSessionMode", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnusedVariableInspection", + "shortDescription": { + "text": "Unused variable" + }, + "fullDescription": { + "text": "Reports unused arguments, variables, or parameters. Example (PostgreSQL): 'CREATE FUNCTION foo(PARAMUSED INT, PARAMUNUSED INT) RETURNS INT AS\n$$\nBEGIN\n RETURN PARAMUSED;\nEND\n$$ LANGUAGE plpgsql;' The 'PARAMUNUSED' parameter is not used in the function and might be deleted. Inspection ID: SqlUnusedVariableInspection", + "markdown": "Reports unused arguments, variables, or parameters.\n\nExample (PostgreSQL):\n\n CREATE FUNCTION foo(PARAMUSED INT, PARAMUNUSED INT) RETURNS INT AS\n $$\n BEGIN\n RETURN PARAMUSED;\n END\n $$ LANGUAGE plpgsql;\n\nThe `PARAMUNUSED` parameter is not used in the function and might be deleted.\n\nInspection ID: SqlUnusedVariableInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnused", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlNoDataSourceInspection", + "shortDescription": { + "text": "No data sources configured" + }, + "fullDescription": { + "text": "Reports the absence of data sources in the Database tool window (View | Tool Windows | Database). Inspection ID: SqlNoDataSourceInspection", + "markdown": "Reports the absence of data sources in the **Database** tool window (**View \\| Tool Windows \\| Database** ).\n\nInspection ID: SqlNoDataSourceInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlNoDataSourceInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlResolveInspection", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports unresolved SQL references. Example (MySQL): 'CREATE TABLE users(id INT, name VARCHAR(40));\nCREATE TABLE admins(id INT, col1 INT);\n\nSELECT users.id, admins.id FROM admins WHERE admins.id > 1;' The 'users.id' column is unresolved because the 'users' table is missing in the FROM clause. Inspection ID: SqlResolveInspection", + "markdown": "Reports unresolved SQL references.\n\nExample (MySQL):\n\n CREATE TABLE users(id INT, name VARCHAR(40));\n CREATE TABLE admins(id INT, col1 INT);\n\n SELECT users.id, admins.id FROM admins WHERE admins.id > 1;\n\nThe `users.id` column is unresolved because the `users` table is missing in the FROM clause.\n\nInspection ID: SqlResolveInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlResolve", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PgSelectFromProcedureInspection", + "shortDescription": { + "text": "Postgres: Select from procedure call" + }, + "fullDescription": { + "text": "Reports situations when you make SELECT from a function or a DBLINK without an alias with a type (for example, 'AS t1(s VARCHAR)'). This requirement does not apply to scalar functions. Example (PostgreSQL): 'CREATE FUNCTION produce_a_table() RETURNS RECORD AS $$\nSELECT 1;\n$$ LANGUAGE sql;\nSELECT * FROM produce_a_table() AS s (c1 INT);\nSELECT * FROM produce_a_table() AS s (c1);\nSELECT * FROM DBLINK('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc') AS t1;' The 'AS s (c1 INT)' has a typed alias, while 'AS s (c1)' and 'AS t1' do not. In this case, the second call of 'produce_a_table()' and 'DBLINK()' will be highlighted. Inspection ID: PgSelectFromProcedureInspection", + "markdown": "Reports situations when you make SELECT from a function or a DBLINK without an alias with a type (for example, `AS t1(s VARCHAR)`).\n\nThis requirement does not apply to scalar functions.\n\nExample (PostgreSQL):\n\n CREATE FUNCTION produce_a_table() RETURNS RECORD AS $$\n SELECT 1;\n $$ LANGUAGE sql;\n SELECT * FROM produce_a_table() AS s (c1 INT);\n SELECT * FROM produce_a_table() AS s (c1);\n SELECT * FROM DBLINK('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc') AS t1;\n\nThe `AS s (c1 INT)` has a typed alias, while `AS s (c1)` and `AS t1` do not.\nIn this case, the second call of `produce_a_table()` and `DBLINK()` will be highlighted.\n\nInspection ID: PgSelectFromProcedureInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "PgSelectFromProcedure", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "PostgreSQL", + "index": 72, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCurrentSchemaInspection", + "shortDescription": { + "text": "Current console schema introspected" + }, + "fullDescription": { + "text": "Reports schemas and databases in the current session that are not introspected. For example, this warning might occur when you try to create a table in the schema that is not introspected. Introspection is a method of inspecting a data source. When you perform introspection, structural information in the data source is inspected to detect tables, columns, functions, and other elements with their attributes. Inspection ID: SqlCurrentSchemaInspection", + "markdown": "Reports schemas and databases in the current session that are not introspected.\n\nFor example, this warning might occur when you try to create a table in the schema that is not introspected.\n\nIntrospection is a method of inspecting a data source. When you perform introspection, structural information in the data source is\ninspected to detect tables, columns, functions, and other elements with their attributes.\n\nInspection ID: SqlCurrentSchemaInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCurrentSchemaInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMisleadingReferenceInspection", + "shortDescription": { + "text": "Misleading references" + }, + "fullDescription": { + "text": "Reports ambiguous references in SQL code. For example, when a name refer to both a table column and a routine parameter. The execution of such code might lead to errors or unexpected results due to counter-intuitive resolution logic. Usually, names with a more local scope have higher priority. Example (PostgreSQL): 'CREATE TABLE foo\n(\n id INT,\n name VARCHAR(5)\n);\nCREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n$$\nDECLARE\n b INT;\nBEGIN\n -- `name` is ambiguous as it is used as a column name and a parameter\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\nEND;\n$$ LANGUAGE plpgsql;' In PostgreSQL, you can use the '#variable_conflict' directives to explicitly specify a correct reference. For example, use '#variable_conflict use_column' to refer to a column name, or '#variable_conflict use_variable' to refer to a parameter. 'CREATE TABLE foo\n(\n id INT,\n name VARCHAR(5)\n);\nCREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n$$\n #variable_conflict use_column\nDECLARE\n b INT;\nBEGIN\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\nEND;\n$$ LANGUAGE plpgsql;' Inspection ID: SqlMisleadingReferenceInspection", + "markdown": "Reports ambiguous references in SQL code.\n\nFor example, when a name refer to both a table column and a routine parameter. The execution of such code might lead to errors or unexpected\nresults due to counter-intuitive resolution logic. Usually, names with a more local scope have higher priority.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo\n (\n id INT,\n name VARCHAR(5)\n );\n CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n $$\n DECLARE\n b INT;\n BEGIN\n -- `name` is ambiguous as it is used as a column name and a parameter\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\n END;\n $$ LANGUAGE plpgsql;\n\nIn PostgreSQL, you can use the `#variable_conflict` directives to explicitly specify a correct reference. For example,\nuse `#variable_conflict use_column` to refer to a column name, or `#variable_conflict use_variable` to refer to a\nparameter.\n\n CREATE TABLE foo\n (\n id INT,\n name VARCHAR(5)\n );\n CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS\n $$\n #variable_conflict use_column\n DECLARE\n b INT;\n BEGIN\n SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;\n RETURN b;\n END;\n $$ LANGUAGE plpgsql;\n\nInspection ID: SqlMisleadingReferenceInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMisleadingReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlInsertIntoGeneratedColumnInspection", + "shortDescription": { + "text": "Insertion into generated columns" + }, + "fullDescription": { + "text": "Reports INSERT statements that assign values to generated columns. Generated columns can be read, but their values can not be directly written. Example (PostgreSQL): 'CREATE TABLE foo\n(\n col1 INT,\n col2 INT GENERATED ALWAYS AS (col1 + 1) STORED\n);\nINSERT INTO foo(col1, col2) VALUES (1, 2);'\n You cannot insert '2' into the 'col2' column because this column is generated. For this script to work, you can change '2' to DEFAULT. 'INSERT INTO foo(col1, col2) VALUES (1, DEFAULT);' Inspection ID: SqlInsertIntoGeneratedColumnInspection", + "markdown": "Reports INSERT statements that assign values to generated columns. Generated columns can be read, but their values can not be directly written.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo\n (\n col1 INT,\n col2 INT GENERATED ALWAYS AS (col1 + 1) STORED\n );\n INSERT INTO foo(col1, col2) VALUES (1, 2);\n\nYou cannot insert `2` into the `col2` column because this column is generated.\nFor this script to work, you can change `2` to DEFAULT.\n`INSERT INTO foo(col1, col2) VALUES (1, DEFAULT);`\n\nInspection ID: SqlInsertIntoGeneratedColumnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlInsertIntoGeneratedColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantLimitInspection", + "shortDescription": { + "text": "Redundant row limiting in queries" + }, + "fullDescription": { + "text": "Reports redundant row limiting clauses like FETCH and LIMIT in queries. Example (PostgreSQL): 'CREATE TABLE foo(a INT);\n\nSELECT * FROM foo WHERE EXISTS(SELECT * FROM foo LIMIT 2);\nSELECT * FROM foo WHERE EXISTS(SELECT * FROM foo FETCH FIRST 2 ROWS ONLY);' To fix the warning, you can add OFFSET to limiting clauses. If OFFSET is missing, then LIMIT is redundant because the usage of LIMIT does not influence the operation result of EXISTS. In case with OFFSET, we skip first 'N' rows and this will influence the output. 'SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW LIMIT 2);\nSELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW FETCH FIRST 2 ROWS ONLY);' Inspection ID: SqlRedundantLimitInspection", + "markdown": "Reports redundant row limiting clauses like FETCH and LIMIT in queries.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT);\n\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo LIMIT 2);\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo FETCH FIRST 2 ROWS ONLY);\n\nTo fix the warning, you can add OFFSET to limiting clauses. If OFFSET is missing, then LIMIT is redundant because\nthe usage of LIMIT does not influence the operation result of EXISTS. In case with OFFSET, we skip first `N` rows and this will\ninfluence the output.\n\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW LIMIT 2);\n SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW FETCH FIRST 2 ROWS ONLY);\n\nInspection ID: SqlRedundantLimitInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantLimit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlInsertNullIntoNotNullInspection", + "shortDescription": { + "text": "Insert NULL into NOT NULL column" + }, + "fullDescription": { + "text": "Reports cases when you insert NULL values into columns that accept only NOT NULL values. Example (Microsoft SQL Server): 'CREATE TABLE br2 (\nid INT NOT NULL,\ncol1 NVARCHAR (20) NOT NULL,\ncol2 NVARCHAR (20) NOT NULL,\n);\n--\nINSERT INTO br2 (id, col1, col2)\nVALUES (1, NULL, NULL);' You cannot insert NULL values in 'col1' and 'col2' because they are defined as NOT NULL. If you run the script as is, you will receive an error. To fix this code, replace NULL in the VALUES part with some values (for example, '42' and ''bird''). INSERT INTO br2 (id, col1, col2)\nVALUES (1, 42, 'bird'); Inspection ID: SqlInsertNullIntoNotNullInspection", + "markdown": "Reports cases when you insert NULL values into columns that accept only NOT NULL values.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE br2 (\n id INT NOT NULL,\n col1 NVARCHAR (20) NOT NULL,\n col2 NVARCHAR (20) NOT NULL,\n );\n --\n INSERT INTO br2 (id, col1, col2)\n VALUES (1, NULL, NULL);\n\nYou cannot insert NULL values in `col1` and `col2` because they are defined as NOT NULL. If you run the script as\nis,\nyou will receive an error. To fix this code, replace NULL in the VALUES part with some values (for example, `42` and\n`'bird'`).\n\n```\nINSERT INTO br2 (id, col1, col2)\nVALUES (1, 42, 'bird');\n```\n\nInspection ID: SqlInsertNullIntoNotNullInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlInsertNullIntoNotNull", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDerivedTableAliasInspection", + "shortDescription": { + "text": "Each derived table should have alias" + }, + "fullDescription": { + "text": "Reports derived tables without aliases. Example (MySQL): 'CREATE TABLE table1 (id INT, name VARCHAR(20), cats FLOAT);\nCREATE TABLE table2 (id INT, age INTEGER);\n\nSELECT id AS ID, name, cats, age\nFROM (SELECT table1.id, name, cats, age\nFROM table1\nJOIN table2 ON table1.id = table2.id);' According to Derived Tables at dev.mysql.com, an alias is mandatory. You can add the alias by using the Introduce alias quick-fix. After the quick-fix is applied: 'SELECT id AS ID, name, cats, age\nFROM (SELECT table1.id, name, cats, age\nFROM table1\nJOIN table2 ON table1.id = table2.id);' Inspection ID: SqlDerivedTableAliasInspection", + "markdown": "Reports derived tables without aliases.\n\nExample (MySQL):\n\n CREATE TABLE table1 (id INT, name VARCHAR(20), cats FLOAT);\n CREATE TABLE table2 (id INT, age INTEGER);\n\n SELECT id AS ID, name, cats, age\n FROM (SELECT table1.id, name, cats, age\n FROM table1\n JOIN table2 ON table1.id = table2.id);\n\nAccording to [Derived Tables at dev.mysql.com](https://dev.mysql.com/doc/refman/8.0/en/derived-tables.html), an alias is\nmandatory. You can add the alias by using the **Introduce alias** quick-fix.\n\nAfter the quick-fix is applied:\n\n SELECT id AS ID, name, cats, age\n FROM (SELECT table1.id, name, cats, age\n FROM table1\n JOIN table2 ON table1.id = table2.id);\n\nInspection ID: SqlDerivedTableAliasInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDerivedTableAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MsBuiltinInspection", + "shortDescription": { + "text": "Builtin functions" + }, + "fullDescription": { + "text": "Reports truncations of string arguments in ISNULL functions. The ISNULL syntax is 'ISNULL(check_expression, replacement_value)'. According to ISNULL at docs.microsoft.com, 'replacement_value' will be truncated if 'replacement_value' is longer than 'check_expression'. Example (Microsoft SQL Server): 'DECLARE @name1 VARCHAR(2) = NULL;\nDECLARE @name2 VARCHAR(10) = 'Example';\nDECLARE @name3 VARCHAR(2) = 'Hi';\n\n -- `@name2` is VARCHAR(10) and will be truncated\nSELECT ISNULL(@name1, @name2);\n\n -- `@name3` is VARCHAR(2) as `@name1` and will not be truncated\nSELECT ISNULL(@name1, @name3);' Inspection ID: MsBuiltinInspection", + "markdown": "Reports truncations of string arguments in ISNULL functions.\n\nThe ISNULL syntax is `ISNULL(check_expression, replacement_value)`.\n\nAccording to [ISNULL at\ndocs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql), `replacement_value` will be truncated if `replacement_value` is longer than\n`check_expression`.\n\nExample (Microsoft SQL Server):\n\n DECLARE @name1 VARCHAR(2) = NULL;\n DECLARE @name2 VARCHAR(10) = 'Example';\n DECLARE @name3 VARCHAR(2) = 'Hi';\n\n -- `@name2` is VARCHAR(10) and will be truncated\n SELECT ISNULL(@name1, @name2);\n\n -- `@name3` is VARCHAR(2) as `@name1` and will not be truncated\n SELECT ISNULL(@name1, @name3);\n\nInspection ID: MsBuiltinInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MssqlBuiltin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL server", + "index": 74, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlTriggerTransitionInspection", + "shortDescription": { + "text": "Suspicious code in triggers" + }, + "fullDescription": { + "text": "Reports incorrect usages of transition table variables in triggers. Example (HSQLDB): 'CREATE TABLE foo(a INT);\n\nCREATE TRIGGER trg\n AFTER DELETE ON foo\nBEGIN\n SELECT * FROM NEW;\nEND;\n\nCREATE TRIGGER trig AFTER INSERT ON foo\n REFERENCING OLD ROW AS newrow\n FOR EACH ROW WHEN (a > 1)\n INSERT INTO foo VALUES (1)' In HSQLDB, DELETE triggers may be used only with the OLD state while INSERT triggers may have only the NEW state. So, in the previous example, NEW in 'SELECT * FROM NEW;' will be highlighted as well as OLD in 'REFERENCING OLD ROW AS newrow'. Inspection ID: SqlTriggerTransitionInspection", + "markdown": "Reports incorrect usages of transition table variables in triggers.\n\nExample (HSQLDB):\n\n CREATE TABLE foo(a INT);\n\n CREATE TRIGGER trg\n AFTER DELETE ON foo\n BEGIN\n SELECT * FROM NEW;\n END;\n\n CREATE TRIGGER trig AFTER INSERT ON foo\n REFERENCING OLD ROW AS newrow\n FOR EACH ROW WHEN (a > 1)\n INSERT INTO foo VALUES (1)\n\nIn HSQLDB, DELETE triggers may be used only with the OLD state while INSERT triggers may have only the NEW state. So, in the previous\nexample, NEW in `SELECT * FROM NEW;` will be highlighted as well as OLD in `REFERENCING OLD ROW AS newrow`.\n\nInspection ID: SqlTriggerTransitionInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlTriggerTransition", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlNamedArgumentsInspection", + "shortDescription": { + "text": "Named arguments should be used" + }, + "fullDescription": { + "text": "Reports arguments that are used without names in routine calls. By default, this inspection is disabled. For more information about the difference between named and unnamed parameters, see Binding Parameters by Name (Named Parameters) at docs.microsoft.com . Example (Microsoft SQL Server): 'CREATE FUNCTION foo(n INT, m INT) RETURNS INT AS\nBEGIN\n RETURN n + m;\nEND;\n\nCREATE PROCEDURE test AS\nBEGIN\n foo n = 1, m = 2;\n\n--- The following call misses parameter names and will be highlighted\n foo 1, 2;\nEND;' Parameters '1, 2' in the 'foo 1, 2;' call are highlighted because they miss names. Inspection ID: SqlNamedArgumentsInspection", + "markdown": "Reports arguments that are used without names in routine calls. By default, this inspection is disabled.\n\nFor more information about the difference between named and unnamed parameters, see [Binding Parameters by Name (Named Parameters) at docs.microsoft.com](https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/binding-parameters-by-name-named-parameters).\n\nExample (Microsoft SQL Server):\n\n CREATE FUNCTION foo(n INT, m INT) RETURNS INT AS\n BEGIN\n RETURN n + m;\n END;\n\n CREATE PROCEDURE test AS\n BEGIN\n foo n = 1, m = 2;\n\n --- The following call misses parameter names and will be highlighted\n foo 1, 2;\n END;\n\nParameters `1, 2` in the `foo 1, 2;` call are highlighted because they miss names.\n\nInspection ID: SqlNamedArgumentsInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlNamedArguments", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMultipleLimitClausesInspection", + "shortDescription": { + "text": "Multiple row limiting/offset clauses in queries" + }, + "fullDescription": { + "text": "Reports usages of multiple row limiting clauses in a single query. Example (Microsoft SQL Server): 'create table foo(a int);\nselect top 1 * from foo order by a offset 10 rows fetch next 20 rows only;' The SELECT TOP clause is used to specify that only 1 record must be returned. The FETCH clause specifies the number of rows to return after the OFFSET clause has been processed. But as we already have the SELECT TOP limiting clause, the FETCH clause might be redundant. Inspection ID: SqlMultipleLimitClausesInspection", + "markdown": "Reports usages of multiple row limiting clauses in a single query.\n\nExample (Microsoft SQL Server):\n\n create table foo(a int);\n select top 1 * from foo order by a offset 10 rows fetch next 20 rows only;\n\nThe SELECT TOP clause is used to specify that only 1 record must be\nreturned. The FETCH clause specifies the number of rows to return after the OFFSET\nclause has been processed. But as we already have the SELECT TOP limiting clause, the FETCH clause might be redundant.\n\nInspection ID: SqlMultipleLimitClausesInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMultipleLimitClauses", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlCaseVsCoalesceInspection", + "shortDescription": { + "text": "Using CASE instead of COALESCE function and vice versa" + }, + "fullDescription": { + "text": "Reports situations when CASE and COALESCE calls are interchangeable. This inspection has the following intention actions: Replace with 'COALESCE' call and the opposite one Replace with CASE expression. Example (MySQL): 'SELECT\n -- this CASE may be replaced by COALESCE\n\tCASE\n\t\tWHEN C1 IS NOT NULL THEN C1\n\t\tELSE 0\n\t\tEND\nFROM dual;' In the example, the CASE statement can be replaced with 'SELECT COALESCE(C1, 0)' that produces the same output. If you prefer using CASE expressions, select the Prefer CASE expressions over COALESCE function option on the inspection page. Inspection ID: SqlCaseVsCoalesceInspection", + "markdown": "Reports situations when CASE and COALESCE calls are interchangeable. This inspection has the following intention actions: **Replace\nwith 'COALESCE' call** and the opposite one **Replace with CASE expression** .\n\nExample (MySQL):\n\n SELECT\n -- this CASE may be replaced by COALESCE\n \tCASE\n \t\tWHEN C1 IS NOT NULL THEN C1\n \t\tELSE 0\n \t\tEND\n FROM dual;\n\nIn the example, the CASE statement can be replaced with `SELECT COALESCE(C1, 0)` that produces the same output.\n\nIf you prefer using CASE expressions, select the **Prefer CASE expressions over COALESCE function** option on\nthe inspection page.\n\nInspection ID: SqlCaseVsCoalesceInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlCaseVsCoalesce", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantAliasInspection", + "shortDescription": { + "text": "Redundant alias expressions" + }, + "fullDescription": { + "text": "Reports alias expressions that duplicate names of columns in tables and might be redundant. Example (PostgreSQL): 'CREATE TABLE foo(a INT, b INT);\n\nSELECT * FROM foo foo(a, b);\nSELECT * FROM foo foo(a);\nSELECT * FROM foo foo(x);\nSELECT * FROM foo foo(x, y);' The first two aliases use the same column names as in the 'foo' table. They are considered redundant because they column names are identical. Inspection ID: SqlRedundantAliasInspection", + "markdown": "Reports alias expressions that duplicate names of columns in tables and might be redundant.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT, b INT);\n\n SELECT * FROM foo foo(a, b);\n SELECT * FROM foo foo(a);\n SELECT * FROM foo foo(x);\n SELECT * FROM foo foo(x, y);\n\nThe first two aliases use the same column names as in the `foo` table. They are considered redundant because they\ncolumn names are identical.\n\nInspection ID: SqlRedundantAliasInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantAlias", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlIdentifierInspection", + "shortDescription": { + "text": "Identifier should be quoted" + }, + "fullDescription": { + "text": "Reports situations when you use SQL reserved keywords as identifier names in your query. Example (Microsoft SQL Server): 'CREATE TABLE select (identity INT IDENTITY NOT NULL, order INT NOT NULL);' We use 'select', 'identity', and 'order' as table and column names. But they are also reserved keywords in Microsoft SQL Server. Therefore, in order to use them as object names in the query, you must quote these identifiers. To quote them, you can use the Quote identifier quick-fix. After the quick-fix is applied: 'CREATE TABLE [select] ([identity] INT IDENTITY NOT NULL, [order] INT NOT NULL);' Inspection ID: SqlIdentifierInspection", + "markdown": "Reports situations when you use SQL reserved keywords as identifier names in your query.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE select (identity INT IDENTITY NOT NULL, order INT NOT NULL);\n\nWe use `select`, `identity`, and `order` as table and column names.\nBut they are also reserved keywords in Microsoft SQL Server.\nTherefore, in order to use them as object names in the query, you must quote these identifiers. To quote them, you can use the\n**Quote identifier** quick-fix.\n\nAfter the quick-fix is applied:\n\n CREATE TABLE [select] ([identity] INT IDENTITY NOT NULL, [order] INT NOT NULL);\n\nInspection ID: SqlIdentifierInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlIdentifier", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlTransactionStatementInTriggerInspection", + "shortDescription": { + "text": "Use of transaction management statements in triggers" + }, + "fullDescription": { + "text": "Reports usages of transaction management statements like COMMIT or ROLLBACK in trigger bodies. With COMMIT or ROLLBACK statements in a trigger body, the trigger will not compile. The fail happens because triggers start during transactions. When the trigger starts the current transaction is still not complete. As COMMIT terminates a transaction, both statements (COMMIT and ROLLBACK) would lead to an exception. Changes that are executed in a trigger should be committed (or rolled back) by the owning transaction that started the trigger. Example (Oracle): 'CREATE TABLE employee_audit\n(\n id INT NOT NULL,\n update_date DATE NOT NULL,\n old_name VARCHAR2(100),\n new_name VARCHAR2(100)\n);\n\nCREATE TABLE employees\n(\n id INT NOT NULL,\n name VARCHAR2(100) NOT NULL\n);\n\nCREATE OR REPLACE TRIGGER trig_commit\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\nBEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n COMMIT;\nEND;\n\nCREATE OR REPLACE TRIGGER trig_rollback\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\nBEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n ROLLBACK;\nEND;' Inspection ID: SqlTransactionStatementInTriggerInspection", + "markdown": "Reports usages of transaction management statements like COMMIT or ROLLBACK in trigger bodies.\n\nWith COMMIT or ROLLBACK statements in a trigger body, the trigger will not compile.\nThe fail happens because triggers start during transactions. When the trigger starts the current transaction is still not complete. As\nCOMMIT\nterminates a transaction, both statements (COMMIT and ROLLBACK) would lead to an exception.\nChanges that are executed in a trigger should be committed (or rolled back) by the owning transaction that started the trigger.\n\nExample (Oracle):\n\n CREATE TABLE employee_audit\n (\n id INT NOT NULL,\n update_date DATE NOT NULL,\n old_name VARCHAR2(100),\n new_name VARCHAR2(100)\n );\n\n CREATE TABLE employees\n (\n id INT NOT NULL,\n name VARCHAR2(100) NOT NULL\n );\n\n CREATE OR REPLACE TRIGGER trig_commit\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\n BEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n COMMIT;\n END;\n\n CREATE OR REPLACE TRIGGER trig_rollback\n AFTER UPDATE OF name\n ON employees\n FOR EACH ROW\n BEGIN\n INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);\n ROLLBACK;\n END;\n\nInspection ID: SqlTransactionStatementInTriggerInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlTransactionStatementInTrigger", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantCodeInCoalesceInspection", + "shortDescription": { + "text": "Redundant code in COALESCE call" + }, + "fullDescription": { + "text": "Reports all the arguments except for the first expression that does not evaluate to NULL in COALESCE functions. Example (MySQL): 'SELECT COALESCE(NULL, NULL, NULL, 42, NULL, 'string') as a;' The first NOT NULL argument is '42', all other arguments will be grayed out. Inspection ID: SqlRedundantCodeInCoalesceInspection", + "markdown": "Reports all the arguments except for the first expression that does not evaluate to NULL in COALESCE functions.\n\nExample (MySQL):\n\n SELECT COALESCE(NULL, NULL, NULL, 42, NULL, 'string') as a;\n\nThe first NOT NULL argument is `42`, all other arguments will be grayed out.\n\nInspection ID: SqlRedundantCodeInCoalesceInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantCodeInCoalesce", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlStorageInspection", + "shortDescription": { + "text": "SQL source modification detection" + }, + "fullDescription": { + "text": "Reports situations when source code of a database object has been changed. The inspection is triggered when you perform database or object introspection. The introspection is run when you open source code of an object, run statements, and perform code refactoring. Also, you can run introspection by right-clicking an object and selecting Refresh. The inspection covers the following situations: Object source code was changed in the database but code in the editor was not updated. Works in PostgreSQL, Microsoft SQL Server, Oracle, and Sybase ASE. You changed the object source code, introspected the database, but source code has been already changed by someone else. The database introspector was updated in the IDE and you need to download new object properties that were missing in the previous introspector version. Inspection ID: SqlStorageInspection", + "markdown": "Reports situations when source code of a database object has been changed.\n\nThe inspection is triggered when you perform database or object introspection. The introspection is run when you open source code of an\nobject, run statements, and perform code refactoring.\nAlso, you can run introspection by right-clicking an object and selecting **Refresh**.\n\nThe inspection covers the following situations:\n\n* Object source code was changed in the database but code in the editor was not updated. Works in PostgreSQL, Microsoft SQL Server, Oracle, and Sybase ASE.\n* You changed the object source code, introspected the database, but source code has been already changed by someone else.\n* The database introspector was updated in the IDE and you need to download new object properties that were missing in the previous introspector version.\n\nInspection ID: SqlStorageInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlStorageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MsOrderByInspection", + "shortDescription": { + "text": "ORDER BY in queries" + }, + "fullDescription": { + "text": "Reports usages when the 'ORDER BY' clause is used without 'TOP', 'OFFSET', or 'FOR XML' in views, inline functions, derived tables, subqueries, and common table expressions. For more information about usages of 'ORDER BY', see SELECT - ORDER BY Clause (Transact-SQL) at docs.microsoft.com. Example (Microsoft SQL server): 'CREATE TABLE foo (a INT NOT NULL, b INT NOT NULL);\n\nSELECT *\nFROM (SELECT a, b\nFROM foo A\nWHERE a < 89\nORDER BY b) ALIAS;' In a subquery, ORDER BY will be highlighted as an error. You can add TOP, OFFSET, or FOR XML to a subquery. Alternatively, use the Delete element quick-fix to delete the ORDER BY section. After the quick-fix is applied: 'SELECT *\nFROM (SELECT a, b\nFROM foo A\nWHERE a < 89) ALIAS;' Inspection ID: MsOrderByInspection", + "markdown": "Reports usages when the `ORDER BY` clause is used without `TOP`, `OFFSET`, or `FOR XML` in views, inline functions, derived tables, subqueries, and common table expressions.\n\nFor more information about usages of `ORDER BY`, see [SELECT - ORDER BY Clause (Transact-SQL) at\ndocs.microsoft.com](https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql).\n\nExample (Microsoft SQL server):\n\n CREATE TABLE foo (a INT NOT NULL, b INT NOT NULL);\n\n SELECT *\n FROM (SELECT a, b\n FROM foo A\n WHERE a < 89\n ORDER BY b) ALIAS;\n\nIn a subquery, ORDER BY will be highlighted as an error. You can add TOP, OFFSET, or FOR XML to a subquery.\nAlternatively, use the **Delete element** quick-fix to delete the ORDER BY section.\n\nAfter the quick-fix is applied:\n\n SELECT *\n FROM (SELECT a, b\n FROM foo A\n WHERE a < 89) ALIAS;\n\nInspection ID: MsOrderByInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "MsOrderBy", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "SQL server", + "index": 74, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlSignatureInspection", + "shortDescription": { + "text": "Function signature" + }, + "fullDescription": { + "text": "Reports signature issues for built-in functions. The inspection will report a wrong number of arguments, invalid keywords, wrong data types, and other issues. Example (MySQL): 'CREATE TABLE foo (a INT, b INT, c INT)\n\nSELECT IFNULL() FROM foo; -- error\nSELECT IFNULL(a) FROM foo; -- error\nSELECT IFNULL(a, b) FROM foo; -- OK\nSELECT IFNULL(a, b, c) FROM foo; -- error' In MySQL, the 'IFNULL()' function accepts strictly two arguments. So, only the 'SELECT IFNULL(a, b) FROM foo;' query is correct. Inspection ID: SqlSignatureInspection", + "markdown": "Reports signature issues for built-in functions.\n\nThe inspection will report a wrong number of arguments, invalid keywords, wrong data types, and other issues.\n\nExample (MySQL):\n\n CREATE TABLE foo (a INT, b INT, c INT)\n\n SELECT IFNULL() FROM foo; -- error\n SELECT IFNULL(a) FROM foo; -- error\n SELECT IFNULL(a, b) FROM foo; -- OK\n SELECT IFNULL(a, b, c) FROM foo; -- error\n\nIn MySQL, the `IFNULL()` function accepts strictly two arguments. So, only the `SELECT IFNULL(a, b) FROM foo;`\nquery is correct.\n\nInspection ID: SqlSignatureInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlSignature", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlRedundantOrderingDirectionInspection", + "shortDescription": { + "text": "Redundant ordering direction" + }, + "fullDescription": { + "text": "Reports redundant ordering directions like ASC and DESC in ORDER BY clauses. Example (MySQL): 'CREATE TABLE foo(a INT, b INT, c INT);\nSELECT * FROM foo ORDER BY a ASC, b DESC, c ASC;' The ORDER BY keyword sorts the records in the ascending order by default. So, the 'ASC' keyword for 'a' and 'c' columns is redundant. Inspection ID: SqlRedundantOrderingDirectionInspection", + "markdown": "Reports redundant ordering directions like ASC and DESC in ORDER BY clauses.\n\nExample (MySQL):\n\n CREATE TABLE foo(a INT, b INT, c INT);\n SELECT * FROM foo ORDER BY a ASC, b DESC, c ASC;\n\nThe ORDER BY keyword sorts the records in the ascending order by default. So, the `ASC` keyword for `a` and\n`c` columns is redundant.\n\nInspection ID: SqlRedundantOrderingDirectionInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlRedundantOrderingDirection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlDeprecateTypeInspection", + "shortDescription": { + "text": "Deprecated type" + }, + "fullDescription": { + "text": "Reports usages of types that are deprecated and might disappear in future versions of DBMS. Reported types: LONG in Oracle (see Deprecated and Desupported Features at docs.oracle.com). TEXT, NTEXT, and IMAGE in Microsoft SQL Server (see Deprecated Database Engine Features in SQL Server 2016 at docs.microsoft.com). Example (Oracle): 'CREATE TABLE ot.foo(\na NUMBER GENERATED BY DEFAULT AS IDENTITY,\nb LONG NOT NULL\n);' Inspection ID: SqlDeprecateTypeInspection", + "markdown": "Reports usages of types that are deprecated and might disappear in future versions of DBMS.\n\nReported types:\n\n* LONG in Oracle (see [Deprecated\n and Desupported Features at docs.oracle.com](https://docs.oracle.com/cd/A91202_01/901_doc/server.901/a90120/ch4_dep.htm#6690)).\n* TEXT, NTEXT, and IMAGE in Microsoft SQL Server (see [Deprecated Database Engine Features in SQL Server 2016 at docs.microsoft.com](https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016?view=sql-server-ver15)).\n\nExample (Oracle):\n\n CREATE TABLE ot.foo(\n a NUMBER GENERATED BY DEFAULT AS IDENTITY,\n b LONG NOT NULL\n );\n\nInspection ID: SqlDeprecateTypeInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlDeprecateType", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAggregatesInspection", + "shortDescription": { + "text": "Aggregate-related problems" + }, + "fullDescription": { + "text": "Reports invalid usages of SQL aggregate functions. The following situations are considered: Columns that are used in HAVING and ORDER BY clauses but are missed in GROUP BY clauses. 'CREATE TABLE foo(id INT PRIMARY KEY, a INT, b INT);\nSELECT a, MAX(b) FROM foo GROUP BY a HAVING b > 0;\nSELECT * FROM foo GROUP BY a ORDER BY b;' This rule does not apply when grouping is made by the primary key. 'SELECT * FROM foo GROUP BY id ORDER BY b;' Aggregate functions in a wrong context. Usually, you can use aggregate functions in the following contexts: a list of expressions in SELECT; in HAVING and ORDER BY sections; and other dialect-specific cases. The following queries will display an error. 'SELECT a FROM foo WHERE MAX(b) > 0;\nSELECT a FROM foo GROUP BY MAX(a);' Nested calls of aggregate functions. 'SELECT MAX(SUM(a)) FROM foo GROUP BY a;' This rule does not apply to analytic functions. The following query is valid and correct. 'SELECT MAX(SUM(a) OVER ()) FROM foo;' Usages of HAVING without aggregate functions. In this case, consider rewriting your code using the WHERE section. 'SELECT a, MAX(b) FROM foo GROUP BY a HAVING a > 0;' Inspection ID: SqlAggregatesInspection", + "markdown": "Reports invalid usages of SQL aggregate functions.\n\nThe following situations are considered:\n\n* Columns that are used in HAVING and ORDER BY clauses but are missed in GROUP BY clauses.\n\n CREATE TABLE foo(id INT PRIMARY KEY, a INT, b INT);\n SELECT a, MAX(b) FROM foo GROUP BY a HAVING b > 0;\n SELECT * FROM foo GROUP BY a ORDER BY b;\n\n This rule does not apply when grouping is made by the primary key.\n\n SELECT * FROM foo GROUP BY id ORDER BY b;\n\n* Aggregate functions in a wrong context. Usually, you can use aggregate functions in the following contexts: a list of expressions in\n SELECT; in HAVING and ORDER BY sections; and other dialect-specific cases. The following queries will display an error.\n\n SELECT a FROM foo WHERE MAX(b) > 0;\n SELECT a FROM foo GROUP BY MAX(a);\n\n* Nested calls of aggregate functions.\n\n SELECT MAX(SUM(a)) FROM foo GROUP BY a;\n\n This rule does not apply to analytic functions. The following query is valid and correct.\n\n SELECT MAX(SUM(a) OVER ()) FROM foo;\n\n* Usages of HAVING without aggregate functions. In this case, consider rewriting your code using the WHERE section.\n\n SELECT a, MAX(b) FROM foo GROUP BY a HAVING a > 0;\n\nInspection ID: SqlAggregatesInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAggregates", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlConstantExpressionInspection", + "shortDescription": { + "text": "Constant expression" + }, + "fullDescription": { + "text": "Reports conditions and expressions that are always true, false or null. Example (MySQL): 'CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\nSELECT a FROM t1 WHERE 'Cat' = 'Cat';\nSELECT a FROM t1 WHERE 'Cat' = null;' The ''Cat' = 'Cat'' is always true and will be reported. The ''Cat' = null' is always null and will be reported. Inspection ID: SqlConstantExpressionInspection", + "markdown": "Reports conditions and expressions that are always true, false or null.\n\nExample (MySQL):\n\n CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\n SELECT a FROM t1 WHERE 'Cat' = 'Cat';\n SELECT a FROM t1 WHERE 'Cat' = null;\n\nThe `'Cat' = 'Cat'` is always true and will be reported.\n\nThe `'Cat' = null` is always null and will be reported.\n\nInspection ID: SqlConstantExpressionInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlConstantExpression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlMissingColumnAliasesInspection", + "shortDescription": { + "text": "Missing column aliases" + }, + "fullDescription": { + "text": "Reports queries without explicit aliases in output expressions (for example, in the SELECT statement). Example (PostgreSQL): 'CREATE TABLE foo(a INT, b INT);\n\nSELECT 1, a + 1 AS A2, MAX(b) AS M\nFROM foo;' Inspection ID: SqlMissingColumnAliasesInspection", + "markdown": "Reports queries without explicit aliases in output expressions (for example, in the SELECT statement).\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT, b INT);\n\n SELECT 1, a + 1 AS A2, MAX(b) AS M\n FROM foo;\n\nInspection ID: SqlMissingColumnAliasesInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMissingColumnAliases", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAddNotNullColumnInspection", + "shortDescription": { + "text": "Adding not null column without default value" + }, + "fullDescription": { + "text": "Reports attempts to create NOT NULL columns without DEFAULT values. Example (Microsoft SQL Server): 'CREATE TABLE foo (a INT, b INT)\n\nALTER TABLE foo ADD c INT NOT NULL;' By default, a column holds NULL values. In the example, we use the NOT NULL constraint that enforces a column not to accept NULL values. If we prohibit to use NULL values, we must set the DEFAULT value that SQL can use when we create a new record. 'ALTER TABLE foo ADD c INT NOT NULL DEFAULT 42;' You can quickly add the DEFAULT value by using the Add DEFAULT value quick-fix. Inspection ID: SqlAddNotNullColumnInspection", + "markdown": "Reports attempts to create NOT NULL columns without DEFAULT values.\n\nExample (Microsoft SQL Server):\n\n CREATE TABLE foo (a INT, b INT)\n\n ALTER TABLE foo ADD c INT NOT NULL;\n\nBy default, a column holds NULL values. In the example, we use the NOT NULL constraint that enforces a column not to accept NULL values.\nIf we prohibit to use NULL values, we must set the DEFAULT value that SQL can use when we create a new record.\n\n ALTER TABLE foo ADD c INT NOT NULL DEFAULT 42;\n\nYou can quickly add the DEFAULT value by using the **Add DEFAULT value** quick-fix.\n\nInspection ID: SqlAddNotNullColumnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAddNotNullColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OraOverloadInspection", + "shortDescription": { + "text": "Overloading errors" + }, + "fullDescription": { + "text": "Reports invalid cases of subprogram overloading in Oracle. Example (Oracle): 'DECLARE\n SUBTYPE fff IS BINARY_INTEGER;\n SUBTYPE ggg IS NATURAL;\n PROCEDURE foo (a IN ggg) IS BEGIN NULL; END;\n PROCEDURE foo (a IN fff) IS BEGIN NULL; END;\nBEGIN\n NULL;\nEND;' You cannot overload subprograms which parameters differ only in subtypes. For example, you cannot overload procedures where one accepts a BINARY INTEGER parameter and the other accepts a NATURAL parameter. For more information about restrictions on procedure overloading, see Restrictions on Overloading at docs.oracle.com. Inspection ID: OraOverloadInspection", + "markdown": "Reports invalid cases of subprogram overloading in Oracle.\n\nExample (Oracle):\n\n DECLARE\n SUBTYPE fff IS BINARY_INTEGER;\n SUBTYPE ggg IS NATURAL;\n PROCEDURE foo (a IN ggg) IS BEGIN NULL; END;\n PROCEDURE foo (a IN fff) IS BEGIN NULL; END;\n BEGIN\n NULL;\n END;\n\nYou cannot overload subprograms which parameters differ only in subtypes. For example, you cannot overload procedures where one accepts a\nBINARY INTEGER parameter and the other accepts a NATURAL parameter. For more information about restrictions on procedure overloading,\nsee [Restrictions on Overloading at docs.oracle.com](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/subprograms.htm).\n\nInspection ID: OraOverloadInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlOverload", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Oracle", + "index": 77, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OraMissingBodyInspection", + "shortDescription": { + "text": "Missing body for package/object type specification" + }, + "fullDescription": { + "text": "Reports package and object type specifications that are missing body declarations. Package specifications and object types that declare routines as well as package specifications with cursors must have body declarations where those routines and cursors are implemented. Absence of a body leads to a runtime error when routines or cursors are invoked in program code. Example (Oracle): 'CREATE OR REPLACE PACKAGE ppp IS\n FUNCTION foo(a INT) RETURN INT;\nEND;' Inspection ID: OraMissingBodyInspection", + "markdown": "Reports package and object type specifications that are missing body declarations.\n\nPackage specifications and object types that declare routines as well as package specifications with cursors must have body\ndeclarations where those routines and cursors are implemented. Absence of a body leads to a runtime error when routines or cursors are\ninvoked in program code.\n\nExample (Oracle):\n\n CREATE OR REPLACE PACKAGE ppp IS\n FUNCTION foo(a INT) RETURN INT;\n END;\n\nInspection ID: OraMissingBodyInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlMissingBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Oracle", + "index": 77, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OraUnmatchedForwardDeclarationInspection", + "shortDescription": { + "text": "Forward declaration without definition" + }, + "fullDescription": { + "text": "Reports declarations of procedures and functions that are missing their implementation in code. In Oracle, you can declare a procedure or a function without its body, and write the implementation later. The inspection will report names of such procedures or functions that are left without implementation. Example (Oracle): 'DECLARE PROCEDURE foo(a int, b varchar2);\nBEGIN\n NULL;\nEND;' The 'foo' procedure is declared but is missing implementation. We can add the implementation to get rid of the error. 'DECLARE PROCEDURE foo(a int, b varchar2);\n PROCEDURE foo(a int, b varchar2) IS\nBEGIN\n NULL;\nEND;\nBEGIN\n NULL;\nEND;' Inspection ID: OraUnmatchedForwardDeclarationInspection", + "markdown": "Reports declarations of procedures and functions that are missing their implementation in code.\n\nIn Oracle, you can declare a procedure or a function without its body, and write the implementation later. The inspection will report names\nof such procedures or functions that are left without implementation.\n\nExample (Oracle):\n\n DECLARE PROCEDURE foo(a int, b varchar2);\n BEGIN\n NULL;\n END;\n\nThe `foo` procedure is declared but is missing implementation. We can add the implementation to get rid of the error.\n\n DECLARE PROCEDURE foo(a int, b varchar2);\n PROCEDURE foo(a int, b varchar2) IS\n BEGIN\n NULL;\n END;\n BEGIN\n NULL;\n END;\n\nInspection ID: OraUnmatchedForwardDeclarationInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "SqlUnmatchedForwardDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Oracle", + "index": 77, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlGotoInspection", + "shortDescription": { + "text": "Usages of GOTO statements" + }, + "fullDescription": { + "text": "Reports usages of backward GOTO statements and GOTO statements used to exit a loop. The extensive use of GOTO statements is generally not recommended. For details, see GOTO statement in SQL procedures at ibm.com. Instead of jumping back to a previous statement using GOTO, consider using a loop. Instead of exiting the WHILE loop with GOTO, consider using other control-of-flow statements (for example, RETURN or BREAK). Example (Oracle): 'CREATE PROCEDURE test(n INT) AS\nDECLARE\n x INT;\nBEGIN\n x := 0;\n GOTO a;\n <> x := 1;\n IF (n = 0) THEN\n GOTO a;\n END IF;\n WHILE TRUE\n LOOP\n GOTO b;\n END LOOP;\n <> x := 3;\nEND;' Inspection ID: SqlGotoInspection", + "markdown": "Reports usages of backward GOTO statements and GOTO statements used to exit a loop.\n\nThe extensive use of GOTO statements is generally\nnot recommended. For details, see [GOTO statement in\nSQL\nprocedures at ibm.com](https://www.ibm.com/docs/no/db2/11.5?topic=procedures-goto-statement-in-sql).\n\nInstead of jumping back to a previous statement using GOTO, consider using a loop.\n\nInstead of exiting the WHILE loop with GOTO, consider using other control-of-flow statements (for example, RETURN or BREAK).\n\nExample (Oracle):\n\n CREATE PROCEDURE test(n INT) AS\n DECLARE\n x INT;\n BEGIN\n x := 0;\n GOTO a;\n <> x := 1;\n IF (n = 0) THEN\n GOTO a;\n END IF;\n WHILE TRUE\n LOOP\n GOTO b;\n END LOOP;\n <> x := 3;\n END;\n\nInspection ID: SqlGotoInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlGoto", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSExtResolveInspection", + "shortDescription": { + "text": "Resolution problems" + }, + "fullDescription": { + "text": "Reports unresolved references in MongoDB and JavaScript code. Inspection ID: MongoJSExtResolveInspection", + "markdown": "Reports unresolved references in MongoDB and JavaScript code.\n\nInspection ID: MongoJSExtResolveInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 11, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlWithoutWhereInspection", + "shortDescription": { + "text": "Delete or update statement without where clauses" + }, + "fullDescription": { + "text": "Reports usages of DELETE or UPDATE statements without WHERE clauses. Without WHERE clauses, DELETE drops all the data from the table, and UPDATE overwrites values for all the table rows. Example (MySQL): 'CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\nupdate t1 set a = 'Smith';\ndelete from t1;' Inspection ID: SqlWithoutWhereInspection", + "markdown": "Reports usages of DELETE or UPDATE statements without WHERE clauses.\n\nWithout WHERE clauses, DELETE drops all the data from the table, and UPDATE overwrites values for all the table rows.\n\nExample (MySQL):\n\n CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);\n update t1 set a = 'Smith';\n delete from t1;\n\nInspection ID: SqlWithoutWhereInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlWithoutWhere", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Security" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlAmbiguousColumnInspection", + "shortDescription": { + "text": "Ambiguous reference" + }, + "fullDescription": { + "text": "Reports columns that have identical names but belong to different tables. Example (MySQL): 'CREATE TABLE foo(id INT PRIMARY KEY);\nCREATE TABLE bar(id INT PRIMARY KEY);\n\nSELECT foo.id, bar.id FROM foo, bar WHERE id > 0;' The 'id' column appears in 'foo' and 'bar' tables. You need to qualify the column name to make the query correct. 'SELECT foo.id, bar.id FROM foo, bar WHERE foo.id > 0;' Inspection ID: SqlAmbiguousColumnInspection", + "markdown": "Reports columns that have identical names but belong to different tables.\n\nExample (MySQL):\n\n CREATE TABLE foo(id INT PRIMARY KEY);\n CREATE TABLE bar(id INT PRIMARY KEY);\n\n SELECT foo.id, bar.id FROM foo, bar WHERE id > 0;\n\nThe `id` column appears in `foo` and `bar` tables. You need to qualify the column name to\nmake the query correct.\n\n SELECT foo.id, bar.id FROM foo, bar WHERE foo.id > 0;\n\nInspection ID: SqlAmbiguousColumnInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlAmbiguousColumn", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SqlUnusedCteInspection", + "shortDescription": { + "text": "Unused common table expression" + }, + "fullDescription": { + "text": "Reports unused common table expressions (CTE) inside the query. Example (PostgreSQL): 'CREATE TABLE foo(a INT);\n\nWITH a AS (SELECT 1 AS x FROM foo)\nSELECT 1 + 2 FROM foo;' By using WITH, we create a temporary named result set with the name 'a', also known as a common table expression (CTE). But we do not use this CTE later in the code. The unused CTE is greyed out. Inspection ID: SqlUnusedCteInspection", + "markdown": "Reports unused common table expressions (CTE) inside the query.\n\nExample (PostgreSQL):\n\n CREATE TABLE foo(a INT);\n\n WITH a AS (SELECT 1 AS x FROM foo)\n SELECT 1 + 2 FROM foo;\n\nBy using WITH, we create a temporary named result set with the name `a`, also known as a common table expression (CTE). But\nwe do not use this CTE later in the code. The unused CTE is greyed out.\n\nInspection ID: SqlUnusedCteInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SqlUnusedCte", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "SQL", + "index": 35, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MongoJSResolveInspection", + "shortDescription": { + "text": "Resolution problems" + }, + "fullDescription": { + "text": "Reports unresolved references in MongoDB and JavaScript code. Example: 'db\nuse foo\n -- a reference to a non-existing collection\ndb.non_existing_collection\ndb['non_existing_collection']\ndb['non_existing_collection'].find().hasNext()' The 'non_existing_collection' collection does not exist in the database and will be reported. Inspection ID: MongoJSResolveInspection", + "markdown": "Reports unresolved references in MongoDB and JavaScript code.\n\nExample:\n\n db\n use foo\n -- a reference to a non-existing collection\n db.non_existing_collection\n db['non_existing_collection']\n db['non_existing_collection'].find().hasNext()\n\nThe `non_existing_collection` collection does not exist in the database and will be reported.\n\nInspection ID: MongoJSResolveInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "MongoJSResolve", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "MongoJS", + "index": 11, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij", + "version": "252.24448", + "rules": [ + { + "id": "HtmlUnknownBooleanAttribute", + "shortDescription": { + "text": "Incorrect boolean attribute" + }, + "fullDescription": { + "text": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported. Inspection ID: HtmlUnknownBooleanAttribute", + "markdown": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported.\n\nInspection ID: HtmlUnknownBooleanAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownBooleanAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatedCode", + "shortDescription": { + "text": "Duplicated code fragment" + }, + "fullDescription": { + "text": "Reports duplicated blocks of code from the selected scope: the same file or the entire project. The inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window. The inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs.", + "markdown": "Reports duplicated blocks of code from the selected scope: the same file or the entire project.\n\nThe inspection features quick-fixes that help you to set the size of detected duplicates, navigate to repetitive code fragments, and compare them in a tool window.\n\nThe inspection options allow you to select the scope of the reported duplicated fragments and set the initial size for the duplicated language constructs." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "DuplicatedCode", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentLineSeparators", + "shortDescription": { + "text": "Inconsistent line separators" + }, + "fullDescription": { + "text": "Reports files with line separators different from the ones that are specified in the project's settings. For example, the inspection will be triggered if you set the line separator to '\\n' in Settings | Editor | Code Style | Line separator, while the file you are editing uses '\\r\\n' as a line separator. The inspection also warns you about mixed line separators within a file. Inspection ID: InconsistentLineSeparators", + "markdown": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file.\n\nInspection ID: InconsistentLineSeparators" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "InconsistentLineSeparators", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSuppression", + "shortDescription": { + "text": "Redundant suppression" + }, + "fullDescription": { + "text": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context: '@SuppressWarning' annotation, or '// noinspection' line comment, or '/** noinspection */' JavaDoc comment Example: 'public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n}' Inspection ID: RedundantSuppression", + "markdown": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n\nInspection ID: RedundantSuppression" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RedundantSuppression", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProblematicWhitespace", + "shortDescription": { + "text": "Problematic whitespace" + }, + "fullDescription": { + "text": "Reports the following problems: Tabs used for indentation when the code style is configured to use only spaces. Spaces used for indentation when the code style is configured to use only tabs. Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs. Inspection ID: ProblematicWhitespace", + "markdown": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs.\n\n\nInspection ID: ProblematicWhitespace" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ProblematicWhitespace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownTarget", + "shortDescription": { + "text": "Unresolved file in a link" + }, + "fullDescription": { + "text": "Reports an unresolved file in a link. Inspection ID: HtmlUnknownTarget", + "markdown": "Reports an unresolved file in a link.\n\nInspection ID: HtmlUnknownTarget" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownTarget", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SSBasedInspection", + "shortDescription": { + "text": "Structural search inspection" + }, + "fullDescription": { + "text": "Allows configuring Structural Search/Structural Replace templates that you can apply to the file you are editing. All matches will be highlighted and marked with the template name that you have configured. If you configure the Structural Replace pattern as well, the corresponding replace option will be available as a quick-fix. Inspection ID: SSBasedInspection", + "markdown": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix.\n\nInspection ID: SSBasedInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "SSBasedInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Structural search", + "index": 43, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LongLine", + "shortDescription": { + "text": "Line is longer than allowed by code style" + }, + "fullDescription": { + "text": "Reports lines that are longer than the Hard wrap at parameter specified in Settings | Editor | Code Style | General. Inspection ID: LongLine", + "markdown": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at).\n\nInspection ID: LongLine" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LongLine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlWrongRootElement", + "shortDescription": { + "text": "Wrong root element" + }, + "fullDescription": { + "text": "Reports a root tag name different from the name specified in the '' tag. Inspection ID: XmlWrongRootElement", + "markdown": "Reports a root tag name different from the name specified in the `` tag.\n\nInspection ID: XmlWrongRootElement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlWrongRootElement", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckValidXmlInScriptTagBody", + "shortDescription": { + "text": "Malformed content of 'script' tag" + }, + "fullDescription": { + "text": "Reports contents of 'script' tags that are invalid XML. Example: '' After the quick-fix is applied: '' Inspection ID: CheckValidXmlInScriptTagBody", + "markdown": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n\nInspection ID: CheckValidXmlInScriptTagBody" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckValidXmlInScriptTagBody", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSuspiciousBackref", + "shortDescription": { + "text": "Suspicious back reference" + }, + "fullDescription": { + "text": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation. Example of a group defined after its back reference: '\\1(abc)' Example of a group and a back reference in different branches: 'a(b)c|(xy)\\1z' New in 2022.1 Inspection ID: RegExpSuspiciousBackref", + "markdown": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1\n\nInspection ID: RegExpSuspiciousBackref" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpSuspiciousBackref", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSingleCharAlternation", + "shortDescription": { + "text": "Single character alternation" + }, + "fullDescription": { + "text": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance. Example: 'a|b|c|d' After the quick-fix is applied: '[abcd]' New in 2017.1 Inspection ID: RegExpSingleCharAlternation", + "markdown": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1\n\nInspection ID: RegExpSingleCharAlternation" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpSingleCharAlternation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownAttribute", + "shortDescription": { + "text": "Unknown attribute" + }, + "fullDescription": { + "text": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported. Inspection ID: HtmlUnknownAttribute", + "markdown": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported.\n\nInspection ID: HtmlUnknownAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckTagEmptyBody", + "shortDescription": { + "text": "Empty element content" + }, + "fullDescription": { + "text": "Reports XML elements without contents. Example: '\n \n ' After the quick-fix is applied: '\n \n ' Inspection ID: CheckTagEmptyBody", + "markdown": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n\nInspection ID: CheckTagEmptyBody" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckTagEmptyBody", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantEscape", + "shortDescription": { + "text": "Redundant character escape" + }, + "fullDescription": { + "text": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets '[]' of a character class. Although unescaped opening curly braces '{' outside of character classes are allowed in some dialects (JavaScript, Python, and so on), it can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters. For this reason the inspection does not report escaped opening curly braces. Example: '\\-\\;[\\.]' After the quick-fix is applied: '-;[.]' The Ignore escaped closing brackets '}' and ']' option specifies whether to report '\\}' and '\\]' outside of a character class when they are allowed to be unescaped by the RegExp dialect. New in 2017.3 Inspection ID: RegExpRedundantEscape", + "markdown": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3\n\nInspection ID: RegExpRedundantEscape" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRedundantEscape", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a named pattern ('define') in RELAX-NG files that use XML syntax. Suggests creating the referenced 'define' element. Inspection ID: UnresolvedReference", + "markdown": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element.\n\nInspection ID: UnresolvedReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "UnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 61, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlMissingClosingTag", + "shortDescription": { + "text": "Missing closing tag" + }, + "fullDescription": { + "text": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional. Example: '\n \n

Behold!\n \n ' After the quick-fix is applied: '\n \n

Behold!

\n \n ' Inspection ID: HtmlMissingClosingTag", + "markdown": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n

Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n

Behold!

\n \n \n\nInspection ID: HtmlMissingClosingTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlMissingClosingTag", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CustomRegExpInspection", + "shortDescription": { + "text": "Custom RegExp inspection" + }, + "fullDescription": { + "text": "Custom Regex Inspection Inspection ID: CustomRegExpInspection", + "markdown": "Custom Regex Inspection\n\nInspection ID: CustomRegExpInspection" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "CustomRegExpInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "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. Inspection ID: IncorrectFormatting", + "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.\n\nInspection ID: IncorrectFormatting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "IncorrectFormatting", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "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

\n \n ' After the quick-fix is applied: '\n \n
\n \n ' Inspection ID: HtmlExtraClosingTag", + "markdown": "Reports redundant closing tags on empty elements, for example, `img` or `br`.\n\n**Example:**\n\n\n \n \n

\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n
\n \n \n\nInspection ID: HtmlExtraClosingTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlExtraClosingTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownAnchorTarget", + "shortDescription": { + "text": "Unresolved fragment in a link" + }, + "fullDescription": { + "text": "Reports an unresolved last part of an URL after the '#' sign. Inspection ID: HtmlUnknownAnchorTarget", + "markdown": "Reports an unresolved last part of an URL after the `#` sign.\n\nInspection ID: HtmlUnknownAnchorTarget" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownAnchorTarget", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpUnexpectedAnchor", + "shortDescription": { + "text": "Begin or end anchor in unexpected position" + }, + "fullDescription": { + "text": "Reports '^' or '\\A' anchors not at the beginning of the pattern and '$', '\\Z' or '\\z' anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the '^' and '$' anchors, most likely the literal character was meant and the escape forgotten. Example: '(Price $10)' New in 2018.1 Inspection ID: RegExpUnexpectedAnchor", + "markdown": "Reports `^` or `\\A` anchors not at the beginning of the pattern and `$`, `\\Z` or `\\z` anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the `^` and `$` anchors, most likely the literal character was meant and the escape forgotten.\n\n**Example:**\n\n\n (Price $10)\n\n\nNew in 2018.1\n\nInspection ID: RegExpUnexpectedAnchor" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpUnexpectedAnchor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpellCheckingInspection", + "shortDescription": { + "text": "Typo" + }, + "fullDescription": { + "text": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click. Inspection ID: SpellCheckingInspection", + "markdown": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click.\n\nInspection ID: SpellCheckingInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "SpellCheckingInspection", + "ideaSeverity": "TYPO", + "qodanaSeverity": "Low", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 70, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckXmlFileWithXercesValidator", + "shortDescription": { + "text": "Failed external validation" + }, + "fullDescription": { + "text": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator. Inspection ID: CheckXmlFileWithXercesValidator", + "markdown": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator.\n\nInspection ID: CheckXmlFileWithXercesValidator" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckXmlFileWithXercesValidator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownTag", + "shortDescription": { + "text": "Unknown tag" + }, + "fullDescription": { + "text": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported. Inspection ID: HtmlUnknownTag", + "markdown": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported.\n\nInspection ID: HtmlUnknownTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlUnknownTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpEscapedMetaCharacter", + "shortDescription": { + "text": "Escaped meta character" + }, + "fullDescription": { + "text": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character '[', ']' and '^', because those would need additional escaping inside a character class. Example: '\\d+\\.\\d+' After the quick-fix is applied: '\\d+[.]\\d+' New in 2017.1 Inspection ID: RegExpEscapedMetaCharacter", + "markdown": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character `[`, `]` and `^`, because those would need additional escaping inside a character class.\n\n**Example:**\n\n\n \\d+\\.\\d+\n\nAfter the quick-fix is applied:\n\n\n \\d+[.]\\d+\n\nNew in 2017.1\n\nInspection ID: RegExpEscapedMetaCharacter" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpEscapedMetaCharacter", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlHighlighting", + "shortDescription": { + "text": "XML highlighting" + }, + "fullDescription": { + "text": "Reports XML validation problems in the results of a batch code inspection. Inspection ID: XmlHighlighting", + "markdown": "Reports XML validation problems in the results of a batch code inspection.\n\nInspection ID: XmlHighlighting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlHighlighting", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDuplicatedId", + "shortDescription": { + "text": "Duplicate 'id' attribute" + }, + "fullDescription": { + "text": "Reports a duplicate values of the 'id' attribute in XML and HTML. Inspection ID: XmlDuplicatedId", + "markdown": "Reports a duplicate values of the `id` attribute in XML and HTML.\n\nInspection ID: XmlDuplicatedId" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlDuplicatedId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpDuplicateCharacterInClass", + "shortDescription": { + "text": "Duplicate character in character class" + }, + "fullDescription": { + "text": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex. Example: '[aabc]' After the quick-fix is applied: '[abc]' Inspection ID: RegExpDuplicateCharacterInClass", + "markdown": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex.\n\n**Example:**\n\n\n [aabc]\n\nAfter the quick-fix is applied:\n\n\n [abc]\n\nInspection ID: RegExpDuplicateCharacterInClass" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateCharacterInClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlInvalidId", + "shortDescription": { + "text": "Unresolved 'id' reference" + }, + "fullDescription": { + "text": "Reports the use of the 'id' that is not defined anywhere in XML and HTML. Inspection ID: XmlInvalidId", + "markdown": "Reports the use of the `id` that is not defined anywhere in XML and HTML.\n\nInspection ID: XmlInvalidId" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlInvalidId", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnboundNsPrefix", + "shortDescription": { + "text": "Unbound namespace prefix" + }, + "fullDescription": { + "text": "Reports an unbound namespace prefix in XML. Inspection ID: XmlUnboundNsPrefix", + "markdown": "Reports an unbound namespace prefix in XML.\n\nInspection ID: XmlUnboundNsPrefix" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlUnboundNsPrefix", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RequiredAttributes", + "shortDescription": { + "text": "Missing required attribute" + }, + "fullDescription": { + "text": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported. Inspection ID: RequiredAttributes", + "markdown": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported.\n\nInspection ID: RequiredAttributes" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RequiredAttributes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReassignedToPlainText", + "shortDescription": { + "text": "Reassigned to plain text" + }, + "fullDescription": { + "text": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically. You can dismiss this warning by removing the file type association in Settings | Editor | File Types | Text. Inspection ID: ReassignedToPlainText", + "markdown": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically.\n\nYou can dismiss this warning by removing the file type association\nin **Settings \\| Editor \\| File Types \\| Text**.\n\nInspection ID: ReassignedToPlainText" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "ReassignedToPlainText", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnusedNamespaceDeclaration", + "shortDescription": { + "text": "Unused schema declaration" + }, + "fullDescription": { + "text": "Reports an unused namespace declaration or location hint in XML. Inspection ID: XmlUnusedNamespaceDeclaration", + "markdown": "Reports an unused namespace declaration or location hint in XML.\n\nInspection ID: XmlUnusedNamespaceDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlUnusedNamespaceDeclaration", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantClassElement", + "shortDescription": { + "text": "Redundant '\\d', '[:digit:]', or '\\D' class elements" + }, + "fullDescription": { + "text": "Reports redundant '\\d' or '[:digit:]' that are used in one class with '\\w' or '[:word:]' ('\\D' with '\\W') and can be removed. Example: '[\\w\\d]' After the quick-fix is applied: '[\\w]' New in 2022.2 Inspection ID: RegExpRedundantClassElement", + "markdown": "Reports redundant `\\d` or `[:digit:]` that are used in one class with `\\w` or `[:word:]` (`\\D` with `\\W`) and can be removed.\n\n**Example:**\n\n\n [\\w\\d]\n\nAfter the quick-fix is applied:\n\n\n [\\w]\n\nNew in 2022.2\n\nInspection ID: RegExpRedundantClassElement" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RegExpRedundantClassElement", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSimplifiable", + "shortDescription": { + "text": "Regular expression can be simplified" + }, + "fullDescription": { + "text": "Reports regular expressions that can be simplified. Example: '[a] xx* [ah-hz]' After the quick-fix is applied: 'a x+ [ahz]' New in 2022.1 Inspection ID: RegExpSimplifiable", + "markdown": "Reports regular expressions that can be simplified.\n\n**Example:**\n\n\n [a] xx* [ah-hz]\n\nAfter the quick-fix is applied:\n\n\n a x+ [ahz]\n\nNew in 2022.1\n\nInspection ID: RegExpSimplifiable" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "RegExpSimplifiable", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpEmptyAlternationBranch", + "shortDescription": { + "text": "Empty branch in alternation" + }, + "fullDescription": { + "text": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation. Example: '(alpha||bravo)' After the quick-fix is applied: '(alpha|bravo)' New in 2017.2 Inspection ID: RegExpEmptyAlternationBranch", + "markdown": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation.\n\n**Example:**\n\n\n (alpha||bravo)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo)\n\nNew in 2017.2\n\nInspection ID: RegExpEmptyAlternationBranch" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpEmptyAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Annotator", + "shortDescription": { + "text": "Annotator" + }, + "fullDescription": { + "text": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection: Option \"Report syntax errors\": report parser-related issues. Option \"Report issues from language-specific annotators\": report issues found by annotators configured for the relevant language. See Custom Language Support: Annotators for details. Option \"Report other highlighting problems\": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See Custom Language Support: Highlighting for details. Inspection ID: Annotator", + "markdown": "Reports issues essential to this file (e.g., syntax errors) in the result of a batch code inspection run. These issues are usually always highlighted in the editor and can't be configured, unlike inspections. These options control the scope of checks performed by this inspection:\n\n* Option \"**Report syntax errors**\": report parser-related issues.\n* Option \"**Report issues from language-specific annotators** \": report issues found by annotators configured for the relevant language. See [Custom Language Support: Annotators](https://plugins.jetbrains.com/docs/intellij/annotator.html) for details.\n* Option \"**Report other highlighting problems** \": report issues specific to the language of the current file (e.g., type mismatches or unreported exceptions). See [Custom Language Support: Highlighting](https://plugins.jetbrains.com/docs/intellij/syntax-highlighting-and-error-highlighting.html#semantic-highlighting) for details.\n\nInspection ID: Annotator" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "Annotator", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlPathReference", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference in XML. Inspection ID: XmlPathReference", + "markdown": "Reports an unresolved file reference in XML.\n\nInspection ID: XmlPathReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlPathReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpUnnecessaryNonCapturingGroup", + "shortDescription": { + "text": "Unnecessary non-capturing group" + }, + "fullDescription": { + "text": "Reports unnecessary non-capturing groups, which have no influence on the match result. Example: 'Everybody be cool, (?:this) is a robbery!' After the quick-fix is applied: 'Everybody be cool, this is a robbery!' New in 2021.1 Inspection ID: RegExpUnnecessaryNonCapturingGroup", + "markdown": "Reports unnecessary non-capturing groups, which have no influence on the match result.\n\n**Example:**\n\n\n Everybody be cool, (?:this) is a robbery!\n\nAfter the quick-fix is applied:\n\n\n Everybody be cool, this is a robbery!\n\nNew in 2021.1\n\nInspection ID: RegExpUnnecessaryNonCapturingGroup" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpUnnecessaryNonCapturingGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TodoComment", + "shortDescription": { + "text": "TODO comment" + }, + "fullDescription": { + "text": "Reports TODO comments in your code. You can configure the format for TODO comments in Settings | Editor | TODO. Enable the Only warn on TODO comments without any details option to only warn on empty TODO comments, that don't provide any description on the task that should be done. Disable to report all TODO comments. Inspection ID: TodoComment", + "markdown": "Reports **TODO** comments in your code.\n\nYou can configure the format for **TODO** comments in [Settings \\| Editor \\| TODO](settings://preferences.toDoOptions).\n\nEnable the **Only warn on TODO comments without any details** option to only warn on empty TODO comments, that\ndon't provide any description on the task that should be done. Disable to report all TODO comments.\n\nInspection ID: TodoComment" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "TodoComment", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDeprecatedElement", + "shortDescription": { + "text": "Deprecated symbol" + }, + "fullDescription": { + "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'. Inspection ID: XmlDeprecatedElement", + "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'.\n\nInspection ID: XmlDeprecatedElement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlDeprecatedElement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantNestedCharacterClass", + "shortDescription": { + "text": "Redundant nested character class" + }, + "fullDescription": { + "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2 Inspection ID: RegExpRedundantNestedCharacterClass", + "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2\n\nInspection ID: RegExpRedundantNestedCharacterClass" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRedundantNestedCharacterClass", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlWrongAttributeValue", + "shortDescription": { + "text": "Wrong attribute value" + }, + "fullDescription": { + "text": "Reports an incorrect HTML attribute value. Inspection ID: HtmlWrongAttributeValue", + "markdown": "Reports an incorrect HTML attribute value.\n\nInspection ID: HtmlWrongAttributeValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlWrongAttributeValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDefaultAttributeValue", + "shortDescription": { + "text": "Redundant attribute with default value" + }, + "fullDescription": { + "text": "Reports a redundant assignment of the default value to an XML attribute. Inspection ID: XmlDefaultAttributeValue", + "markdown": "Reports a redundant assignment of the default value to an XML attribute.\n\nInspection ID: XmlDefaultAttributeValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "XmlDefaultAttributeValue", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpOctalEscape", + "shortDescription": { + "text": "Octal escape" + }, + "fullDescription": { + "text": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion. Example: '\\07' After the quick-fix is applied: '\\x07' New in 2017.1 Inspection ID: RegExpOctalEscape", + "markdown": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion.\n\n**Example:**\n\n\n \\07\n\nAfter the quick-fix is applied:\n\n\n \\x07\n\nNew in 2017.1\n\nInspection ID: RegExpOctalEscape" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "RegExpOctalEscape", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedDefine", + "shortDescription": { + "text": "Unused define" + }, + "fullDescription": { + "text": "Reports an unused named pattern ('define') in a RELAX-NG file (XML or Compact Syntax). 'define' elements that are used through an include in another file are ignored. Inspection ID: UnusedDefine", + "markdown": "Reports an unused named pattern (`define`) in a RELAX-NG file (XML or Compact Syntax). `define` elements that are used through an include in another file are ignored.\n\nInspection ID: UnusedDefine" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "UnusedDefine", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 61, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyDirectory", + "shortDescription": { + "text": "Empty directory" + }, + "fullDescription": { + "text": "Reports empty directories. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Only report empty directories located under a source folder option to have only directories under source roots reported. Inspection ID: EmptyDirectory", + "markdown": "Reports empty directories.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Only report empty directories located under a source folder** option to have only directories under source\nroots reported.\n\n\nInspection ID: EmptyDirectory" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "EmptyDirectory", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpAnonymousGroup", + "shortDescription": { + "text": "Anonymous capturing group or numeric back reference" + }, + "fullDescription": { + "text": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. '(?:xxx)' instead of '(xxx)'. Example: '(\\d\\d\\d\\d)\\1' A better regex pattern could look like this: '(?\\d\\d\\d\\d)\\k' New in 2017.2 Inspection ID: RegExpAnonymousGroup", + "markdown": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. `(?:xxx)` instead of `(xxx)`.\n\n**Example:**\n\n\n (\\d\\d\\d\\d)\\1\n\nA better regex pattern could look like this:\n\n\n (?\\d\\d\\d\\d)\\k\n\nNew in 2017.2\n\nInspection ID: RegExpAnonymousGroup" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpAnonymousGroup", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckDtdRefs", + "shortDescription": { + "text": "Unresolved DTD reference" + }, + "fullDescription": { + "text": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files. Inspection ID: CheckDtdRefs", + "markdown": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files.\n\nInspection ID: CheckDtdRefs" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CheckDtdRefs", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonAsciiCharacters", + "shortDescription": { + "text": "Non-ASCII characters" + }, + "fullDescription": { + "text": "Reports code elements that use non-ASCII symbols in an unusual context. Example: Non-ASCII characters used in identifiers, strings, or comments. Identifiers written in different languages, such as 'myСollection' with the letter 'C' written in Cyrillic. Comments or strings containing Unicode symbols, such as long dashes and arrows. Inspection ID: NonAsciiCharacters", + "markdown": "Reports code elements that use non-ASCII symbols in an unusual context.\n\nExample:\n\n* Non-ASCII characters used in identifiers, strings, or comments.\n* Identifiers written in different languages, such as `my`**С**`ollection` with the letter **C** written in Cyrillic.\n* Comments or strings containing Unicode symbols, such as long dashes and arrows.\n\nInspection ID: NonAsciiCharacters" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "NonAsciiCharacters", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 78, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnresolvedReference", + "shortDescription": { + "text": "Unresolved references" + }, + "fullDescription": { + "text": "Reports an unresolved references in XML. Inspection ID: XmlUnresolvedReference", + "markdown": "Reports an unresolved references in XML.\n\nInspection ID: XmlUnresolvedReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "XmlUnresolvedReference", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 46, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LossyEncoding", + "shortDescription": { + "text": "Lossy encoding" + }, + "fullDescription": { + "text": "Reports characters that cannot be displayed because of the current document encoding. Examples: If you type international characters in a document with the US-ASCII charset, some characters will be lost on save. If you load a UTF-8-encoded file using the ISO-8859-1 one-byte charset, some characters will be displayed incorrectly. You can fix this by changing the file encoding either by specifying the encoding directly in the file, e.g. by editing 'encoding=' attribute in the XML prolog of XML file, or by changing the corresponding options in Settings | Editor | File Encodings. Inspection ID: LossyEncoding", + "markdown": "Reports characters that cannot be displayed because of the current document encoding.\n\nExamples:\n\n* If you type international characters in a document with the **US-ASCII** charset, some characters will be lost on save.\n* If you load a **UTF-8** -encoded file using the **ISO-8859-1** one-byte charset, some characters will be displayed incorrectly.\n\nYou can fix this by changing the file encoding\neither by specifying the encoding directly in the file, e.g. by editing `encoding=` attribute in the XML prolog of XML file,\nor by changing the corresponding options in **Settings \\| Editor \\| File Encodings**.\n\nInspection ID: LossyEncoding" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LossyEncoding", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 78, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRepeatedSpace", + "shortDescription": { + "text": "Consecutive spaces" + }, + "fullDescription": { + "text": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier. Example: '( )' After the quick-fix is applied: '( {5})' New in 2017.1 Inspection ID: RegExpRepeatedSpace", + "markdown": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier.\n\n**Example:**\n\n\n ( )\n\nAfter the quick-fix is applied:\n\n\n ( {5})\n\n\nNew in 2017.1\n\nInspection ID: RegExpRepeatedSpace" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpRepeatedSpace", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpDuplicateAlternationBranch", + "shortDescription": { + "text": "Duplicate branch in alternation" + }, + "fullDescription": { + "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1 Inspection ID: RegExpDuplicateAlternationBranch", + "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1\n\nInspection ID: RegExpDuplicateAlternationBranch" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 51, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoreFileDuplicateEntry", + "shortDescription": { + "text": "Ignore file duplicates" + }, + "fullDescription": { + "text": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed. Example: '# Output directories\n /out/\n /target/\n /out/' Inspection ID: IgnoreFileDuplicateEntry", + "markdown": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed.\n\nExample:\n\n\n # Output directories\n /out/\n /target/\n /out/\n\nInspection ID: IgnoreFileDuplicateEntry" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "IgnoreFileDuplicateEntry", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Version control", + "index": 80, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckEmptyScriptTag", + "shortDescription": { + "text": "Empty tag" + }, + "fullDescription": { + "text": "Reports empty tags that do not work in some browsers. Example: '\n \n ' Inspection ID: CheckEmptyScriptTag", + "markdown": "Reports empty tags that do not work in some browsers.\n\n**Example:**\n\n\n \n \n \n\nInspection ID: CheckEmptyScriptTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckEmptyScriptTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "gherkin", + "version": "252.24448.0", + "rules": [ + { + "id": "GherkinScenarioToScenarioOutline", + "shortDescription": { + "text": "Scenario with Examples section" + }, + "fullDescription": { + "text": "Reports Gherkin scenarios that contain an 'Examples' section. Use the quick-fix to convert 'Scenario' to 'Scenario Outline'. Inspection ID: GherkinScenarioToScenarioOutline", + "markdown": "Reports Gherkin scenarios that contain an `Examples` section.\n\nUse the quick-fix to convert `Scenario` to `Scenario Outline`.\n\nInspection ID: GherkinScenarioToScenarioOutline" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GherkinScenarioToScenarioOutline", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GherkinMisplacedBackground", + "shortDescription": { + "text": "Misplaced background section" + }, + "fullDescription": { + "text": "Reports 'Background' sections that are located incorrectly. The 'Background' section must be located before the 'Scenario' section. Inspection ID: GherkinMisplacedBackground", + "markdown": "Reports `Background` sections that are located incorrectly. The `Background` section must be located before the `Scenario` section.\n\nInspection ID: GherkinMisplacedBackground" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GherkinMisplacedBackground", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberMissedExamples", + "shortDescription": { + "text": "Missing examples section" + }, + "fullDescription": { + "text": "Reports scenario outlines in Cucumber .feature files that do not have the 'Examples' section. Use the quick-fix to automatically create the 'Examples' section with a pre-filled table header. Inspection ID: CucumberMissedExamples", + "markdown": "Reports scenario outlines in Cucumber .feature files that do not have the `Examples` section.\n\nUse the quick-fix to automatically create the `Examples` section with a pre-filled table header.\n\nInspection ID: CucumberMissedExamples" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CucumberMissedExamples", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberTableInspection", + "shortDescription": { + "text": "Unused or missing columns in Cucumber tables" + }, + "fullDescription": { + "text": "Reports tables in 'Examples' sections in Cucumber .feature files with unused or missing columns. Inspection ID: CucumberTableInspection", + "markdown": "Reports tables in `Examples` sections in Cucumber .feature files with unused or missing columns.\n\nInspection ID: CucumberTableInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CucumberTableInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberUndefinedStep", + "shortDescription": { + "text": "Undefined step" + }, + "fullDescription": { + "text": "Reports steps in Cucumber (or some other Gherkin) .feature files that do not have matching step definitions. Use the quick-fix to automatically create a new step definition. Inspection ID: CucumberUndefinedStep", + "markdown": "Reports steps in Cucumber (or some other Gherkin) .feature files that do not have matching step definitions.\n\nUse the quick-fix to automatically create a new step definition.\n\nInspection ID: CucumberUndefinedStep" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CucumberUndefinedStep", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GherkinBrokenTableInspection", + "shortDescription": { + "text": "Gherkin table is broken" + }, + "fullDescription": { + "text": "Reports a table if there is at least one row with the number of cells different from the number of cells in the table header. Inspection ID: GherkinBrokenTableInspection", + "markdown": "Reports a table if there is at least one row with the number of cells different from the number of cells in the table header.\n\nInspection ID: GherkinBrokenTableInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GherkinBrokenTableInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberExamplesColon", + "shortDescription": { + "text": "Missing ':' after examples keyword" + }, + "fullDescription": { + "text": "Reports 'Examples' sections in Cucumber .feature files if they do not have ':' after the 'Examples' keyword. Inspection ID: CucumberExamplesColon", + "markdown": "Reports `Examples` sections in Cucumber .feature files if they do not have ':' after the `Examples` keyword.\n\nInspection ID: CucumberExamplesColon" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CucumberExamplesColon", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 20, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "HtmlTools", + "version": "252.24448.0", + "rules": [ + { + "id": "HtmlRequiredAltAttribute", + "shortDescription": { + "text": "Missing required 'alt' attribute" + }, + "fullDescription": { + "text": "Reports a missing 'alt' attribute in a 'img' or 'applet' tag or in a 'area' element of an image map. Suggests adding a required attribute with a text alternative for the contents of the tag. Based on WCAG 2.0: H24, H35, H36, H37. Inspection ID: HtmlRequiredAltAttribute", + "markdown": "Reports a missing `alt` attribute in a `img` or `applet` tag or in a `area` element of an image map. Suggests adding a required attribute with a text alternative for the contents of the tag. Based on WCAG 2.0: [H24](https://www.w3.org/TR/WCAG20-TECHS/H24.html), [H35](https://www.w3.org/TR/WCAG20-TECHS/H35.html), [H36](https://www.w3.org/TR/WCAG20-TECHS/H36.html), [H37](https://www.w3.org/TR/WCAG20-TECHS/H37.html).\n\nInspection ID: HtmlRequiredAltAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlRequiredAltAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 27, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlFormInputWithoutLabel", + "shortDescription": { + "text": "Missing associated label" + }, + "fullDescription": { + "text": "Reports a form element ('input', 'textarea', or 'select') without an associated label. Suggests creating a new label. Based on WCAG 2.0: H44. Inspection ID: HtmlFormInputWithoutLabel", + "markdown": "Reports a form element (`input`, `textarea`, or `select`) without an associated label. Suggests creating a new label. Based on WCAG 2.0: [H44](https://www.w3.org/TR/WCAG20-TECHS/H44.html). \n\nInspection ID: HtmlFormInputWithoutLabel" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlFormInputWithoutLabel", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 27, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredTitleAttribute", + "shortDescription": { + "text": "Missing required 'title' attribute" + }, + "fullDescription": { + "text": "Reports a missing title attribute 'frame', 'iframe', 'dl', and 'a' tags. Suggests adding a title attribute. Based on WCAG 2.0: H33, H40, and H64. Inspection ID: HtmlRequiredTitleAttribute", + "markdown": "Reports a missing title attribute `frame`, `iframe`, `dl`, and `a` tags. Suggests adding a title attribute. Based on WCAG 2.0: [H33](https://www.w3.org/TR/WCAG20-TECHS/H33.html), [H40](https://www.w3.org/TR/WCAG20-TECHS/H40.html), and [H64](https://www.w3.org/TR/WCAG20-TECHS/H64.html).\n\nInspection ID: HtmlRequiredTitleAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlRequiredTitleAttribute", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 27, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlDeprecatedTag", + "shortDescription": { + "text": "Obsolete tag" + }, + "fullDescription": { + "text": "Reports an obsolete HTML5 tag. Suggests replacing the obsolete tag with a CSS or another tag. Inspection ID: HtmlDeprecatedTag", + "markdown": "Reports an obsolete HTML5 tag. Suggests replacing the obsolete tag with a CSS or another tag.\n\nInspection ID: HtmlDeprecatedTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlDeprecatedTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckImageSize", + "shortDescription": { + "text": "Mismatched image size" + }, + "fullDescription": { + "text": "Reports a 'width' and 'height' attribute value of a 'img' tag that is different from the actual width and height of the referenced image. Inspection ID: CheckImageSize", + "markdown": "Reports a `width` and `height` attribute value of a `img` tag that is different from the actual width and height of the referenced image.\n\nInspection ID: CheckImageSize" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CheckImageSize", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Performance" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredSummaryAttribute", + "shortDescription": { + "text": "Missing required 'summary' attribute" + }, + "fullDescription": { + "text": "Reports a missing 'summary' attribute in a 'table' tag. Suggests adding a'summary' attribute. Based on WCAG 2.0: H73. Inspection ID: HtmlRequiredSummaryAttribute", + "markdown": "Reports a missing `summary` attribute in a `table` tag. Suggests adding a`summary` attribute. Based on WCAG 2.0: [H73](https://www.w3.org/TR/WCAG20-TECHS/H73.html).\n\nInspection ID: HtmlRequiredSummaryAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlRequiredSummaryAttribute", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 27, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredLangAttribute", + "shortDescription": { + "text": "Missing required 'lang' attribute" + }, + "fullDescription": { + "text": "Reports a missing 'lang' (or 'xml:lang') attribute in a 'html' tag. Suggests adding a required attribute to state the default language of the document. Based on WCAG 2.0: H57. Inspection ID: HtmlRequiredLangAttribute", + "markdown": "Reports a missing `lang` (or `xml:lang`) attribute in a `html` tag. Suggests adding a required attribute to state the default language of the document. Based on WCAG 2.0: [H57](https://www.w3.org/TR/WCAG20-TECHS/H57.html).\n\nInspection ID: HtmlRequiredLangAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlRequiredLangAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 27, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlNonExistentInternetResource", + "shortDescription": { + "text": "Unresolved web link" + }, + "fullDescription": { + "text": "Reports an unresolved web link. Works by making network requests in the background. Inspection ID: HtmlNonExistentInternetResource", + "markdown": "Reports an unresolved web link. Works by making network requests in the background.\n\nInspection ID: HtmlNonExistentInternetResource" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlNonExistentInternetResource", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlRequiredTitleElement", + "shortDescription": { + "text": "Missing required 'title' element" + }, + "fullDescription": { + "text": "Reports a missing 'title' element inside a 'head' section. Suggests adding a 'title' element. The title should describe the document. Based on WCAG 2.0: H25. Inspection ID: HtmlRequiredTitleElement", + "markdown": "Reports a missing `title` element inside a `head` section. Suggests adding a `title` element. The title should describe the document. Based on WCAG 2.0: [H25](https://www.w3.org/TR/WCAG20-TECHS/H25.html).\n\nInspection ID: HtmlRequiredTitleElement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlRequiredTitleElement", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML/Accessibility", + "index": 27, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlDeprecatedAttribute", + "shortDescription": { + "text": "Obsolete attribute" + }, + "fullDescription": { + "text": "Reports an obsolete HTML5 attribute. Inspection ID: HtmlDeprecatedAttribute", + "markdown": "Reports an obsolete HTML5 attribute.\n\nInspection ID: HtmlDeprecatedAttribute" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "HtmlDeprecatedAttribute", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlPresentationalElement", + "shortDescription": { + "text": "Presentational tag" + }, + "fullDescription": { + "text": "Reports a presentational HTML tag. Suggests replacing the presentational tag with a CSS or another tag. Inspection ID: HtmlPresentationalElement", + "markdown": "Reports a presentational HTML tag. Suggests replacing the presentational tag with a CSS or another tag.\n\nInspection ID: HtmlPresentationalElement" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "HtmlPresentationalElement", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 18, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.css", + "version": "252.24448.0", + "rules": [ + { + "id": "CssInvalidHtmlTagReference", + "shortDescription": { + "text": "Invalid type selector" + }, + "fullDescription": { + "text": "Reports a CSS type selector that matches an unknown HTML element. Inspection ID: CssInvalidHtmlTagReference", + "markdown": "Reports a CSS [type selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Type_selectors) that matches an unknown HTML element.\n\nInspection ID: CssInvalidHtmlTagReference" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidHtmlTagReference", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidCustomPropertyAtRuleDeclaration", + "shortDescription": { + "text": "Invalid @property declaration" + }, + "fullDescription": { + "text": "Reports a missing required syntax, inherits, or initial-value property in a declaration of a custom property. Inspection ID: CssInvalidCustomPropertyAtRuleDeclaration", + "markdown": "Reports a missing required [syntax](https://developer.mozilla.org/en-US/docs/web/css/@property/syntax), [inherits](https://developer.mozilla.org/en-US/docs/web/css/@property/inherits), or [initial-value](https://developer.mozilla.org/en-US/docs/web/css/@property/initial-value) property in a declaration of a custom property.\n\nInspection ID: CssInvalidCustomPropertyAtRuleDeclaration" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidCustomPropertyAtRuleDeclaration", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidFunction", + "shortDescription": { + "text": "Invalid function" + }, + "fullDescription": { + "text": "Reports an unknown CSS function or an incorrect function parameter. Inspection ID: CssInvalidFunction", + "markdown": "Reports an unknown [CSS function](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Functions) or an incorrect function parameter.\n\nInspection ID: CssInvalidFunction" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidFunction", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssMissingSemicolon", + "shortDescription": { + "text": "Missing semicolon" + }, + "fullDescription": { + "text": "Reports a missing semicolon at the end of a declaration. Inspection ID: CssMissingSemicolon", + "markdown": "Reports a missing semicolon at the end of a declaration.\n\nInspection ID: CssMissingSemicolon" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssMissingSemicolon", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Code style issues", + "index": 49, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssRedundantUnit", + "shortDescription": { + "text": "Redundant measure unit" + }, + "fullDescription": { + "text": "Reports a measure unit of a zero value where units are not required by the specification. Example: 'width: 0px' Inspection ID: CssRedundantUnit", + "markdown": "Reports a measure unit of a zero value where units are not required by the specification.\n\n**Example:**\n\n width: 0px\n\nInspection ID: CssRedundantUnit" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssRedundantUnit", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Code style issues", + "index": 49, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssMissingComma", + "shortDescription": { + "text": "Missing comma in selector list" + }, + "fullDescription": { + "text": "Reports a multi-line selector. Most likely this means that several single-line selectors are actually intended but a comma is missing at the end of one or several lines. Example: 'input /* comma has probably been forgotten */\n.button {\n margin: 1px;\n}' Inspection ID: CssMissingComma", + "markdown": "Reports a multi-line selector. Most likely this means that several single-line selectors are actually intended but a comma is missing at the end of one or several lines.\n\n**Example:**\n\n\n input /* comma has probably been forgotten */\n .button {\n margin: 1px;\n }\n\nInspection ID: CssMissingComma" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssMissingComma", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Probable bugs", + "index": 63, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidPropertyValue", + "shortDescription": { + "text": "Invalid property value" + }, + "fullDescription": { + "text": "Reports an incorrect CSS property value. Inspection ID: CssInvalidPropertyValue", + "markdown": "Reports an incorrect CSS property value.\n\nInspection ID: CssInvalidPropertyValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidPropertyValue", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssBrowserCompatibilityForProperties", + "shortDescription": { + "text": "Property is incompatible with selected browsers" + }, + "fullDescription": { + "text": "Reports a CSS property that is not supported by the specified browsers. Based on the MDN Compatibility Data. Inspection ID: CssBrowserCompatibilityForProperties", + "markdown": "Reports a CSS property that is not supported by the specified browsers. Based on the [MDN Compatibility Data](https://github.com/mdn/browser-compat-data).\n\nInspection ID: CssBrowserCompatibilityForProperties" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssBrowserCompatibilityForProperties", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidCustomPropertyAtRuleName", + "shortDescription": { + "text": "Invalid @property name" + }, + "fullDescription": { + "text": "Reports an invalid custom property name. Custom property name should be prefixed with two dashes. Example: '@property invalid-property-name {\n ...\n}\n\n@property --valid-property-name {\n ...\n}' Inspection ID: CssInvalidCustomPropertyAtRuleName", + "markdown": "Reports an invalid custom property name. Custom property name should be prefixed with two dashes.\n\n**Example:**\n\n\n @property invalid-property-name {\n ...\n }\n\n @property --valid-property-name {\n ...\n }\n\nInspection ID: CssInvalidCustomPropertyAtRuleName" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidCustomPropertyAtRuleName", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssConvertColorToHexInspection", + "shortDescription": { + "text": "Color could be replaced with #-hex" + }, + "fullDescription": { + "text": "Reports an 'rgb()', 'hsl()', or other color function. Suggests replacing a color function with an equivalent hexadecimal notation. Example: 'rgb(12, 15, 255)' After the quick-fix is applied: '#0c0fff'. Inspection ID: CssConvertColorToHexInspection", + "markdown": "Reports an `rgb()`, `hsl()`, or other color function.\n\nSuggests replacing a color function with an equivalent hexadecimal notation.\n\n**Example:**\n\n rgb(12, 15, 255)\n\nAfter the quick-fix is applied:\n\n #0c0fff.\n\nInspection ID: CssConvertColorToHexInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssConvertColorToHexInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssReplaceWithShorthandUnsafely", + "shortDescription": { + "text": "Properties may probably be replaced with a shorthand" + }, + "fullDescription": { + "text": "Reports a set of longhand CSS properties and suggests replacing an incomplete set of longhand CSS properties with a shorthand form, which is however not 100% equivalent in this case. For example, 2 properties: 'outline-color' and 'outline-style' may be replaced with a single 'outline'. Such replacement is not 100% equivalent because shorthands reset all omitted sub-values to their initial states. In this example, switching to the 'outline' shorthand means that 'outline-width' is also set to its initial value, which is 'medium'. This inspection doesn't handle full sets of longhand properties (when switching to shorthand is 100% safe). For such cases see the 'Properties may be safely replaced with a shorthand' inspection instead. Inspection ID: CssReplaceWithShorthandUnsafely", + "markdown": "Reports a set of longhand CSS properties and suggests replacing an incomplete set of longhand CSS properties with a shorthand form, which is however not 100% equivalent in this case.\n\n\nFor example, 2 properties: `outline-color` and `outline-style` may be replaced with a single `outline`.\nSuch replacement is not 100% equivalent because shorthands reset all omitted sub-values to their initial states.\nIn this example, switching to the `outline` shorthand means that `outline-width` is also set to its initial value,\nwhich is `medium`.\n\n\nThis inspection doesn't handle full sets of longhand properties (when switching to shorthand is 100% safe).\nFor such cases see the 'Properties may be safely replaced with a shorthand' inspection instead.\n\nInspection ID: CssReplaceWithShorthandUnsafely" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CssReplaceWithShorthandUnsafely", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnknownUnit", + "shortDescription": { + "text": "Unknown unit" + }, + "fullDescription": { + "text": "Reports an unknown unit. Inspection ID: CssUnknownUnit", + "markdown": "Reports an unknown unit.\n\nInspection ID: CssUnknownUnit" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnknownUnit", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidMediaFeature", + "shortDescription": { + "text": "Invalid media feature" + }, + "fullDescription": { + "text": "Reports an unknown CSS media feature or an incorrect media feature value. Inspection ID: CssInvalidMediaFeature", + "markdown": "Reports an unknown [CSS media feature](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries) or an incorrect media feature value.\n\nInspection ID: CssInvalidMediaFeature" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidMediaFeature", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssConvertColorToRgbInspection", + "shortDescription": { + "text": "Color could be replaced with rgb()" + }, + "fullDescription": { + "text": "Reports an 'hsl()' or 'hwb()' color function or a hexadecimal color notation. Suggests replacing such color value with an equivalent 'rgb()' or 'rgba()' color function. Example: '#0c0fff' After the quick-fix is applied: 'rgb(12, 15, 255)'. Inspection ID: CssConvertColorToRgbInspection", + "markdown": "Reports an `hsl()` or `hwb()` color function or a hexadecimal color notation.\n\nSuggests replacing such color value with an equivalent `rgb()` or `rgba()` color function.\n\n**Example:**\n\n #0c0fff\n\nAfter the quick-fix is applied:\n\n rgb(12, 15, 255).\n\nInspection ID: CssConvertColorToRgbInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssConvertColorToRgbInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnusedSymbol", + "shortDescription": { + "text": "Unused selector" + }, + "fullDescription": { + "text": "Reports a CSS class or an element IDs that appears in selectors but is not used in HTML. Note that complete inspection results are available only when running it via Code | Inspect Code or Code | Analyze Code | Run Inspection by Name. Due to performance reasons, style sheet files are not inspected on the fly. Inspection ID: CssUnusedSymbol", + "markdown": "Reports a CSS class or an element IDs that appears in selectors but is not used in HTML.\n\n\nNote that complete inspection results are available only when running it via **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name**.\nDue to performance reasons, style sheet files are not inspected on the fly.\n\nInspection ID: CssUnusedSymbol" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssUnusedSymbol", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssDeprecatedValue", + "shortDescription": { + "text": "Deprecated value" + }, + "fullDescription": { + "text": "Reports a deprecated CSS value. Suggests replacing the deprecated value with its valid equivalent. Inspection ID: CssDeprecatedValue", + "markdown": "Reports a deprecated CSS value. Suggests replacing the deprecated value with its valid equivalent.\n\nInspection ID: CssDeprecatedValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssDeprecatedValue", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssNonIntegerLengthInPixels", + "shortDescription": { + "text": "Non-integer length in pixels" + }, + "fullDescription": { + "text": "Reports a non-integer length in pixels. Example: 'width: 3.14px' Inspection ID: CssNonIntegerLengthInPixels", + "markdown": "Reports a non-integer length in pixels.\n\n**Example:**\n\n width: 3.14px\n\nInspection ID: CssNonIntegerLengthInPixels" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CssNonIntegerLengthInPixels", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Probable bugs", + "index": 63, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidImport", + "shortDescription": { + "text": "Misplaced @import" + }, + "fullDescription": { + "text": "Reports a misplaced '@import' statement. According to the specification, an '@import' rule must be defined at the top of the stylesheet, before any other at-rule (except '@charset' and '@layer') and style declarations, or it will be ignored. Inspection ID: CssInvalidImport", + "markdown": "Reports a misplaced `@import` statement.\n\n\nAccording to the [specification](https://developer.mozilla.org/en-US/docs/Web/CSS/@import),\nan `@import` rule must be defined at the top of the stylesheet, before any other at-rule\n(except `@charset` and `@layer`) and style declarations, or it will be ignored.\n\nInspection ID: CssInvalidImport" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidImport", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidAtRule", + "shortDescription": { + "text": "Unknown at-rule" + }, + "fullDescription": { + "text": "Reports an unknown CSS at-rule. Inspection ID: CssInvalidAtRule", + "markdown": "Reports an unknown [CSS at-rule](https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule).\n\nInspection ID: CssInvalidAtRule" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidAtRule", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnresolvedCustomProperty", + "shortDescription": { + "text": "Unresolved custom property" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a custom property among the arguments of the 'var()' function. Inspection ID: CssUnresolvedCustomProperty", + "markdown": "Reports an unresolved reference to a [custom property](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) among the arguments of the `var()` function.\n\nInspection ID: CssUnresolvedCustomProperty" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnresolvedCustomProperty", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssOverwrittenProperties", + "shortDescription": { + "text": "Overwritten property" + }, + "fullDescription": { + "text": "Reports a duplicated CSS property within a ruleset. Respects shorthand properties. Example: '.foo {\n margin-bottom: 1px;\n margin-bottom: 1px; /* duplicates margin-bottom */\n margin: 0; /* overrides margin-bottom */\n}' Inspection ID: CssOverwrittenProperties", + "markdown": "Reports a duplicated CSS property within a ruleset. Respects shorthand properties.\n\n**Example:**\n\n\n .foo {\n margin-bottom: 1px;\n margin-bottom: 1px; /* duplicates margin-bottom */\n margin: 0; /* overrides margin-bottom */\n }\n\nInspection ID: CssOverwrittenProperties" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssOverwrittenProperties", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnknownTarget", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference, for example, an incorrect path in an '@import' statement. Inspection ID: CssUnknownTarget", + "markdown": "Reports an unresolved file reference, for example, an incorrect path in an `@import` statement.\n\nInspection ID: CssUnknownTarget" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnknownTarget", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssNegativeValue", + "shortDescription": { + "text": "Negative property value" + }, + "fullDescription": { + "text": "Reports a negative value of a CSS property that is not expected to be less than zero, for example, object width or height. Inspection ID: CssNegativeValue", + "markdown": "Reports a negative value of a CSS property that is not expected to be less than zero, for example, object width or height.\n\nInspection ID: CssNegativeValue" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssNegativeValue", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssNoGenericFontName", + "shortDescription": { + "text": "Missing generic font family name" + }, + "fullDescription": { + "text": "Verifies that the 'font-family' property contains a generic font family name as a fallback alternative. Generic font family names are: 'serif', 'sans-serif', 'cursive', 'fantasy', and 'monospace'. Inspection ID: CssNoGenericFontName", + "markdown": "Verifies that the [font-family](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) property contains a generic font family name as a fallback alternative.\n\n\nGeneric font family names are: `serif`, `sans-serif`, `cursive`, `fantasy`,\nand `monospace`.\n\nInspection ID: CssNoGenericFontName" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssNoGenericFontName", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Probable bugs", + "index": 63, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnresolvedClassInComposesRule", + "shortDescription": { + "text": "Unresolved class in 'composes' rule" + }, + "fullDescription": { + "text": "Reports a CSS class reference in the 'composes' rule that cannot be resolved to any valid target. Example: '.className {/* ... */}\n\n .otherClassName {\n composes: className;\n }' Inspection ID: CssUnresolvedClassInComposesRule", + "markdown": "Reports a CSS class reference in the ['composes'](https://github.com/css-modules/css-modules#composition) rule that cannot be resolved to any valid target.\n\n**Example:**\n\n\n .className {/* ... */}\n\n .otherClassName {\n composes: className;\n }\n\nInspection ID: CssUnresolvedClassInComposesRule" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssUnresolvedClassInComposesRule", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidCharsetRule", + "shortDescription": { + "text": "Misplaced or incorrect @charset" + }, + "fullDescription": { + "text": "Reports a misplaced '@charset' at-rule or an incorrect charset value. Inspection ID: CssInvalidCharsetRule", + "markdown": "Reports a misplaced `@charset` at-rule or an incorrect charset value.\n\nInspection ID: CssInvalidCharsetRule" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidCharsetRule", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssReplaceWithShorthandSafely", + "shortDescription": { + "text": "Properties may be safely replaced with a shorthand" + }, + "fullDescription": { + "text": "Reports a set of longhand properties. Suggests replacing a complete set of longhand CSS properties with an equivalent shorthand form. For example, 4 properties: 'padding-top', 'padding-right', 'padding-bottom', and 'padding-left' can be safely replaced with a single 'padding' property. Note that this inspection doesn't show up if the set of longhand properties is incomplete (e.g. only 3 'padding-xxx' properties in a ruleset) because switching to a shorthand may change the result. For such cases consider the 'Properties may probably be replaced with a shorthand' inspection. Inspection ID: CssReplaceWithShorthandSafely", + "markdown": "Reports a set of longhand properties. Suggests replacing a complete set of longhand CSS properties with an equivalent shorthand form.\n\n\nFor example, 4 properties: `padding-top`, `padding-right`, `padding-bottom`, and\n`padding-left`\ncan be safely replaced with a single `padding` property.\n\n\nNote that this inspection doesn't show up if the set of longhand properties is incomplete\n(e.g. only 3 `padding-xxx` properties in a ruleset)\nbecause switching to a shorthand may change the result.\nFor such cases consider the 'Properties may probably be replaced with a shorthand'\ninspection.\n\nInspection ID: CssReplaceWithShorthandSafely" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "CssReplaceWithShorthandSafely", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS", + "index": 37, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssUnknownProperty", + "shortDescription": { + "text": "Unknown property" + }, + "fullDescription": { + "text": "Reports an unknown CSS property or a property used in a wrong context. Add the unknown property to the 'Custom CSS properties' list to skip validation. Inspection ID: CssUnknownProperty", + "markdown": "Reports an unknown CSS property or a property used in a wrong context.\n\nAdd the unknown property to the 'Custom CSS properties' list to skip validation.\n\nInspection ID: CssUnknownProperty" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssUnknownProperty", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidPseudoSelector", + "shortDescription": { + "text": "Invalid pseudo-selector" + }, + "fullDescription": { + "text": "Reports an incorrect CSS pseudo-class pseudo-element. Inspection ID: CssInvalidPseudoSelector", + "markdown": "Reports an incorrect CSS [pseudo-class](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes) [pseudo-element](https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements).\n\nInspection ID: CssInvalidPseudoSelector" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CssInvalidPseudoSelector", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CssInvalidNestedSelector", + "shortDescription": { + "text": "Invalid nested selector" + }, + "fullDescription": { + "text": "Reports a nested selector starting with an identifier or a functional notation. Inspection ID: CssInvalidNestedSelector", + "markdown": "Reports a nested selector starting with an identifier or a functional notation.\n\nInspection ID: CssInvalidNestedSelector" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CssInvalidNestedSelector", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "CSS/Invalid elements", + "index": 38, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.yaml", + "version": "252.24448.0", + "rules": [ + { + "id": "YAMLSchemaValidation", + "shortDescription": { + "text": "Validation by JSON Schema" + }, + "fullDescription": { + "text": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified. Scheme example: '{\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeNumberProperty: hello world' Inspection ID: YAMLSchemaValidation", + "markdown": "Reports inconsistencies between a YAML file and a JSON Schema if the schema is specified.\n\n**Scheme example:**\n\n\n {\n \"properties\": {\n \"SomeNumberProperty\": {\n \"type\": \"number\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeNumberProperty: hello world\n\nInspection ID: YAMLSchemaValidation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLSchemaValidation", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLIncompatibleTypes", + "shortDescription": { + "text": "Suspicious type mismatch" + }, + "fullDescription": { + "text": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions. Example: 'myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings' Inspection ID: YAMLIncompatibleTypes", + "markdown": "Reports a mismatch between a scalar value type in YAML file and types of the values in the similar positions.\n\n**Example:**\n\n\n myElements:\n - value1\n - value2\n - false # <- reported, because it is a boolean value, while other values are strings\n\nInspection ID: YAMLIncompatibleTypes" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLIncompatibleTypes", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLUnresolvedAlias", + "shortDescription": { + "text": "Unresolved alias" + }, + "fullDescription": { + "text": "Reports unresolved aliases in YAML files. Example: 'some_key: *unknown_alias' Inspection ID: YAMLUnresolvedAlias", + "markdown": "Reports unresolved aliases in YAML files.\n\n**Example:**\n\n\n some_key: *unknown_alias\n\nInspection ID: YAMLUnresolvedAlias" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLUnresolvedAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLSchemaDeprecation", + "shortDescription": { + "text": "Deprecated YAML key" + }, + "fullDescription": { + "text": "Reports deprecated keys in YAML files. Deprecation is checked only if there exists a JSON schema associated with the corresponding YAML file. Note that the deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard 'deprecationMessage' extension. Scheme deprecation example: '{\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }' The following is an example with the corresponding warning: 'SomeDeprecatedProperty: some value' Inspection ID: YAMLSchemaDeprecation", + "markdown": "Reports deprecated keys in YAML files.\n\nDeprecation is checked only if there exists a JSON schema associated with the corresponding YAML file.\n\nNote that the deprecation mechanism is not defined in the JSON Schema specification yet,\nand this inspection uses a non-standard `deprecationMessage` extension.\n\n**Scheme deprecation example:**\n\n\n {\n \"properties\": {\n \"SomeDeprecatedProperty\": {\n \"deprecationMessage\": \"Baz\",\n \"description\": \"Foo bar\"\n }\n }\n }\n\n**The following is an example with the corresponding warning:**\n\n\n SomeDeprecatedProperty: some value\n\nInspection ID: YAMLSchemaDeprecation" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "YAMLSchemaDeprecation", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLRecursiveAlias", + "shortDescription": { + "text": "Recursive alias" + }, + "fullDescription": { + "text": "Reports recursion in YAML aliases. Alias can't be recursive and be used inside the data referenced by a corresponding anchor. Example: 'some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor' Inspection ID: YAMLRecursiveAlias", + "markdown": "Reports recursion in YAML aliases.\n\nAlias can't be recursive and be used inside the data referenced by a corresponding anchor.\n\n**Example:**\n\n\n some_key: &some_anchor\n sub_key1: value1\n sub_key2: *some_anchor\n\nInspection ID: YAMLRecursiveAlias" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLRecursiveAlias", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLDuplicatedKeys", + "shortDescription": { + "text": "Duplicated YAML keys" + }, + "fullDescription": { + "text": "Reports duplicated keys in YAML files. Example: 'same_key: some value\n same_key: another value' Inspection ID: YAMLDuplicatedKeys", + "markdown": "Reports duplicated keys in YAML files.\n\n**Example:**\n\n\n same_key: some value\n same_key: another value\n\nInspection ID: YAMLDuplicatedKeys" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "YAMLDuplicatedKeys", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "YAMLUnusedAnchor", + "shortDescription": { + "text": "Unused anchor" + }, + "fullDescription": { + "text": "Reports unused anchors. Example: 'some_key: &some_anchor\n key1: value1' Inspection ID: YAMLUnusedAnchor", + "markdown": "Reports unused anchors.\n\n**Example:**\n\n\n some_key: &some_anchor\n key1: value1\n\nInspection ID: YAMLUnusedAnchor" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "YAMLUnusedAnchor", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "YAML", + "index": 45, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.less", + "version": "252.24448.0", + "rules": [ + { + "id": "LessUnresolvedMixin", + "shortDescription": { + "text": "Unresolved mixin" + }, + "fullDescription": { + "text": "Reports a reference to a Less mixin that is not resolved. Example: '* {\n .unknown-mixin();\n}' Inspection ID: LessUnresolvedMixin", + "markdown": "Reports a reference to a [Less mixin](http://lesscss.org/features/#mixins-feature) that is not resolved.\n\n**Example:**\n\n\n * {\n .unknown-mixin();\n }\n\nInspection ID: LessUnresolvedMixin" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LessUnresolvedMixin", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Less", + "index": 50, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LessUnresolvedVariable", + "shortDescription": { + "text": "Unresolved variable" + }, + "fullDescription": { + "text": "Reports a reference to a Less variable that is not resolved. Example: '* {\n margin: @unknown-var;\n}' Inspection ID: LessUnresolvedVariable", + "markdown": "Reports a reference to a [Less variable](http://lesscss.org/features/#variables-feature) that is not resolved.\n\n**Example:**\n\n\n * {\n margin: @unknown-var;\n }\n\nInspection ID: LessUnresolvedVariable" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "LessUnresolvedVariable", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Less", + "index": 50, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LessResolvedByNameOnly", + "shortDescription": { + "text": "Missing import" + }, + "fullDescription": { + "text": "Reports a reference to a variable or mixin that is declared in another file, which is not explicitly imported in the current file. Example: '* {\n margin: @var-in-other-file;\n}' Inspection ID: LessResolvedByNameOnly", + "markdown": "Reports a reference to a variable or mixin that is declared in another file, which is not explicitly [imported](http://lesscss.org/features/#import-atrules-feature) in the current file.\n\n**Example:**\n\n\n * {\n margin: @var-in-other-file;\n }\n\nInspection ID: LessResolvedByNameOnly" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LessResolvedByNameOnly", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Less", + "index": 50, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.intelliLang", + "version": "252.24448.0", + "rules": [ + { + "id": "InjectedReferences", + "shortDescription": { + "text": "Injected references" + }, + "fullDescription": { + "text": "Reports unresolved references injected by Language Injections. Example: '@Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist' Inspection ID: InjectedReferences", + "markdown": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n\nInspection ID: InjectedReferences" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "suppressToolId": "InjectedReferences", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 26, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.vue", + "version": "252.24448.0", + "rules": [ + { + "id": "VueDataFunction", + "shortDescription": { + "text": "Data function" + }, + "fullDescription": { + "text": "Reports a Vue component data property that is not a function. Suggests wrapping an object literal with a function. When defining a component, 'data' must be declared as a function that returns the initial data object, because the same definition will be used for creating numerous instances. If a plain object is still used for 'data', that very object will be shared by reference across all instances created! With a 'data' function, every time a new instance is created we can simply call it to return a fresh copy of the initial data. Inspection ID: VueDataFunction", + "markdown": "Reports a Vue component [data](https://vuejs.org/v2/api/#data) property that is not a function. Suggests wrapping an object literal with a function.\n\nWhen defining a component, `data` must be declared as a function that returns the initial data object, because the same definition will be used for creating numerous instances. If a plain object is still used for `data`, that very object will be shared by reference across all instances created! With a `data` function, every time a new instance is created we can simply call it to return a fresh copy of the initial data.\n\nInspection ID: VueDataFunction" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueDataFunction", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Reliability" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 54, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueUnrecognizedSlot", + "shortDescription": { + "text": "Unrecognized slot" + }, + "fullDescription": { + "text": "Reports an unrecognized Vue slot. Inspection ID: VueUnrecognizedSlot", + "markdown": "Reports an unrecognized Vue slot.\n\nInspection ID: VueUnrecognizedSlot" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "VueUnrecognizedSlot", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 54, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueMissingComponentImportInspection", + "shortDescription": { + "text": "Missing component import" + }, + "fullDescription": { + "text": "Reports Vue components, which require to be imported in Vue templates. It provides a quick fix to add the missing import. Inspection ID: VueMissingComponentImportInspection", + "markdown": "Reports Vue components, which require to be imported in Vue templates. It provides a quick fix to add the missing import.\n\nInspection ID: VueMissingComponentImportInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueMissingComponentImportInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 54, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueUnrecognizedDirective", + "shortDescription": { + "text": "Unrecognized directive" + }, + "fullDescription": { + "text": "Reports an unrecognized Vue directive. Inspection ID: VueUnrecognizedDirective", + "markdown": "Reports an unrecognized Vue directive.\n\nInspection ID: VueUnrecognizedDirective" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueUnrecognizedDirective", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 54, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueDuplicateTag", + "shortDescription": { + "text": "Duplicate template/script tag" + }, + "fullDescription": { + "text": "Reports multiple usages of the 'template' or 'script' tag in a Vue file. Vue Component specification indicates that each '*.vue' file can contain at most one 'template' or 'script' block at a time. Inspection ID: VueDuplicateTag", + "markdown": "Reports multiple usages of the `template` or `script` tag in a Vue file.\n\n[Vue Component specification](https://vue-loader.vuejs.org/spec.html) indicates that each `*.vue` file can contain at most one `template` or `script` block at a time.\n\nInspection ID: VueDuplicateTag" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueDuplicateTag", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 54, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VueDeprecatedSymbol", + "shortDescription": { + "text": "Deprecated symbol" + }, + "fullDescription": { + "text": "Reports a deprecated Vue symbol. Inspection ID: VueDeprecatedSymbol", + "markdown": "Reports a deprecated Vue symbol.\n\nInspection ID: VueDeprecatedSymbol" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "VueDeprecatedSymbol", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "Vue", + "index": 54, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.qodana", + "version": "252.24448.0", + "rules": [ + { + "id": "JsCoverageInspection", + "shortDescription": { + "text": "Check JavaScript and TypeScript source code coverage" + }, + "fullDescription": { + "text": "Reports methods, classes and files whose coverage is below a certain threshold. Inspection ID: JsCoverageInspection", + "markdown": "Reports methods, classes and files whose coverage is below a certain threshold.\n\nInspection ID: JsCoverageInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "JsCoverageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Code Coverage", + "index": 69, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclomaticComplexityInspection", + "shortDescription": { + "text": "Code metrics" + }, + "fullDescription": { + "text": "Calculates cyclomatic complexity. Inspection ID: CyclomaticComplexityInspection", + "markdown": "Calculates cyclomatic complexity.\n\nInspection ID: CyclomaticComplexityInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CyclomaticComplexityInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Unspecified" + } + }, + "relationships": [ + { + "target": { + "id": "Qodana", + "index": 71, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "intellij.webpack", + "version": "252.24448.0", + "rules": [ + { + "id": "WebpackConfigHighlighting", + "shortDescription": { + "text": "Webpack config compliance with JSON Schema" + }, + "fullDescription": { + "text": "Validates options in webpack config files (which name should start with `webpack`, e.g. `webpack.config.js`) against webpack options schema. Disable this inspection to turn off validation and code completion inside the configuration object. Inspection ID: WebpackConfigHighlighting", + "markdown": "Validates options in webpack config files (which name should start with \\`webpack\\`, e.g. \\`webpack.config.js\\`) against [webpack options schema](https://github.com/webpack/webpack/blob/master/schemas/WebpackOptions.json). \n\nDisable this inspection to turn off validation and code completion inside the configuration object.\n\nInspection ID: WebpackConfigHighlighting" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "WebpackConfigHighlighting", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "codeQualityCategory": "Sanity" + } + }, + "relationships": [ + { + "target": { + "id": "JavaScript and TypeScript/General", + "index": 12, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "tanvd.grazi", + "version": "252.24448.0", + "rules": [ + { + "id": "LanguageDetectionInspection", + "shortDescription": { + "text": "Natural language detection" + }, + "fullDescription": { + "text": "Detects natural languages and suggests enabling corresponding grammar and spelling checks. Inspection ID: LanguageDetectionInspection", + "markdown": "Detects natural languages and suggests enabling corresponding grammar and spelling checks.\n\nInspection ID: LanguageDetectionInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "LanguageDetectionInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 70, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrazieInspection", + "shortDescription": { + "text": "Grammar" + }, + "fullDescription": { + "text": "Reports grammar mistakes in your text. You can configure the inspection in Settings | Editor | Natural Languages | Grammar and Style. Inspection ID: GrazieInspection", + "markdown": "Reports grammar mistakes in your text. You can configure the inspection in [Settings \\| Editor \\| Natural Languages \\| Grammar and Style](settings://reference.settingsdialog.project.grazie).\n\nInspection ID: GrazieInspection" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "suppressToolId": "GrazieInspection", + "ideaSeverity": "GRAMMAR_ERROR", + "qodanaSeverity": "Info", + "codeQualityCategory": "Code Style" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 70, + "toolComponent": { + "name": "QDRUBY" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + } + ] + }, + "invocations": [ + { + "startTimeUtc": "2025-07-22T08:25:47.488174654Z", + "exitCode": 0, + "executionSuccessful": true + } + ], + "language": "en-US", + "versionControlProvenance": [ + { + "repositoryUri": "https://github.com/zitadel/client-ruby.git", + "revisionId": "a0f260ba89a7fe8f0971b21f5aed124fbf98f475", + "branch": "feat/implement-eap-qodana", + "properties": { + "repoUrl": "https://github.com/zitadel/client-ruby.git", + "lastAuthorName": "Mridang Agarwalla", + "vcsType": "Git", + "lastAuthorEmail": "mridang.agarwalla@gmail.com" + } + } + ], + "results": [ + { + "ruleId": "RbsMissingTypeSignature", + "kind": "fail", + "level": "note", + "message": { + "text": "Missing type signature for 'output_path'", + "markdown": "Missing type signature for 'output_path'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "spec/spec_helper.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 18, + "startColumn": 11, + "charOffset": 426, + "charLength": 11, + "snippet": { + "text": "output_path" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 16, + "startColumn": 1, + "charOffset": 344, + "charLength": 154, + "snippet": { + "text": " # rubocop:disable Style/Documentation\n module HTMLFormatterPatch\n def output_path\n File.join(SimpleCov.coverage_path, 'html')\n end" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "14fe501713fea3d2", + "equalIndicator/v1": "15ea438c3953c1a4ca6620569886fae6da7425d127a1bd40e4efa8250bcac3bd" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + }, + { + "ruleId": "RbsMissingTypeSignature", + "kind": "fail", + "level": "note", + "message": { + "text": "Missing type signature for 'output_path'", + "markdown": "Missing type signature for 'output_path'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "test/test_helper.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 17, + "startColumn": 11, + "charOffset": 425, + "charLength": 11, + "snippet": { + "text": "output_path" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 15, + "startColumn": 1, + "charOffset": 343, + "charLength": 154, + "snippet": { + "text": " # rubocop:disable Style/Documentation\n module HTMLFormatterPatch\n def output_path\n File.join(SimpleCov.coverage_path, 'html')\n end" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a2e97fd41fa61ff1", + "equalIndicator/v1": "7d15eef27108e005c285aa9af0f9af2c99fc6dc4ff9c0b33b6698204f9142c62" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + }, + { + "ruleId": "RbsMissingTypeSignature", + "kind": "fail", + "level": "note", + "message": { + "text": "Missing type signature for 'parse_xml_for'", + "markdown": "Missing type signature for 'parse_xml_for'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "spec/spec_helper.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 56, + "startColumn": 13, + "charOffset": 1250, + "charLength": 13, + "snippet": { + "text": "parse_xml_for" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 54, + "startColumn": 1, + "charOffset": 1221, + "charLength": 160, + "snippet": { + "text": " private\n\n def parse_xml_for(xml, suite, tests)\n suite_result = analyze_suite(tests)\n file_path = get_relative_path(tests.first)" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3a845f928046266a", + "equalIndicator/v1": "ab477965d209e4bc815295ba9cf53dfc744ca9ff68aa71be1f11d2f320b4995f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + }, + { + "ruleId": "RbsMissingTypeSignature", + "kind": "fail", + "level": "note", + "message": { + "text": "Missing type signature for 'parse_xml_for'", + "markdown": "Missing type signature for 'parse_xml_for'" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "test/test_helper.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 56, + "startColumn": 13, + "charOffset": 1299, + "charLength": 13, + "snippet": { + "text": "parse_xml_for" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 54, + "startColumn": 1, + "charOffset": 1270, + "charLength": 160, + "snippet": { + "text": " private\n\n def parse_xml_for(xml, suite, tests)\n suite_result = analyze_suite(tests)\n file_path = get_relative_path(tests.first)" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "cb2587990ca1a066", + "equalIndicator/v1": "e65510b4cac4eb4a1d01bfd264b07a84d8780bb38278ccdca53151413920826d" + }, + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + }, + { + "ruleId": "RubyMismatchedVariableType", + "kind": "fail", + "level": "warning", + "message": { + "text": "Expected a non-nilable type, got nilable instead", + "markdown": "Expected a non-nilable type, got nilable instead" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "lib/zitadel/client/auth/o_auth_authenticator.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 33, + "startColumn": 20, + "charOffset": 976, + "charLength": 3, + "snippet": { + "text": "nil" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 31, + "startColumn": 1, + "charOffset": 889, + "charLength": 181, + "snippet": { + "text": " super(open_id.host_endpoint)\n @open_id = open_id\n @token = nil\n @auth_session = auth_session\n @auth_scopes = auth_scopes.to_a.join(' ')" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "3c7730934362992e", + "equalIndicator/v1": "4bbe22b839b4af64a38edc4f79a1779d72970461ce5aee28fedd948068267b41" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + }, + { + "ruleId": "RubyResolve", + "kind": "fail", + "level": "warning", + "message": { + "text": "No such file to load", + "markdown": "No such file to load" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "test/test_helper.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 10, + "startColumn": 13, + "charOffset": 213, + "charLength": 6, + "snippet": { + "text": "'.env'" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 8, + "startColumn": 1, + "charOffset": 157, + "charLength": 149, + "snippet": { + "text": "\nWarning.ignore(:method_redefined, __dir__)\nDotenv.load('.env')\n\n# Override the HTMLFormatter so that it writes its report inside build/coverage/html" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "0ef4deefc33ff254", + "equalIndicator/v1": "07ce0311216675d157b2165e8dcacdde1268ddd5daac82b6b76a6d9dd774c260" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + }, + { + "ruleId": "RubyResolve", + "kind": "fail", + "level": "warning", + "message": { + "text": "No such file to load", + "markdown": "No such file to load" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "spec/spec_helper.rb", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 13, + "charOffset": 214, + "charLength": 6, + "snippet": { + "text": "'.env'" + }, + "sourceLanguage": "ruby" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 158, + "charLength": 149, + "snippet": { + "text": "\nWarning.ignore(:method_redefined, __dir__)\nDotenv.load('.env')\n\n# Override the HTMLFormatter so that it writes its report inside build/coverage/html" + }, + "sourceLanguage": "ruby" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "a2475af6ef7fc24d", + "equalIndicator/v1": "6cb0561d786703993112e168ea98dd5b51889a75f2059d7edec9faf21d52af54" + }, + "properties": { + "ideaSeverity": "WARNING", + "qodanaSeverity": "High", + "problemType": "REGULAR", + "tags": [ + "ruby" + ] + } + } + ], + "automationDetails": { + "id": "project/qodana/2025-07-22", + "guid": "d16bddc0-be33-4e90-8e83-4103ce50446a", + "properties": { + "jobUrl": "https://github.com/zitadel/client-ruby/actions/runs/16438771871", + "analysisKind": "regular" + } + }, + "newlineSequences": [ + "\r\n", + "\n" + ], + "properties": { + "configProfile": "recommended", + "deviceId": "200820300000000-5b95-0593-0a0f-c6c6812d636f", + "qodanaNewResultSummary": { + "moderate": 47, + "high": 3, + "total": 50 + } + } + } + ] +} \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index bdb0aaaa..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,194 +0,0 @@ -PATH - remote: . - specs: - zitadel-client (1.10.0) - oauth2 (~> 2.0) - typhoeus (~> 1.0, >= 1.0.1) - warning (~> 1.5.0) - zeitwerk (~> 2.5) - -GEM - remote: https://rubygems.org/ - specs: - activesupport (7.1.5.1) - base64 - benchmark (>= 0.3) - bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - logger (>= 1.4.2) - minitest (>= 5.1) - mutex_m - securerandom (>= 0.3) - tzinfo (~> 2.0) - ansi (1.5.0) - ast (2.4.3) - base64 (0.2.0) - benchmark (0.4.0) - bigdecimal (3.1.9) - builder (3.3.0) - concurrent-ruby (1.3.5) - connection_pool (2.5.3) - csv (3.3.4) - docile (1.4.1) - docker-api (2.4.0) - excon (>= 0.64.0) - multi_json - dotenv (3.1.8) - drb (2.2.1) - ethon (0.16.0) - ffi (>= 1.15.0) - excon (1.2.5) - logger - faraday (2.13.1) - faraday-net_http (>= 2.0, < 3.5) - json - logger - faraday-net_http (3.4.0) - net-http (>= 0.5.0) - ffi (1.17.1) - fileutils (1.7.3) - hashie (5.0.0) - i18n (1.14.7) - concurrent-ruby (~> 1.0) - json (2.11.3) - jwt (2.10.1) - base64 - language_server-protocol (3.17.0.4) - lint_roller (1.1.0) - listen (3.9.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - logger (1.7.0) - minitest (5.25.5) - minitest-hooks (1.5.2) - minitest (> 5.3) - minitest-reporters (1.7.1) - ansi - builder - minitest (>= 5.0) - ruby-progressbar - multi_json (1.15.0) - multi_xml (0.6.0) - mutex_m (0.3.0) - net-http (0.6.0) - uri - oauth2 (2.0.12) - faraday (>= 0.17.3, < 4.0) - jwt (>= 1.0, < 4.0) - logger (~> 1.2) - multi_xml (~> 0.5) - rack (>= 1.2, < 4) - snaky_hash (~> 2.0, >= 2.0.3) - version_gem (>= 1.1.8, < 3) - parallel (1.27.0) - parser (3.3.8.0) - ast (~> 2.4.1) - racc - prism (1.4.0) - racc (1.8.1) - rack (3.1.16) - rainbow (3.1.1) - rake (13.2.1) - rb-fsevent (0.11.2) - rb-inotify (0.11.1) - ffi (~> 1.0) - rbs (3.6.1) - logger - regexp_parser (2.10.0) - rexml (3.4.1) - rubocop (1.75.5) - json (~> 2.3) - language_server-protocol (~> 3.17.0.2) - lint_roller (~> 1.1.0) - parallel (~> 1.10) - parser (>= 3.3.0.2) - rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.44.0, < 2.0) - ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.44.1) - parser (>= 3.3.7.2) - prism (~> 1.4) - rubocop-minitest (0.38.0) - lint_roller (~> 1.1) - rubocop (>= 1.75.0, < 2.0) - rubocop-ast (>= 1.38.0, < 2.0) - rubocop-rake (0.7.1) - lint_roller (~> 1.1) - rubocop (>= 1.72.1) - ruby-progressbar (1.13.0) - securerandom (0.3.2) - simplecov (0.22.0) - docile (~> 1.1) - simplecov-html (~> 0.11) - simplecov_json_formatter (~> 0.1) - simplecov-cobertura (2.1.0) - rexml - simplecov (~> 0.19) - simplecov-html (0.13.1) - simplecov_json_formatter (0.1.4) - snaky_hash (2.0.3) - hashie (>= 0.1.0, < 6) - version_gem (>= 1.1.8, < 3) - steep (1.7.1) - activesupport (>= 5.1) - concurrent-ruby (>= 1.1.10) - csv (>= 3.0.9) - fileutils (>= 1.1.0) - json (>= 2.1.0) - language_server-protocol (>= 3.15, < 4.0) - listen (~> 3.0) - logger (>= 1.3.0) - parser (>= 3.1) - rainbow (>= 2.2.2, < 4.0) - rbs (>= 3.5.0.pre) - securerandom (>= 0.1) - strscan (>= 1.0.0) - terminal-table (>= 2, < 4) - strscan (3.1.5) - terminal-table (3.0.2) - unicode-display_width (>= 1.1.1, < 3) - testcontainers (0.2.0) - testcontainers-core (= 0.2.0) - testcontainers-core (0.2.0) - docker-api (~> 2.2) - typhoeus (1.4.1) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - unicode-display_width (2.6.0) - uri (1.0.3) - version_gem (1.1.8) - warning (1.5.0) - zeitwerk (2.6.18) - -PLATFORMS - arm64-darwin-23 - x86_64-linux - -DEPENDENCIES - dotenv - minitest - minitest-hooks - minitest-reporters - oauth2 (>= 2.0.12) - rake - rbs - rubocop - rubocop-minitest - rubocop-rake - simplecov - simplecov-cobertura - steep (~> 1.7.0) - testcontainers - typhoeus - warning - zeitwerk - zitadel-client! - -BUNDLED WITH - 2.2.33 diff --git a/qodana.yaml b/qodana.yaml index c18cd1ff..0e4f9108 100644 --- a/qodana.yaml +++ b/qodana.yaml @@ -8,5 +8,12 @@ exclude: paths: - lib/zitadel/client/api - lib/zitadel/client/models + - name: RbsMissingTypeSignature + paths: + - test + - spec + +bootstrap: | + bundle install -linter: jetbrains/qodana-php:2025.1 +linter: jetbrains/qodana-ruby:2025.2-eap-ruby3.4-privileged diff --git a/test/zitadel/client/api_client_test.rb b/test/zitadel/client/api_client_test.rb index 9d4fb4ac..e0c90c0c 100644 --- a/test/zitadel/client/api_client_test.rb +++ b/test/zitadel/client/api_client_test.rb @@ -60,9 +60,11 @@ def test_assert_headers_and_content_type 'Authorization' => { equalTo: 'Bearer mm' }, + # rubocop:disable Layout/LineLength 'User-Agent' => { - matches: '^zitadel-client/\\d\\.\\d\\.\\d \\(lang=ruby; lang_version=[^;]+; os=[^;]+; arch=[^;]+\\)$' + matches: '^zitadel-client/\\d+\\.\\d+\\.\\d+([.-][a-zA-Z0-9]+(\\.\\d+)?)? \\(lang=ruby; lang_version=[^;]+; os=[^;]+; arch=[^;]+\\)$' } + # rubocop:enable Layout/LineLength } }, response: {