Custom YAML profiles
Starting from version 2023.2, you can create and configure Qodana profiles using YAML. Qodana also provides several improvements related to profile configuration, such as:
Support for file paths and scopes
Support for inspection parameters
Profile relationship, so profiles can be extended and included
This sample shows how you can fine-tune Qodana for your needs.
This sample consists of several nodes:
The profile that will serve as a basis for your profile configuration
Name of the inspection profile
Include an existing file-based profile into your profile
Inspection groups that need to included or excluded in your profile
List of changes applied for
baseProfile block lets you specify the profile that will serve as a basis for your profile configuration. It can accept the following values:
The default profile taken from the JetBrains IDE
The profile is basically similar to
Any name of an XML or YAML profile contained in the
The default Qodana profile, a subset of the
The default Qodana profile implementing the default profiles of JetBrains IDEs
Severities and parameters of inspections are taken from
If this parameter is missing, Qodana will employ the
Project Default profile, so all settings applied in your custom profile will override such settings contained in
Arbitrary name for your profile.
groups block is a list of user-defined groups. Here, you can combine inspection categories and single inspections, and then configure their usage in the
Each group definition can include or exclude other groups or single inspections.
You can use the exclamation mark character (
!) to negate a group or a category. For example, you can exclude a specific category usage in a group that will be included.
Here is the sample containing the
EnabledInspections group defined by a user:
This sample contains the following properties:
ID of the group
List of included and excluded inspections in this group
List of included and excluded groups in this group
Unique group identifier.
In case two groups are defined under the same
groupId, the latest group met in the file will be employed. This rule also works for all included files because the settings contained in the included files are considered prior to the settings laid out in the current file.
The list of inspections included in the group.
The list of group IDs with possible exclamation mark character (
groups lists several values:
Include all inspections. Besides that, you can also use
Name of the inspection category in the
Name of the existing user-defined group, or a group from an included profile
Negate the existing
By default, Qodana uses severity levels inherited from the JetBrains IDEs shown in this table:
inspections, you can:
Enable or disable a specific group or an inspection
Define the order of applying these settings
Define the paths or scopes to be ignored by the specific group or the inspection
Change severity levels of the specific group or the inspection
Configure inspection options
This sample contains several properties:
The ID of the group from the
The ID of the inspection
Severity level that will be assigned to a group of inspections or a single inspection. For example, you can specify
Specify whether the group or the inspection is enabled in the profile. Accepts either
List of options that you can configure for a specific inspection
Contains the list of relative paths to included profiles.
include block is not related to
baseProfile contains no values, it is set to
To overview the default profile, in the JetBrains IDE navigate to Settings | Editor | Inspections and select the
Default profile in the Profile drop-down selector.
File contents are included in the order of appearance, thus becoming part of your profile. This means that the settings of the included files are used prior to the settings specified in your custom profile.
Suppose, you have the
foo.yaml profile enables the
bar.yaml profile disables the
You can include these two files in the custom profile and disable
In this case, the effective profile configuration read by Qodana will look like this:
Here you can find several examples of profile configuration. The Set up a profile section explains how to run your profile while inspecting code.
Exclude an inspection
This sample shows how you can exclude the
PhpDeprecationInspection inspection from the Qodana for PHP linter:
Alternatively, you can exclude the
PhpDeprecationInspection inspection using
You can use the
ignore block to ignore specific scopes and paths while inspecting your code.
In the sample below, the
vendor/** value employs glob patterns for ignoring the contents of the
vendor directory contained in your project root.
The scope definition
scope#file:*.js:testData//* ignores all files with the
.js extension recursively contained in the
Create a profile from scratch
baseProfile, this configuration defines the empty profile, and then it includes only the
Java/Data flow inspection group from the Qodana for JVM linter.
Override the existing profile
Filter by severity
This sample includes all inspections with the
WEAK WARNING severity level while inspecting Java code:
You can also apply severity level to a specific inspection:
Configure inspection options
Several inspections provide configuration options. You can find the list of available options on GitHub.
For example, in case of the
MissingOverrideAnnotation inspection you can find the
This is how you can override these options in your profile:
Set up a profile
To learn how to employ the configured profile, see the Set up a profile section.