// This file is part of Arduino Lint.
//
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License, either
// version 3 of the License, or (at your option) any later version.
// This license covers the main part of Arduino Lint.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to
// modify or otherwise use the software for commercial activities involving the
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to license@arduino.cc.

/*
Package ruleconfiguration defines the configuration of each rule:
- metadata
- output template
- under which conditions it's enabled
- the level of a failure
- which function implements it
*/
package ruleconfiguration

import (
	"github.com/arduino/arduino-lint/internal/configuration/rulemode"
	"github.com/arduino/arduino-lint/internal/project/projecttype"
	"github.com/arduino/arduino-lint/internal/rule/rulefunction"
)

// Type is the type for rule configurations.
type Type struct {
	ProjectType      projecttype.Type // The project type the rule applies to.
	SuperprojectType projecttype.Type // The superproject type requirement for the rule.
	// The following fields provide arbitrary text for the tool output associated with each rule:
	Category        string
	Subcategory     string
	ID              string // Unique rule identifier: <project type identifier (L|S|P|I)><category identifier><number>
	Brief           string // Short description of the rule.
	Description     string // Verbose description of the rule.
	MessageTemplate string // The warning/error message template displayed when the rule is violated. Will be filled by rule function output.
	Reference       string // URL to visit for more information about the rule subject.
	// The following fields define under which tool configuration modes the rule will run:
	DisableModes []rulemode.Type // Rule is disabled when tool is in any of these modes.
	EnableModes  []rulemode.Type // Rule is only enabled when tool is in one of these modes.
	// The following fields define the rule level in each configuration mode:
	InfoModes    []rulemode.Type   // Failure of the rule only results in an informational message.
	WarningModes []rulemode.Type   // Failure of the rule is considered a warning.
	ErrorModes   []rulemode.Type   // Failure of the rule is considered an error.
	RuleFunction rulefunction.Type // The function that implements the rule.
}

// Configurations returns the slice of rule configurations.
func Configurations() []Type {
	return configurations
}

// configurations is an array of structs that define the configuration of each rule.
var configurations = []Type{
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "general",
		ID:               "LS001",
		Brief:            "invalid library",
		Description:      "The path does not contain a valid Arduino library.",
		MessageTemplate:  "Path does not contain a valid Arduino library.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryInvalid,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "root folder",
		ID:               "LS002",
		Brief:            "folder name too long",
		Description:      "The library root folder name exceeds the maximum length supported by the Arduino development tools. This will be problematic for people doing manual installation of the library.",
		MessageTemplate:  "Folder name {{.}} exceeds maximum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-root-folder",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryFolderNameGTMaxLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "root folder",
		ID:               "LS003",
		Brief:            "prohibited character in folder name",
		Description:      "The library root folder name contains prohibited characters. This will be problematic for people doing manual installation of the library.",
		MessageTemplate:  "Prohibited character(s) in folder name: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-root-folder",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProhibitedCharactersInLibraryFolderName,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "structure",
		Subcategory:      "miscellaneous",
		ID:               "LS004",
		Brief:            "submodule",
		Description:      `A [Git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) was found under the library folder. Library Manager installations and installations of libraries downloaded via GitHub's "Download ZIP" feature will only contain an empty folder in place of the submodule.`,
		MessageTemplate:  `Git submodule detected. Library Manager installations and installations from GitHub's "Download ZIP" will only contain an empty folder in place of the submodule.`,
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       nil,
		RuleFunction:     rulefunction.LibraryHasSubmodule,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "miscellaneous",
		ID:               "LS005",
		Brief:            "symlink",
		Description:      "A symlink was found under the library folder. Symlinks cause difficulties for Windows users due to restrictions on their use. The presence of a symlink blocks addition to the Arduino Library Manager index.",
		MessageTemplate:  "Symlink(s) found. Symlinks cause difficulties for Windows users. These block addition to the Arduino Library Manager index:\n{{.}}",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.LibraryManagerIndexing},
		RuleFunction:     rulefunction.LibraryContainsSymlinks,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "miscellaneous",
		ID:               "LS006",
		Brief:            ".development file",
		Description:      "A `.development` file was found in the library root folder. Presence of this file blocks addition to the Library Manager index.",
		MessageTemplate:  ".development flag file found. This file allows users to accidentally modify examples. Presence of this file blocks addition to the Library Manager index.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#development-flag-file",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.LibraryManagerIndexing, rulemode.Strict},
		RuleFunction:     rulefunction.LibraryHasDotDevelopmentFile,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "structure",
		Subcategory:      "miscellaneous",
		ID:               "LS007",
		Brief:            ".exe file",
		Description:      "A file with `.exe` file extension was found under the library folder. Presence of this file blocks addition to the Library Manager index.",
		MessageTemplate:  ".exe file(s) found. Presence of these files blocks addition to the Library Manager index:\n{{.}}",
		Reference:        "",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.LibraryManagerIndexing},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryHasExe,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "source code",
		ID:               "LS008",
		Brief:            "name-header mismatch",
		Description:      "The match between the `library.properties` `name` field and the filename in an `#include` directive is a factor in the library's [dependency resolution priority](https://arduino.github.io/arduino-cli/latest/sketch-build-process/#dependency-resolution). It's recommended for the primary header filename to match the library name.",
		MessageTemplate:  "No header file found matching library name ({{.}}). Best practices are for primary header filename to match library name.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        []rulemode.Type{rulemode.Permissive},
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       nil,
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldHeaderMismatch,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "source code",
		ID:               "LS009",
		Brief:            "src folder case",
		Description:      "The library's source subfolder name has incorrect case. This folder must be named exactly `src` in order for the library to work on case sensitive file systems (e.g., Linux).",
		MessageTemplate:  "Incorrect src folder name case: {{.}}. This will cause the library to not be recognized on case-sensitive file systems.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-root-folder",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.IncorrectLibrarySrcFolderNameCase,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "source code",
		ID:               "LS010",
		Brief:            "recursive with utility folder",
		Description:      "A library with \"1.5 format\" (recursive layout) contains a subfolder named `utility`. Although the `utility` folder has special treatment in libraries with the old \"1.5 format\" (flat layout), it is not supported in libraries of the new layout.",
		MessageTemplate:  `Utility folder found in "1.5" format library. Compilation of this folder is only supported on "1.0" format libraries.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.RecursiveLibraryWithUtilityFolder,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "extras folder",
		ID:               "LS011",
		Brief:            "incorrect extras folder name",
		Description:      "A subfolder was found under the library root with a name similar to `extras`. The `extras` subfolder has been designated as the location for any supplemental files for the library. The name must be spelled exactly `extras`.",
		MessageTemplate:  "Potentially misspelled extras folder name found: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#extra-documentation",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MisspelledExtrasFolderName,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "extras folder",
		ID:               "LS012",
		Brief:            "extras folder name case",
		Description:      "The library's extras subfolder name has incorrect case. The `extras` subfolder has been designated as the location for any supplemental files for the library. The folder name must be spelled exactly `extras`",
		MessageTemplate:  "Incorrect extras folder name case: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#extra-documentation",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.IncorrectExtrasFolderNameCase,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "general",
		ID:               "LP001",
		Brief:            "missing library.properties",
		Description:      "The `library.properties` file provides metadata for Arduino libraries. Although not required for 1.0 format libraries (AKA \"legacy\") which are not in the Library Manager index, this metadata is useful, hence recommended.",
		MessageTemplate:  "Library has no library.properties metadata file. This file provides useful information and is required for admission to the Library Manager index.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-metadata",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.LibraryManagerIndexing, rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "general",
		ID:               "LP002",
		Brief:            "incorrect library.properties file name",
		Description:      "A file was found under the library root with a name similar to `library.properties`. The `library.properties` file provides metadata for Arduino libraries. The file name must be spelled exactly `library.properties`",
		MessageTemplate:  "Incorrectly spelled library.properties file name found: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-metadata",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MisspelledLibraryPropertiesFileName,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "general",
		ID:               "LP003",
		Brief:            "library.properties file name case",
		Description:      "The library's metadata file has incorrect case. This causes \"1.5\" format (AKA \"recursive layout\") libraries to not be recognized on case-sensitive file systems. The file name must be spelled exactly `library.properties`",
		MessageTemplate:  "Incorrect library.properties file name case: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-metadata",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.IncorrectLibraryPropertiesFileNameCase,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "general",
		ID:               "LP004",
		Brief:            "redundant library.properties",
		Description:      "The library contains a `library.properties` file in a subfolder. Only the file in the root of the library is used by the Arduino development tools for library metadata. Superfluous `library.properties` files can result in confusion or unnecessary maintenance effort.",
		MessageTemplate:  "Redundant library.properties file found at {{.}}. Only the file in the root of the library is used.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-metadata",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.RedundantLibraryProperties,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "general",
		ID:               "LP005",
		Brief:            "library.properties format",
		Description:      "The `library.properties` file provides metadata for Arduino libraries. This file has a specific format that must be followed in order for the library to be valid.",
		MessageTemplate:  "library.properties has an invalid format: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesFormat,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "general",
		ID:               "LP006",
		Brief:            "misspelled library.properties field",
		Description:      "A field was found in the `library.properties` metadata file with a name similar, but not matching, one of the standard fields.",
		MessageTemplate:  "Potentially misspelled library.properties field name detected.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesMisspelledOptionalField,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP007",
		Brief:            "missing name",
		Description:      "The `name` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing name field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP008",
		Brief:            "name < min length",
		Description:      "The `name` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties name value is less than minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP009",
		Brief:            "name > max length",
		Description:      "The `name` field in the library's `library.properties` metadata file is greater than the maximum length.",
		MessageTemplate:  "library.properties name value {{.}} is longer than maximum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldGTMaxLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP010",
		Brief:            "name > recommended length",
		Description:      "The `name` field in the library's `library.properties` metadata file is longer than the recommended length. As the unique identifier for the library, the name will be typed by the users of command line tools (e.g., `arduino-cli lib install Servo`). For this reason, it is best practices to avoid unnecessary name length.",
		MessageTemplate:  "library.properties name value {{.}} is longer than the recommended length of 32 characters.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldGTRecommendedLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP011",
		Brief:            "prohibited character in name",
		Description:      "The `name` field in the library's `library.properties` metadata file contains a prohibited character.",
		MessageTemplate:  "Prohibited character(s) in library.properties name value: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldDisallowedCharacters,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP012",
		Brief:            `name starts with "Arduino"`,
		Description:      "The `name` field in the library's `library.properties` metadata file starts with \"Arduino\" (case insensitive). Libraries with this name prefix are only allowed in Library Manager under one of the following conditions:\n\n- official libraries\n- 3rd party libraries added to the Library Manager index prior to the enactment of this rule\n\nIf the former, configure Arduino Lint in [\"official\" mode](https://arduino.github.io/arduino-lint/latest/#environment-variables).\nIf the latter, use [the `--library-manager=update` flag](https://arduino.github.io/arduino-lint/latest/commands/arduino-lint/#options)",
		MessageTemplate:  `Library name {{.}} starts with "Arduino". These names are reserved for official libraries.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldStartsWithArduino,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP013",
		Brief:            "name missing official prefix",
		Description:      "The `name` field in the library's `library.properties` metadata file is missing the \"Arduino_\" prefix. The names of all new official libraries must have this prefix.",
		MessageTemplate:  `Library name {{.}} is missing the "Arduino_" prefix. The names of all new official libraries must have this prefix.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      []rulemode.Type{rulemode.Official},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldMissingOfficialPrefix,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP014",
		Brief:            `name contains "Arduino"`,
		Description:      "The `name` field in the library's `library.properties` metadata file contains \"Arduino\" (case insensitive). This is usually implicit, only adding unnecessary length to the name.",
		MessageTemplate:  `Library name {{.}} contains "Arduino". This is superfluous.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldContainsArduino,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP015",
		Brief:            "name contains spaces",
		Description:      "The `name` field in the library's `library.properties` metadata file contains spaces. It's recommended that the name value, installation folder, and primary header filename all match. Since spaces are not allowed in library folder or file names, this is not possible when the name contains spaces.",
		MessageTemplate:  "library.properties name {{.}} contains spaces. Although supported, best practices is to not use spaces.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldHasSpaces,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP016",
		Brief:            `name contains "library"`,
		Description:      "The `name` field in the library's `library.properties` metadata file contains \"library\" (case insensitive). This is implicit, only adding unnecessary length to the name.",
		MessageTemplate:  `Library name {{.}} contains "library". This is superfluous.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldContainsLibrary,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP017",
		Brief:            "duplicate name",
		Description:      "The `name` field in the library's `library.properties` metadata file is in use by a library in the Library Manager index. A library must have a unique name value in order to be accepted into the Library Manager index.\n\nThis requirement only applies to the library.properties name value. There is no requirement to change the repository or header file names.\n\nIf your library is already in the index, use [the `--library-manager update` flag](https://arduino.github.io/arduino-lint/latest/commands/arduino-lint/#options).",
		MessageTemplate:  "Library name {{.}} is in use by a library in the Library Manager index. Each library must have a unique name value. If your library is already in the index, use the \"--library-manager update\" flag.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      []rulemode.Type{rulemode.LibraryManagerSubmission},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldDuplicate,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "library.properties",
		Subcategory:      "name field",
		ID:               "LP018",
		Brief:            "not in LM index",
		Description:      "The library name (as defined by `name` field in [the `library.properties` metadata file](https://arduino.github.io/arduino-cli/latest/library-specification/#library-metadata)) was not found in the Library Manager index, but Arduino Lint was run in the [`--library-manager update` mode](https://arduino.github.io/arduino-lint/latest/commands/arduino-lint/#options), indicating that it was expected there.\n\nBecause the `name` value is the identifier used to install the library and define dependencies, it is not allowed to change after the library has been added to the index.",
		MessageTemplate:  "Library name {{.}} not found in the Library Manager index. Library names are not allowed to change after being added to the index.",
		Reference:        "https://github.com/arduino/library-registry/blob/main/FAQ.md#how-can-i-change-a-librarys-name",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      []rulemode.Type{rulemode.LibraryManagerIndexed},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesNameFieldNotInIndex,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "version field",
		ID:               "LP019",
		Brief:            "missing version field",
		Description:      "The `version` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing version field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesVersionFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "version field",
		ID:               "LP020",
		Brief:            "invalid version",
		Description:      "The `version` field in the library's `library.properties` metadata file is invalid. It must be compliant with \"relaxed semver\".",
		MessageTemplate:  "library.properties version value {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesVersionFieldNonRelaxedSemver,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "version field",
		ID:               "LP021",
		Brief:            "non-semver version",
		Description:      "The `version` field in the library's `library.properties` metadata file is not compliant with the \"semver\" specification. Although not required, use of the standard semver version format is recommended.",
		MessageTemplate:  "library.properties version value {{.}} is not compliant with the semver specification.",
		Reference:        "https://semver.org/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesVersionFieldNonSemver,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "library.properties",
		Subcategory:      "version field",
		ID:               "LP022",
		Brief:            "tag mismatch",
		Description:      "The latest [Git tag](https://git-scm.com/book/en/v2/Git-Basics-Tagging) appears to be greater than the `version` field in the library's `library.properties` metadata file. The Library Manager indexer will reject any tag that has a `library.properties` `version` value equal to a previous tag in the index.",
		MessageTemplate:  "The latest Git tag appears to be greater than the library.properties version value: {{.}}. You must update the version value before making the tag.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      []rulemode.Type{rulemode.LibraryManagerIndexed},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesVersionFieldBehindTag,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "author field",
		ID:               "LP023",
		Brief:            "missing author field",
		Description:      "The `author` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing author field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesAuthorFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "author field",
		ID:               "LP024",
		Brief:            "author < min length",
		Description:      "The `author` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties author value is less than minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesAuthorFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "maintainer field",
		ID:               "LP025",
		Brief:            "missing maintainer field",
		Description:      "The `maintainer` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing maintainer field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesMaintainerFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "maintainer field",
		ID:               "LP026",
		Brief:            "maintainer < min length",
		Description:      "The `maintainer` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties maintainer value is less than minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesMaintainerFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "maintainer field",
		ID:               "LP027",
		Brief:            `maintainer starts with "Arduino"`,
		Description:      "The `maintainer` field in the library's `library.properties` metadata file starts with \"Arduino\" (case insensitive). 3rd party libraries are not maintained by Arduino.\n\nIf the library is maintained by Arduino, configure Arduino Lint in [\"official\" mode](https://arduino.github.io/arduino-lint/latest/#environment-variables).",
		MessageTemplate:  `library.properties maintainer value {{.}} starts with "Arduino". 3rd party libraries are not maintained by Arduino.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesMaintainerFieldStartsWithArduino,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "maintainer field",
		ID:               "LP057",
		Brief:            `maintainer contains "Arduino"`,
		Description:      "The `maintainer` field in the library's `library.properties` metadata file contains \"Arduino\" (case insensitive). 3rd party libraries are not maintained by Arduino.\n\nIf the library is maintained by Arduino, configure Arduino Lint in [\"official\" mode](https://arduino.github.io/arduino-lint/latest/#environment-variables).",
		MessageTemplate:  `library.properties maintainer value {{.}} contains "Arduino". 3rd party libraries are not maintained by Arduino.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesMaintainerFieldContainsArduino,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "email field",
		ID:               "LP028",
		Brief:            `"email" used as alias for "maintainer"`,
		Description:      "The library's `library.properties` metadata file uses the deprecated `email` field instead of the standard `maintainer`.",
		MessageTemplate:  `library.properties "email" field used as alias for "maintainer". This is deprecated.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesEmailFieldAsMaintainerAlias,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "email field",
		ID:               "LP029",
		Brief:            "email < min length",
		Description:      "The `email` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties email value is less than minimum length.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesEmailFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "email field",
		ID:               "LP030",
		Brief:            `email starts with "Arduino"`,
		Description:      "The `maintainer` field in the library's `library.properties` metadata file starts with \"Arduino\" (case insensitive). 3rd party libraries are not maintained by Arduino.",
		MessageTemplate:  `library.properties email value {{.}} starts with "Arduino". 3rd party libraries are not maintained by Arduino.`,
		Reference:        "",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesEmailFieldStartsWithArduino,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "sentence field",
		ID:               "LP031",
		Brief:            "missing sentence field",
		Description:      "The `sentence` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing sentence field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesSentenceFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "sentence field",
		ID:               "LP032",
		Brief:            "sentence < min length",
		Description:      "The `sentence` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties sentence value is less than minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesSentenceFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "sentence field",
		ID:               "LP033",
		Brief:            "sentence spell check",
		Description:      "The `sentence` field in the library's `library.properties` metadata file contains a commonly misspelled word.",
		MessageTemplate:  "A commonly misspelled word was found in the library.properties sentence field. Suggested correction: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       nil,
		RuleFunction:     rulefunction.LibraryPropertiesSentenceFieldSpellCheck,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "paragraph field",
		ID:               "LP034",
		Brief:            "missing paragraph field",
		Description:      "The `paragraph` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing paragraph field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesParagraphFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "paragraph field",
		ID:               "LP035",
		Brief:            "paragraph spell check",
		Description:      "The `paragraph` field in the library's `library.properties` metadata file contains a commonly misspelled word.",
		MessageTemplate:  "A commonly misspelled word was found in the library.properties paragraph field. Suggested correction: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       nil,
		RuleFunction:     rulefunction.LibraryPropertiesParagraphFieldSpellCheck,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "paragraph field",
		ID:               "LP036",
		Brief:            "paragraph repeats sentence",
		Description:      "The `paragraph` field in the library's `library.properties` metadata file repeats the `sentence` field. These are displayed together so redundancy is not needed.",
		MessageTemplate:  "The library.properties paragraph field repeats the sentence field. These are displayed together so redundancy is not needed.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesParagraphFieldRepeatsSentence,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "category field",
		ID:               "LP037",
		Brief:            "missing category field",
		Description:      "The `category` field is missing from the library's `library.properties` metadata file.This can cause a warning and results in the default \"Uncategorized\" category being used.",
		MessageTemplate:  "Missing category field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesCategoryFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "category field",
		ID:               "LP038",
		Brief:            "invalid category value",
		Description:      "The `category` field in the library's `library.properties` metadata file has an invalid value. This can cause a warning and results in the default \"Uncategorized\" category being used.",
		MessageTemplate:  "Invalid category field value {{.}} in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesCategoryFieldInvalid,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "category field",
		ID:               "LP039",
		Brief:            `"Uncategorized" category value`,
		Description:      "The `category` field in the library's `library.properties` metadata file is set to \"Uncategorized\". There is no good reason for using this non-specification compliant category value.",
		MessageTemplate:  `Use of "Uncategorized" category value in library.properties. Please use one of the allowed categories.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesCategoryFieldUncategorized,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "url field",
		ID:               "LP040",
		Brief:            "missing url field",
		Description:      "The `url` field is missing from the library's `library.properties` metadata file.",
		MessageTemplate:  "Missing url field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesURLFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "url field",
		ID:               "LP056",
		Brief:            "url < min length",
		Description:      "The `url` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties url value is less than minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesURLFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "url field",
		ID:               "LP041",
		Brief:            "invalid url format",
		Description:      "The `url` field in the library's `library.properties` metadata file has an invalid URL format.",
		MessageTemplate:  "library.properties url field value {{.}} does not have a valid URL format.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesURLFieldInvalid,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "url field",
		ID:               "LP042",
		Brief:            "dead URL",
		Description:      "The `url` field in the library's `library.properties` metadata file can not be loaded.",
		MessageTemplate:  "Unable to load the library.properties url field: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesURLFieldDeadLink,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "architectures field",
		ID:               "LP043",
		Brief:            "missing architectures field",
		Description:      "The `architectures` field is missing from the library's `library.properties` metadata file. The architecture defaults to `*`, but it's better to explicitly define architectures.",
		MessageTemplate:  "Missing architectures field in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesArchitecturesFieldMissing,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "architectures field",
		ID:               "LP044",
		Brief:            "architectures blank",
		Description:      "The `architectures` field in the library's `library.properties` metadata file is blank. This causes the library to be considered incompatible with all architectures.",
		MessageTemplate:  "Empty library.properties architectures field. Please define specific architectures or set to * if compatible with all.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesArchitecturesFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "architectures field",
		ID:               "LP045",
		Brief:            "architecture alias",
		Description:      "The `architectures` field in the library's `library.properties` metadata file contains architecture aliases.\n\nAlternative development frameworks diverged on architecture naming. It is fine to specify those, but compatibilities with the true Arduino architectures should also be defined.",
		MessageTemplate:  "Architecture alias(es) in library.properties architectures field: {{.}}. Please also specify the true Arduino architectures compatibilities of the library.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesArchitecturesFieldSoloAlias,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "architectures field",
		ID:               "LP046",
		Brief:            "architecture case",
		Description:      "The `architecture` field in the library's `library.properties` metadata file contains architecture names with incorrect case. These are case sensitive (e.g., `AVR` != `avr`).",
		MessageTemplate:  "Incorrect case of library.properties architectures field item(s): {{.}}. Architectures are case sensitive.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.LibraryPropertiesArchitecturesFieldValueCase,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "depends field",
		ID:               "LP047",
		Brief:            "invalid depends format",
		Description:      "The `depends` field in the library's `library.properties` metadata file has an invalid format. This is a comma-separated list of library references.",
		MessageTemplate:  "Invalid format of library.properties depends field {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesDependsFieldInvalidFormat,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "depends field",
		ID:               "LP048",
		Brief:            "depends not in index",
		Description:      "The `depends` field in the library's `library.properties` metadata file contains library names not found in the Library Manager index. This field should be used to define only the dependencies available from Library Manager. Library names are case-sensitive.",
		MessageTemplate:  "library.properties depends field item(s) {{.}} not found in the Library Manager index.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     []rulemode.Type{rulemode.LibraryManagerIndexing},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       nil,
		RuleFunction:     rulefunction.LibraryPropertiesDependsFieldNotInIndex,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "depends field",
		ID:               "LP058",
		Brief:            "invalid depends constraint syntax",
		Description:      "The `depends` field in the library's `library.properties` metadata file uses invalid version constraint syntax.",
		MessageTemplate:  "library.properties depends field item(s) {{.}} have invalid constraint syntax.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesDependsFieldConstraintInvalid,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "dot_a_linkage field",
		ID:               "LP049",
		Brief:            "invalid dot_a_linkage value",
		Description:      "The `dot_a_linkage` field in the library's `library.properties` metadata file has an invalid value.",
		MessageTemplate:  "Invalid dot_a_linkage field value {{.}} in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesDotALinkageFieldInvalid,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "dot_a_linkage field",
		ID:               "LP050",
		Brief:            `dot_a_linkage=true with "1.0" library format`,
		Description:      "The `dot_a_linkage` field in the library's `library.properties` metadata file has a setting incompatible with the library format in use. The `dot_a_linkage` feature is only supported for \"1.5 format\" (recursive layout) libraries.",
		MessageTemplate:  `library.properties dot_a_linkage field enabled but library is not in "1.5" format.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesDotALinkageFieldTrueWithFlatLayout,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "includes field",
		ID:               "LP051",
		Brief:            "includes blank",
		Description:      "The `includes` field in the library's `library.properties` metadata file is blank.\n\nThis caused the \"**Sketch > Include library**\" feature of previous Arduino IDE versions to add an invalid empty `#include` directive to the sketch.",
		MessageTemplate:  "Empty library.properties includes field. Please either define includes or remove this optional field.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesIncludesFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "includes field",
		ID:               "LP052",
		Brief:            "includes not in library",
		Description:      "The `includes` field in the library's `library.properties` metadata file contains file names not found in the library. This should be a list of header file names that must be added to `#include` directives in the sketch in order to use the library.\n\nLibrary authors sometimes think this is the way to define their library's dependencies, which breaks the Arduino IDE's \"**Sketch > Include Library**\" feature for that library.",
		MessageTemplate:  "library.properties includes field item(s) {{.}} not found in library.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesIncludesFieldItemNotFound,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "precompiled field",
		ID:               "LP053",
		Brief:            "invalid precompiled value",
		Description:      "The `precompiled` field in the library's `library.properties` metadata file has an invalid value.",
		MessageTemplate:  "Invalid precompiled field value {{.}} in library.properties",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesPrecompiledFieldInvalid,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "precompiled field",
		ID:               "LP054",
		Brief:            "precompiled with \"1.0\" format",
		Description:      "The `precompiled` field in the library's `library.properties` metadata file has a setting incompatible with the library format in use. The `precompiled` feature is only supported for the \"1.5 format\" (recursive layout) library format.",
		MessageTemplate:  `library.properties precompiled field value {{.}}, is not supported with "1.0" format.`,
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesPrecompiledFieldEnabledWithFlatLayout,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "library.properties",
		Subcategory:      "ldflags field",
		ID:               "LP055",
		Brief:            "ldflags < min length",
		Description:      "The `ldflags` field in the library's `library.properties` metadata file is shorter than the minimum length.",
		MessageTemplate:  "library.properties ldflags value is less than minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryPropertiesLdflagsFieldLTMinLength,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "code",
		Subcategory:      "miscellaneous",
		ID:               "LC001",
		Brief:            "Arduino.h case",
		Description:      "An `#include` directive for a file matching the standardized Arduino core library's `Arduino.h` header in all except case (e.g., `#include <arduino.h>`) was found in the library's code. This causes compilation failure on case-sensitive file systems.",
		MessageTemplate:  "Incorrect Arduino.h filename case in #include directive: {{.}}",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.IncorrectArduinoDotHFileNameCase,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "documentation",
		Subcategory:      "miscellaneous",
		ID:               "LD001",
		Brief:            "no readme",
		Description:      "None of the standard README file names (e.g., `README.md`) were found in the library's root folder. This file provides interested parties with a convenient and standardized location to get information about the project.",
		MessageTemplate:  "No readme found. Please document your library.",
		Reference:        "https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MissingReadme,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.Library,
		Category:         "documentation",
		Subcategory:      "miscellaneous",
		ID:               "LD002",
		Brief:            "no license file",
		Description:      "None of the standard license file names (e.g., `LICENSE.txt`) were found in the library's root folder. This file provides interested parties with a convenient and standardized location to get information about the project's licensing and is also used by GitHub for automatic license type classification.",
		MessageTemplate:  "No license file found.",
		Reference:        "https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MissingLicenseFile,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "documentation",
		Subcategory:      "examples",
		ID:               "LD003",
		Brief:            "stray sketch",
		Description:      "A sketch was found outside the library's `examples` and/or `extras` subfolders. Example sketches must be placed in the standardized location.",
		MessageTemplate:  "Sketch(es) found outside examples and extras folders:\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-examples",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.LibraryHasStraySketches,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "documentation",
		Subcategory:      "examples",
		ID:               "LD004",
		Brief:            "no examples",
		Description:      "No example sketches were found in the library. Examples demonstrating usage of the library serve as an important form of documentation for Arduino users. If the library does contain example sketches, make sure they are valid sketches and in the appropriate location.",
		MessageTemplate:  "No example sketches found. Please provide examples.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-examples",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       nil,
		RuleFunction:     rulefunction.MissingExamples,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "documentation",
		Subcategory:      "examples",
		ID:               "LD005",
		Brief:            "incorrect examples folder name",
		Description:      "A subfolder was found in the library with name similar to the standard `examples` folder used for example sketches.",
		MessageTemplate:  "Potentially misspelled examples folder name found: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-examples",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.MisspelledExamplesFolderName,
	},
	{
		ProjectType:      projecttype.Library,
		SuperprojectType: projecttype.All,
		Category:         "documentation",
		Subcategory:      "examples",
		ID:               "LD006",
		Brief:            "examples folder name case",
		Description:      "The library's examples subfolder name has incorrect case. The folder name must be spelled exactly `examples`",
		MessageTemplate:  "Incorrect examples folder name case: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/library-specification/#library-examples",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.IncorrectExamplesFolderNameCase,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "root folder",
		ID:               "SS001",
		Brief:            "name mismatch",
		Description:      "There is no `.ino` sketch file with name matching the sketch folder. The primary sketch file name must match the folder for the sketch to be valid.",
		MessageTemplate:  "Sketch file/folder name mismatch. The primary sketch file name must match the folder: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/sketch-specification/#primary-sketch-file",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.SketchNameMismatch,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "file name",
		ID:               "SS002",
		Brief:            "prohibited character in filename",
		Description:      "A sketch file's name contains a prohibited character.",
		MessageTemplate:  "Prohibited character(s) in file name(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/sketch-specification/#sketch-folders-and-files",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProhibitedCharactersInSketchFileName,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "file name",
		ID:               "SS003",
		Brief:            "file name too long",
		Description:      "The sketch file's name exceeds the maximum length.",
		MessageTemplate:  "File name(s): {{.}} exceed maximum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/sketch-specification/#sketch-folders-and-files",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.SketchFileNameGTMaxLength,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "file name",
		ID:               "SS004",
		Brief:            ".pde extension",
		Description:      "A sketch file uses the deprecated `.pde` file extension. The .pde extension is used by both [Processing](https://processing.org/) sketches and Arduino sketches. If the project has supplemental Processing sketches, they should either be in the [`data` subfolder of the sketch](https://arduino.github.io/arduino-cli/latest/sketch-specification/#data-subfolder) or in the [`extras` folder of the library](https://arduino.github.io/arduino-cli/latest/library-specification/#extra-documentation). Arduino sketches should use the modern `.ino` extension.",
		MessageTemplate:  "{{.}} uses deprecated .pde file extension. Use .ino for Arduino sketches.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/sketch-specification/#additional-code-files",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PdeSketchExtension,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.All,
		Category:         "structure",
		Subcategory:      "miscellaneous",
		ID:               "SS005",
		Brief:            "src folder case",
		Description:      "The sketch's source subfolder name has incorrect case. This folder must be named exactly `src` in order for the contents to be compiled on case sensitive file systems (e.g., Linux).",
		MessageTemplate:  "Incorrect src folder case: {{.}}. This will cause the source files under it to not be compiled on case-sensitive file systems.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/sketch-specification/#src-subfolder",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.IncorrectSketchSrcFolderNameCase,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.All,
		Category:         "code",
		Subcategory:      "miscellaneous",
		ID:               "SC001",
		Brief:            "Arduino.h case",
		Description:      "An `#include` directive for a file matching the standardized Arduino core library's `Arduino.h` header in all except case (e.g., `#include <arduino.h>`) was found in the sketch's code. This causes compilation failure on case-sensitive file systems.",
		MessageTemplate:  "Incorrect Arduino.h filename case in #include directive: {{.}}",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.IncorrectArduinoDotHFileNameCase,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.Sketch,
		Category:         "documentation",
		Subcategory:      "miscellaneous",
		ID:               "SD001",
		Brief:            "no readme",
		Description:      "None of the standard README file names (e.g., `README.md`) were found in the sketch folder. This file provides interested parties with a convenient and standardized location to get information about the project.",
		MessageTemplate:  "No readme found. Please document your sketch.",
		Reference:        "https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MissingReadme,
	},
	{
		ProjectType:      projecttype.Sketch,
		SuperprojectType: projecttype.Sketch,
		Category:         "documentation",
		Subcategory:      "miscellaneous",
		ID:               "SD002",
		Brief:            "no license file",
		Description:      "None of the standard license file names (e.g., `LICENSE.txt`) were found in the sketch's root folder. This file provides interested parties with a convenient and standardized location to get information about the project's licensing and is also used by GitHub for automatic license type classification.",
		MessageTemplate:  "No license file found.",
		Reference:        "https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MissingLicenseFile,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.Platform,
		Category:         "documentation",
		Subcategory:      "miscellaneous",
		ID:               "PD001",
		Brief:            "no readme",
		Description:      "None of the standard README file names (e.g., `README.md`) were found in the platform folder. This file provides interested parties with a convenient and standardized location to get information about the project.",
		MessageTemplate:  "No readme found. Please document your boards platform.",
		Reference:        "https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      nil,
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MissingReadme,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.Platform,
		Category:         "documentation",
		Subcategory:      "miscellaneous",
		ID:               "PD002",
		Brief:            "no license file",
		Description:      "None of the standard license file names (e.g., `LICENSE.txt`) were found in the platform folder. This file provides interested parties with a convenient and standardized location to get information about the project's licensing and is also used by GitHub for automatic license type classification.",
		MessageTemplate:  "No license file found.",
		Reference:        "https://docs.github.com/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      nil,
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.MissingLicenseFile,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF001",
		Brief:            "boards.txt missing",
		Description:      "The `boards.txt` configuration file was not found in the platform folder",
		MessageTemplate:  "Required boards.txt is missing. Expected at: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#boardstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF002",
		Brief:            "invalid boards.txt",
		Description:      "The platform's `boards.txt` configuration file has an invalid data format.",
		MessageTemplate:  "boards.txt has an invalid format: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#boardstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtFormat,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF003",
		Brief:            "missing boardID.name",
		Description:      "A board definition in the platform's `boards.txt` configuration file is missing a `name` property (e.g., `uno.name=Arduino Uno`).",
		MessageTemplate:  "Missing name property for board ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#boardstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDNameMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF004",
		Brief:            "boardID.name < min length",
		Description:      "The `name` property for a board definition in the platform's `boards.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "name value for board ID(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#boardstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDNameLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF005",
		Brief:            "missing build.board",
		Description:      "A board definition in the platform's `boards.txt` configuration file is missing the `build.board` property.",
		MessageTemplate:  "Missing build.board property for board ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#boardstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.BoardsTxtBoardIDBuildBoardMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF006",
		Brief:            "build.board < min length",
		Description:      "The `build.board` property for a board definition in the platform's `boards.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "build.board value for board ID(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#boardstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDBuildBoardLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF007",
		Brief:            "missing build.core",
		Description:      "A board definition in the platform's `boards.txt` configuration file is missing the `build.core` property.",
		MessageTemplate:  "Missing build.core property for board ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#cores",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDBuildCoreMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF008",
		Brief:            "build.core < min length",
		Description:      "The `build.core` property for a board definition in the platform's `boards.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "build.core value for board ID(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#cores",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDBuildCoreLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF009",
		Brief:            "use of compiler.<pattern type>.extra_flags",
		MessageTemplate:  "Board ID(s) {{.}} use compiler.<pattern type>.extra_flags properties. These are intended to be left for use by the user.",
		Description:      "A board definition in the platform's `boards.txt` configuration file is using one of the `compiler.<pattern type>.extra_flags` properties (e.g., `compiler.cpp.extra_flags`). These are intended to be left for use by the user as a standardized interface for customizing the compilation commands. The platform author can define as many arbitrary properties as they like, so there is no need for them to take the user's properties.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.BoardsTxtUserExtraFlagsUsage,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF011",
		Brief:            "non-empty hide value",
		Description:      "The `hide` property for a board definition in the platform's `boards.txt` configuration file is not empty. The hiding is based purely on whether or not the property was defined. The value is ignored. For this reason, setting a value for the property might cause confusion later (e.g., if someone changes `foo.hide=true` to `foo.hide=false`, the `foo` board will still be hidden).",
		MessageTemplate:  "hide value for board ID(s) {{.}} is not empty. The value of this property is ignored.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#hiding-boards",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.BoardsTxtBoardIDHideInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF012",
		Brief:            "menu title < min length",
		Description:      "The title text length of a custom board options menu in the platform's `boards.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "title for menu ID(s) {{.}} are less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#custom-board-options",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtMenuMenuIDLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF014",
		Brief:            "serial.disableDTR value invalid",
		Description:      "The `serial.disableDTR` property for a board definition in the platform's `boards.txt` configuration file has an invalid value.",
		MessageTemplate:  "serial.disableDTR value for board ID(s) {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#serial-monitor-control-signal-configuration",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDSerialDisableDTRInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF015",
		Brief:            "serial.disableRTS value invalid",
		Description:      "The `serial.disableRTS` property for a board definition in the platform's `boards.txt` configuration file has an invalid value.",
		MessageTemplate:  "serial.disableRTS value for board ID(s) {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#serial-monitor-control-signal-configuration",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDSerialDisableRTSInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF016",
		Brief:            "missing upload.tool.<protocol_name>",
		Description:      "A board definition in the platform's `boards.txt` configuration file is missing the `upload.tool.<protocol_name>` property.",
		MessageTemplate:  "Missing upload.tool.<protocol_name> property for board ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#sketch-upload-configuration",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadToolMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF017",
		Brief:            "upload.tool.<protocol_name> < min length",
		Description:      "The `upload.tool.<protocol_name>` property for a board definition in the platform's `boards.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "upload.tool.<protocol_name> value for board ID(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#sketch-upload-configuration",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadToolLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF018",
		Brief:            "missing upload.maximum_size",
		Description:      "A board definition in the platform's `boards.txt` configuration file is missing the `upload.maximum_size` property. Although not required, this provides the build system and the user with very useful information, so it should be provided.",
		MessageTemplate:  "Missing upload.maximum_size property for board ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadMaximumSizeMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF019",
		Brief:            "upload.maximum_size not a number",
		Description:      "The `upload.maximum_size` property for a board definition in the platform's `boards.txt` configuration file is not number.",
		MessageTemplate:  "upload.maximum_size value for board ID(s) {{.}} is not a number.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadMaximumSizeInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF020",
		Brief:            "missing upload.maximum_data_size",
		Description:      "A board definition in the platform's `boards.txt` configuration file is missing the `upload.maximum_data_size` property. Although not required, this provides the build system and the user with very useful information, so it should be provided.",
		MessageTemplate:  "Missing upload.maximum_data_size property for board ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadMaximumDataSizeMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF021",
		Brief:            "upload.maximum_data_size not a number",
		Description:      "The `upload.maximum_size` property for a board definition in the platform's `boards.txt` configuration file is not number.",
		MessageTemplate:  "upload.maximum_data_size value for board ID(s) {{.}} is not a number.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadMaximumDataSizeInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF022",
		Brief:            "upload.use_1200bps_touch value invalid",
		Description:      "The `upload.use_1200bps_touch` property for a board definition in the platform's `boards.txt` configuration file has an invalid value.",
		MessageTemplate:  "upload.use_1200bps_touch value for board ID(s) {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#1200-bps-bootloader-reset",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadUse1200bpsTouchInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF023",
		Brief:            "upload.wait_for_upload_port value invalid",
		Description:      "The `upload.wait_for_upload_port` property for a board definition in the platform's `boards.txt` configuration file has an invalid value.",
		MessageTemplate:  "upload.wait_for_upload_port value for board ID(s) {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#1200-bps-bootloader-reset",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDUploadWaitForUploadPortInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF024",
		Brief:            "vid.n value invalid format",
		Description:      "The `vid.n` property for a board definition in the platform's `boards.txt` configuration file has an invalid value.",
		MessageTemplate:  "vid.n value for board ID(s) {{.}} has invalid format.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#board-vidpid",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDVidNInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "boards.txt",
		ID:               "PF025",
		Brief:            "pid.n value invalid format",
		Description:      "The `pid.n` property for a board definition in the platform's `boards.txt` configuration file has an invalid value.",
		MessageTemplate:  "pid.n value for board ID(s) {{.}} has invalid format.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#board-vidpid",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.BoardsTxtBoardIDPidNInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "programmers.txt",
		ID:               "PF026",
		Brief:            "invalid programmers.txt",
		Description:      "The platform's `programmers.txt` configuration file has an invalid data format.",
		MessageTemplate:  "programmers.txt has an invalid format: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#programmerstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProgrammersTxtFormat,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "programmers.txt",
		ID:               "PF027",
		Brief:            "missing programmerID.name",
		Description:      "A programmer definition in the platform's `boards.txt` configuration file is missing the `name` property.",
		MessageTemplate:  "Missing name property for programmer ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#programmerstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProgrammersTxtProgrammerIDNameMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "programmers.txt",
		ID:               "PF028",
		Brief:            "programmerID.name < min length",
		Description:      "The `name` property for a programmer definition in the platform's `programmers.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "name value for programmer ID(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#programmerstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProgrammersTxtProgrammerIDNameLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "programmers.txt",
		ID:               "PF029",
		Brief:            "missing programmerID.program.tool",
		Description:      "A programmer definition in the platform's `programmers.txt` configuration file is missing the `program.tool` property.",
		MessageTemplate:  "Missing program.tool property for programmer ID(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#programmerstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProgrammersTxtProgrammerIDProgramToolMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "programmers.txt",
		ID:               "PF030",
		Brief:            "programmerID.program.tool < min length",
		Description:      "The `program.tool` property for a programmer definition in the platform's `programmers.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "program.tool value for programmer ID(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#programmerstxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.ProgrammersTxtProgrammerIDProgramToolLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF031",
		Brief:            "invalid platform.txt",
		Description:      "The platform's `platform.txt` configuration file has an invalid data format.",
		MessageTemplate:  "platform.txt has an invalid format: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#platformtxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtFormat,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF032",
		Brief:            "missing name",
		Description:      "The platform's `platform.txt` configuration file is missing the `name` property.",
		MessageTemplate:  "Missing name property in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#platformtxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtNameMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF033",
		Brief:            "name < min length",
		Description:      "The `name` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "platform.txt name property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#platformtxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtNameLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF034",
		Brief:            "missing version",
		Description:      "The `version` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "Missing version property in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#platformtxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtVersionMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF035",
		Brief:            "invalid version",
		Description:      "The `version` property in the platform's `platform.txt` configuration file has an invalid format. It must be compliant with \"relaxed semver\".",
		MessageTemplate:  "platform.txt version value {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#platformtxt",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtVersionNonRelaxedSemver,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF036",
		Brief:            "non-semver version",
		Description:      "The `version` property in the platform's `platform.txt` configuration file is not compliant with the \"semver\" specification. Although not required, use of the standard semver version format is recommended.",
		MessageTemplate:  "platform.txt version value {{.}} is not compliant with the semver specification.",
		Reference:        "https://semver.org/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtVersionNonSemver,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF037",
		Brief:            "missing compiler.warning_flags.none",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.warning_flags.none` property.",
		MessageTemplate:  "Missing compiler.warning_flags.none in platform.txt",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerWarningFlagsNoneMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF038",
		Brief:            "missing compiler.warning_flags.default",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.warning_flags.default` property.",
		MessageTemplate:  "Missing compiler.warning_flags.default in platform.txt",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerWarningFlagsDefaultMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF039",
		Brief:            "missing compiler.warning_flags.more",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.warning_flags.more` property.",
		MessageTemplate:  "Missing compiler.warning_flags.more in platform.txt",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerWarningFlagsMoreMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF040",
		Brief:            "missing compiler.warning_flags.all",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.warning_flags.all` property.",
		MessageTemplate:  "Missing compiler.warning_flags.all in platform.txt",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerWarningFlagsAllMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF041",
		Brief:            "missing compiler.optimization_flags.debug",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.optimization_flags.debug` property. In order to support the optimization level feature, both `compiler.optimization_flags.release` and `compiler.optimization_flags.debug` must be defined.",
		MessageTemplate:  "Missing compiler.optimization_flags.debug in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#sketch-debugging-configuration",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtCompilerOptimizationFlagsDebugMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF042",
		Brief:            "missing compiler.optimization_flags.release",
		Description:      "In order to support the optimization level feature, both compiler.optimization_flags.release and compiler.optimization_flags.debug must be defined.",
		MessageTemplate:  "Missing compiler.optimization_flags.release in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#sketch-debugging-configuration",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtCompilerOptimizationFlagsReleaseMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF043",
		Brief:            "missing compiler.c.extra_flags",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.c.extra_flags` property. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "Missing compiler.c.extra_flags in platform.txt. An empty default definition should be provided, which the user can override.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerCExtraFlagsMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF044",
		Brief:            "compiler.c.extra_flags not empty",
		Description:      "The `compiler.c.extra_flags` property in the platform's `platform.txt` configuration file is not empty. This property is exclusively for use by the user. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "platform.txt compiler.c.extra_flags property value is not empty. This property is exclusively for use by the user.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerCExtraFlagsNotEmpty,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF045",
		Brief:            "missing compiler.cpp.extra_flags",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.cpp.extra_flags` property. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "Missing compiler.cpp.extra_flags in platform.txt. An empty default definition should be provided, which the user can override.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerCppExtraFlagsMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF046",
		Brief:            "compiler.cpp.extra_flags not empty",
		Description:      "The `compiler.cpp.extra_flags` property in the platform's `platform.txt` configuration file is not empty. This property is exclusively for use by the user. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "platform.txt compiler.cpp.extra_flags property value is not empty. This property is exclusively for use by the user.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerCppExtraFlagsNotEmpty,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF047",
		Brief:            "missing compiler.S.extra_flags",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.S.extra_flags` property. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "Missing compiler.S.extra_flags in platform.txt. An empty default definition should be provided, which the user can override.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerSExtraFlagsMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF048",
		Brief:            "compiler.S.extra_flags not empty",
		Description:      "The `compiler.S.extra_flags` property in the platform's `platform.txt` configuration file is not empty. This property is exclusively for use by the user. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "platform.txt compiler.S.extra_flags property value is not empty. This property is exclusively for use by the user.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerSExtraFlagsNotEmpty,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF049",
		Brief:            "missing compiler.ar.extra_flags",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.ar.extra_flags` property. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "Missing compiler.ar.extra_flags in platform.txt. An empty default definition should be provided, which the user can override.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerArExtraFlagsMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF050",
		Brief:            "compiler.ar.extra_flags not empty",
		Description:      "The `compiler.ar.extra_flags` property in the platform's `platform.txt` configuration file is not empty. This property is exclusively for use by the user. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "platform.txt compiler.ar.extra_flags property value is not empty. This property is exclusively for use by the user.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerArExtraFlagsNotEmpty,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF051",
		Brief:            "missing compiler.c.elf.extra_flags",
		Description:      "The platform's `platform.txt` configuration file is missing the `compiler.c.elf.extra_flags` property. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "Missing compiler.c.elf.extra_flags in platform.txt. An empty default definition should be provided, which the user can override.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerCElfExtraFlagsMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF052",
		Brief:            "compiler.c.elf.extra_flags not empty",
		Description:      "The `compiler.c.elf.extra_flags` property in the platform's `platform.txt` configuration file is not empty. This property is exclusively for use by the user. An empty default definition should be provided to provide a fallback, which the user can override.",
		MessageTemplate:  "platform.txt compiler.c.elf.extra_flags property value is not empty. This property is exclusively for use by the user.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtCompilerCElfExtraFlagsNotEmpty,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF053",
		Brief:            "recipe.preproc.macros < min length",
		Description:      "The `recipe.preproc.macros` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.preproc.macros property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipe-to-run-the-preprocessor",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipePreprocMacrosLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF054",
		Brief:            "recipe.preproc.macros lacks extra flags support",
		Description:      "The `recipe.preproc.macros` property in the platform's `platform.txt` configuration file does not contain a `{compiler.cpp.extra_flags}` reference. This is necessary to allow the user to customize the compiler command.",
		MessageTemplate:  "recipe.preproc.macros property value does not contain a {compiler.cpp.extra_flags} reference. This is necessary to allow the user to customize the compiler command.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipePreprocMacrosExtraFlagsSupport,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF055",
		Brief:            "missing recipe.c.o.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.c.o.pattern` property.",
		MessageTemplate:  "Missing recipe.c.o.pattern in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compile-source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeCOPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF056",
		Brief:            "recipe.c.o.pattern < min length",
		Description:      "The `recipe.c.o.pattern` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.c.o.pattern property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compile-source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeCOPatternLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF057",
		Brief:            "recipe.c.o.pattern lacks extra flags support",
		Description:      "The `recipe.c.o.pattern` property in the platform's `platform.txt` configuration file does not contain a `{compiler.c.extra_flags}` reference. This is necessary to allow the user to customize the compiler command.",
		MessageTemplate:  "recipe.c.o.pattern property value does not contain a {compiler.c.extra_flags} reference. This is necessary to allow the user to customize the compiler command.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeCOPatternExtraFlagsSupport,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF058",
		Brief:            "missing recipe.cpp.o.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.cpp.o.pattern` property.",
		MessageTemplate:  "Missing recipe.cpp.o.pattern in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compile-source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeCppOPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF059",
		Brief:            "recipe.cpp.o.pattern < min length",
		Description:      "The `recipe.cpp.o.pattern` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.cpp.o.pattern property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compile-source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeCppOPatternLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF060",
		Brief:            "recipe.cpp.o.pattern lacks extra flags support",
		Description:      "The `recipe.cpp.o.pattern` property in the platform's `platform.txt` configuration file does not contain a `{compiler.cpp.extra_flags}` reference. This is necessary to allow the user to customize the compiler command.",
		MessageTemplate:  "recipe.cpp.o.pattern property value does not contain a {compiler.cpp.extra_flags} reference. This is necessary to allow the user to customize the compiler command.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeCppOPatternExtraFlagsSupport,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF061",
		Brief:            "missing recipe.S.o.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.S.o.pattern` property.",
		MessageTemplate:  "Missing recipe.S.o.pattern in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compile-source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeSOPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF062",
		Brief:            "recipe.S.o.pattern < min length",
		Description:      "The `recipe.S.o.pattern` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.S.o.pattern property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compile-source-code",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeSOPatternLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF063",
		Brief:            "recipe.S.o.pattern lacks extra flags support",
		Description:      "The `recipe.S.o.pattern` property in the platform's `platform.txt` configuration file does not contain a `{compiler.S.extra_flags}` reference. This is necessary to allow the user to customize the compiler command.",
		MessageTemplate:  "recipe.S.o.pattern property value does not contain a {compiler.S.extra_flags} reference. This is necessary to allow the user to customize the compiler command.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeSOPatternExtraFlagsSupport,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF064",
		Brief:            "missing recipe.ar.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.ar.pattern` property.",
		MessageTemplate:  "Missing recipe.ar.pattern in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-build-the-corea-archive-file",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeArPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF065",
		Brief:            "recipe.ar.pattern < min length",
		Description:      "The `recipe.ar.pattern` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.ar.pattern property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-build-the-corea-archive-file",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeArPatternLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF066",
		Brief:            "recipe.ar.pattern lacks extra flags support",
		Description:      "The `recipe.ar.pattern` property in the platform's `platform.txt` configuration file does not contain a `{compiler.ar.extra_flags}` reference. This is necessary to allow the user to customize the compiler command.",
		MessageTemplate:  "recipe.ar.pattern property value does not contain a {compiler.ar.extra_flags} reference. This is necessary to allow the user to customize the compiler command.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeArPatternExtraFlagsSupport,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF067",
		Brief:            "missing recipe.c.combine.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.c.combine.pattern` property.",
		MessageTemplate:  "Missing recipe.c.combine.pattern in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-for-linking",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeCCombinePatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF068",
		Brief:            "recipe.c.combine.pattern < min length",
		Description:      "The `recipe.c.combine.pattern` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.c.combine.pattern property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-for-linking",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeCCombinePatternLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF069",
		Brief:            "recipe.c.combine.pattern lacks extra flags support",
		Description:      "The `recipe.c.combine.pattern` property in the platform's `platform.txt` configuration file does not contain a `{compiler.c.elf.extra_flags}` reference. This is necessary to allow the user to customize the compiler command.",
		MessageTemplate:  "recipe.c.combine.pattern property value does not contain a {compiler.c.elf.extra_flags} reference. This is necessary to allow the user to customize the compiler command.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeCCombinePatternExtraFlagsSupport,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF070",
		Brief:            "missing recipe.output.tmp_file",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.output.tmp_file` property.",
		MessageTemplate:  "Missing recipe.output.tmp_file in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-export-compiled-binary",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeOutputTmpFileMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF071",
		Brief:            "recipe.output.tmp_file < min length",
		Description:      "The `recipe.output.tmp_file` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.output.tmp_file property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-export-compiled-binary",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeOutputTmpFileLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF072",
		Brief:            "missing recipe.output.save_file",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.output.save_file` property.",
		MessageTemplate:  "Missing recipe.output.save_file in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-export-compiled-binary",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeOutputSaveFileMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF073",
		Brief:            "recipe.output.save_file < min length",
		Description:      "The `recipe.output.save_file` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.output.save_file property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-export-compiled-binary",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtRecipeOutputSaveFileLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF074",
		Brief:            "missing recipe.size.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.size.pattern` property.",
		MessageTemplate:  "Missing recipe.size.pattern in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeSizePatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF075",
		Brief:            "recipe.size.pattern < min length",
		Description:      "The `recipe.size.pattern` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "recipe.size.pattern property value is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeSizePatternLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF076",
		Brief:            "missing recipe.size.regex",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.size.regex` property.",
		MessageTemplate:  "Missing recipe.size.regex in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeSizeRegexMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF077",
		Brief:            "missing recipe.size.regex.data",
		Description:      "The platform's `platform.txt` configuration file is missing the `recipe.size.regex.data` property.",
		MessageTemplate:  "Missing recipe.size.regex.data in platform.txt",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#recipes-to-compute-binary-sketch-size",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PlatformTxtRecipeSizeRegexDataMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF090",
		Brief:            "invalid pluggable_discovery.required format",
		Description:      "The tool dependency reference for a pluggable discovery in the platform's `platform.txt` configuration file has an invalid format.",
		MessageTemplate:  "Value for tool dependency reference of pluggable discovery(s) {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#pluggable-discovery",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtPluggableDiscoveryRequiredInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF091",
		Brief:            "missing pluggable_discovery.DISCOVERY_ID.pattern",
		Description:      "A manual installation pluggable discovery in the platform's `platform.txt` configuration file is missing the `pattern` property.",
		MessageTemplate:  "Missing pattern for {{.}} pluggable discovery(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#pluggable-discovery",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtPluggableDiscoveryDiscoveryIDPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF094",
		Brief:            "pluggable_monitor.pattern.PROTOCOL_ID < min length",
		Description:      "The `pluggable_monitor.pattern.PROTOCOL_ID` property in the platform's `platform.txt` configuration file is shorter than the minimum length.",
		MessageTemplate:  "pluggable_monitor.pattern.PROTOCOL_ID value for protocol(s) {{.}} is less than the minimum length.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#pluggable-monitor",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtPluggableMonitorPatternProtocolIDLTMinLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF095",
		Brief:            "invalid pluggable_monitor.required.PROTOCOL_ID format",
		Description:      "The tool dependency reference for a pluggable monitor in the platform's `platform.txt` configuration file has an invalid format.",
		MessageTemplate:  "Value for tool dependency reference of pluggable monitor protocol(s) {{.}} is invalid.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#pluggable-monitor",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtPluggableMonitorRequiredProtocolIDInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF092",
		Brief:            "upload.field.FIELD_NAME > max length",
		Description:      "The `tools.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME` property in the platform's `platform.txt` configuration file is longer than the maximum length.",
		MessageTemplate:  "upload.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME property is longer than the maximum length for fields: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtUploadFieldFieldNameGTMaxLength,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF093",
		Brief:            "upload.field.FIELD_NAME.secret invalid",
		Description:      "The `tools.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME.secret` property in the platform's `platform.txt` configuration file has an invalid value.",
		MessageTemplate:  "tools.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME.secret value is invalid or field(s) {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#user-provided-fields",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtUploadFieldFieldNameSecretInvalid,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF080",
		Brief:            "missing upload.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `upload.pattern` property.",
		MessageTemplate:  "Missing upload.pattern for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#tools",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtUploadPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF081",
		Brief:            "missing program.params.verbose",
		Description:      "The platform's `platform.txt` configuration file is missing the `program.params.verbose` property.",
		MessageTemplate:  "Missing program.params.verbose for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtProgramParamsVerboseMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF082",
		Brief:            "missing program.params.quiet",
		Description:      "The platform's `platform.txt` configuration file is missing the `program.params.quiet` property.",
		MessageTemplate:  "Missing program.params.quiet for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtProgramParamsQuietMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF083",
		Brief:            "missing program.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `program.pattern` property.",
		MessageTemplate:  "Missing program.pattern for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#tools",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtProgramPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF084",
		Brief:            "missing erase.params.verbose",
		Description:      "The platform's `platform.txt` configuration file is missing the `erase.params.verbose` property.",
		MessageTemplate:  "Missing erase.params.verbose for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtEraseParamsVerboseMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF085",
		Brief:            "missing erase.params.quiet",
		Description:      "The platform's `platform.txt` configuration file is missing the `erase.params.quiet` property.",
		MessageTemplate:  "Missing erase.params.quiet for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtEraseParamsQuietMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF086",
		Brief:            "missing erase.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `erase.pattern` property.",
		MessageTemplate:  "Missing erase.pattern for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#tools",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtErasePatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF087",
		Brief:            "missing bootloader.params.verbose",
		Description:      "The platform's `platform.txt` configuration file is missing the `bootloader.params.verbose` property.",
		MessageTemplate:  "Missing bootloader.params.verbose for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtBootloaderParamsVerboseMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF088",
		Brief:            "missing bootloader.params.quiet",
		Description:      "The platform's `platform.txt` configuration file is missing the `bootloader.params.quiet` property.",
		MessageTemplate:  "Missing bootloader.params.quiet for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#verbose-parameter",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtBootloaderParamsQuietMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "configuration files",
		Subcategory:      "platform.txt",
		ID:               "PF089",
		Brief:            "missing bootloader.pattern",
		Description:      "The platform's `platform.txt` configuration file is missing the `bootloader.pattern` property.",
		MessageTemplate:  "Missing bootloader.pattern for {{.}} tool(s).",
		Reference:        "https://arduino.github.io/arduino-cli/latest/platform-specification/#tools",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PlatformTxtBootloaderPatternMissing,
	},
	{
		ProjectType:      projecttype.Platform,
		SuperprojectType: projecttype.All,
		Category:         "code",
		Subcategory:      "miscellaneous",
		ID:               "PC001",
		Brief:            "Arduino.h case",
		Description:      "An `#include` directive for a file matching the standardized Arduino core library's `Arduino.h` header in all except case (e.g., `#include <arduino.h>`) was found in the platform's code. This causes compilation failure on case-sensitive file systems.",
		MessageTemplate:  "Incorrect Arduino.h filename case in #include directive: {{.}}",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.IncorrectArduinoDotHFileNameCase,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "general",
		ID:               "IS001",
		Brief:            "missing",
		Description:      "No package index file was found in the specified project path.",
		MessageTemplate:  "No package index was found in specified project path.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "general",
		ID:               "IS002",
		Brief:            "invalid filename",
		Description:      "The package index's filename is not compliant with the required format.",
		MessageTemplate:  "Invalid package index filename {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexFilenameInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "general",
		ID:               "IS003",
		Brief:            "invalid official filename",
		Description:      "The package index's filename is not compliant with the required format (`package_YOURNAME_PACKAGENAME_index.json` or `package_index.json`).",
		MessageTemplate:  "Invalid official package index filename {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/",
		DisableModes:     []rulemode.Type{rulemode.Default},
		EnableModes:      []rulemode.Type{rulemode.Official},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexOfficialFilenameInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "general",
		ID:               "ID001",
		Brief:            "JSON format",
		Description:      "The package index is not a valid JSON document.",
		MessageTemplate:  "Invalid JSON format.",
		Reference:        "",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexJSONFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "general",
		ID:               "ID002",
		Brief:            "data format",
		Description:      "The package index does not have a valid data format.",
		MessageTemplate:  "Invalid package index format: {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "root",
		ID:               "ID003",
		Brief:            "unrecognized properties in root",
		Description:      "Unknown data properties were found in the package index root.",
		MessageTemplate:  "Unknown properties found in package index root.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA001",
		Brief:            "packages property missing",
		Description:      "The package index is missing the `packages` property.",
		MessageTemplate:  "Missing packages property.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA002",
		Brief:            "Incorrect packages type",
		Description:      "The package index's `packages` property has an incorrect type.",
		MessageTemplate:  "packages property has incorrect type.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "root",
		ID:               "IA003",
		Brief:            "unrecognized properties in packages",
		Description:      "The package index has a package containing unknown data properties.",
		MessageTemplate:  "Unknown properties found in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA004",
		Brief:            "packages[*].name missing",
		Description:      "The package index has a package without a `name` property.",
		MessageTemplate:  "Missing packages[*].name property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA005",
		Brief:            "Incorrect packages[*].name type",
		Description:      "The package index has a package with a `name` property of incorrect type. The `name` value must be a string.",
		MessageTemplate:  "packages[*].name property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA006",
		Brief:            "packages[*].name < min length",
		Description:      "The package index has a package with a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].name value less than the minimum length in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA007",
		Brief:            "packages[*].name is arduino",
		Description:      "The package index has a package with a `name` property of `arduino` (case insensitive). This name is reserved for official packages.\n\nIf the package index is maintained by Arduino, configure Arduino Lint in [\"official\" mode](https://arduino.github.io/arduino-lint/latest/#environment-variables).",
		MessageTemplate:  "Use of packages[*].name value \"arduino\" found. This name is reserved for official packages.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesNameIsArduino,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA008",
		Brief:            "packages[*].maintainer missing",
		Description:      "The package index has a package without a `maintainer` property.",
		MessageTemplate:  "Missing packages[*].maintainer property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesMaintainerMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA009",
		Brief:            "Incorrect packages[*].maintainer type",
		Description:      "The package index has a package with a `maintainer` property of incorrect type. The `maintainer` value must be a string.",
		MessageTemplate:  "packages[*].maintainer property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesMaintainerIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA010",
		Brief:            "packages[*].maintainer < min length",
		Description:      "The package index has a package with a `maintainer` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].maintainer value less than the minimum length in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesMaintainerLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA011",
		Brief:            "packages[*].maintainer starts with \"arduino\"",
		Description:      "The package index has a package with a `maintainer` value starting with \"Arduino\" (case insensitive). 3rd party packages are not maintained by Arduino.\n\nIf the package index is maintained by Arduino, configure Arduino Lint in [\"official\" mode](https://arduino.github.io/arduino-lint/latest/#environment-variables).",
		MessageTemplate:  "packages[*].maintainer value starts with \"arduino\" in package(s): {{.}}. 3rd party packages are not maintained by Arduino.",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PackageIndexPackagesMaintainerStartsWithArduino,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA012",
		Brief:            "packages[*].websiteURL missing",
		Description:      "The package index has a package without a `websiteURL` property.",
		MessageTemplate:  "Missing packages[*].websiteURL property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesWebsiteURLMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA013",
		Brief:            "Incorrect packages[*].websiteURL type",
		Description:      "The package index has a package with a `websiteURL` property of incorrect type.",
		MessageTemplate:  "packages[*].websiteURL property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesWebsiteURLIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA014",
		Brief:            "Invalid packages[*].websiteURL format",
		Description:      "The package index has a package with a `websiteURL` property that is not a valid format for a URL.",
		MessageTemplate:  "packages[*].websiteURL property does not have a valid URL format in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesWebsiteURLInvalidFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA015",
		Brief:            "dead packages[*].websiteURL",
		Description:      "The package index has a package with a `websiteURL` property that did not load from the Internet.",
		MessageTemplate:  "Unable to load the packages[*].websiteURL URL for package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesWebsiteURLDeadLink,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA016",
		Brief:            "packages[*].email missing",
		Description:      "The package index has a package without an `email` property.",
		MessageTemplate:  "Missing packages[*].email property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesEmailMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA017",
		Brief:            "Incorrect packages[*].email type",
		Description:      "The package index has a package with an `email` property of incorrect type.",
		MessageTemplate:  "packages[*].email property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesEmailIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA018",
		Brief:            "Incorrect packages[*].help type",
		Description:      "The package index has a package with a `help` property of incorrect type.",
		MessageTemplate:  "packages[*].help property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesHelpIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "root",
		ID:               "IA019",
		Brief:            "unrecognized properties in packages[*].help",
		Description:      "The package index has a package with `help` property containing unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].help found in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesHelpAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA020",
		Brief:            "packages[*].help.online missing",
		Description:      "The package index has a package without a `help.online` property.",
		MessageTemplate:  "Missing packages[*].help.online property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesHelpOnlineMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA021",
		Brief:            "Incorrect packages[*].help.online type",
		Description:      "The package index has a package with a `help.online` property of incorrect type.",
		MessageTemplate:  "packages[*].help.online property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesHelpOnlineIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA022",
		Brief:            "Invalid packages[*].help.online format",
		Description:      "The package index has a package with a `websiteURL` property that is not a valid format for a URL.",
		MessageTemplate:  "packages[*].help.online property does not have a valid URL format in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesHelpOnlineInvalidFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IA023",
		Brief:            "dead packages[*].help.online",
		Description:      "The package index has a package with a `help.online` property that did not load from the Internet.",
		MessageTemplate:  "Unable to load the packages[*].help.online URL for package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesHelpOnlineDeadLink,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL001",
		Brief:            "packages[*].platforms missing",
		Description:      "The package index has a package without a `platforms` property.",
		MessageTemplate:  "Missing packages[*].platforms property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL002",
		Brief:            "incorrect packages[*].platforms type",
		Description:      "The package index has a package with a `platforms` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#json-index-file-contents",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL003",
		Brief:            "unrecognized properties in packages[*].platforms[*]",
		Description:      "The package index has a platform containing unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].platforms[*] found in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL004",
		Brief:            "packages[*].platforms[*].name missing",
		Description:      "The package index has a platform without a `name` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].name property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL005",
		Brief:            "incorrect packages[*].platforms[*].name type",
		Description:      "The package index has a platform with a `name` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].name property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL006",
		Brief:            "packages[*].platforms[*].name < min length",
		Description:      "The package index has a platform with a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].name value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL007",
		Brief:            "packages[*].platforms[*].architecture missing",
		Description:      "The package index has a platform without an `architecture` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].architecture property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchitectureMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL008",
		Brief:            "incorrect packages[*].platforms[*].architecture type",
		Description:      "The package index has a platform with an `architecture` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].architecture property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchitectureIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL009",
		Brief:            "packages[*].platforms[*].architecture < min length",
		Description:      "The package index has a platform with an `architecture` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].architecture value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchitectureLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL010",
		Brief:            "packages[*].platforms[*].version missing",
		Description:      "The package index has a platform without a `version` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].version property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsVersionMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL011",
		Brief:            "incorrect packages[*].platforms[*].version type",
		Description:      "The package index has a platform with a `version` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].version property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsVersionIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL012",
		Brief:            "invalid packages[*].platforms[*].version",
		Description:      "The package index has a platform with an invalid `version` property. It must be compliant with \"relaxed semver\".",
		MessageTemplate:  "Invalid packages[*].platforms[*].version property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsVersionNonRelaxedSemver,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL013",
		Brief:            "non-semver packages[*].platforms[*].version",
		Description:      "The package index has a platform with a `version` property that is not compliant with the \"semver\" specification. Although not required, use of the standard semver version format is recommended.",
		MessageTemplate:  "packages[*].platforms[*].version property in violation of semver specification found in platform(s):\n{{.}}",
		Reference:        "https://semver.org/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsVersionNonSemver,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL058",
		Brief:            "incorrect packages[*].platforms[*].deprecated type",
		Description:      "The package index has a platform with a `deprecated` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].deprecated property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDeprecatedIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL014",
		Brief:            "packages[*].platforms[*].category missing",
		Description:      "The package index has a platform without a `category` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].category property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsCategoryMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL015",
		Brief:            "incorrect packages[*].platforms[*].category type",
		Description:      "The package index has a platform with a `category` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].category property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsCategoryIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL016",
		Brief:            "invalid packages[*].platforms[*].category",
		Description:      "The `category` property of a platform in the package index has an invalid value.",
		MessageTemplate:  "packages[*].platforms[*].category property invalid in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     []rulemode.Type{rulemode.Official},
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsCategoryThirdPartyInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL017",
		Brief:            "packages[*].platforms[*].help missing",
		Description:      "The package index has a platform without a `help` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].help property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL018",
		Brief:            "incorrect packages[*].platforms[*].help type",
		Description:      "The package index has a platform with a `help` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].help property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL019",
		Brief:            "unrecognized properties in packages[*].platforms[*].help",
		Description:      "The `help` property of a platform in the package index contains unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].platforms[*].help found in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL020",
		Brief:            "packages[*].platforms[*].help.online missing",
		Description:      "The package index has a platform without a `help.online` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].help.online property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpOnlineMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL021",
		Brief:            "incorrect packages[*].platforms[*].help.online type",
		Description:      "The package index has a platform with a `help.online` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].help.online property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpOnlineIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL022",
		Brief:            "invalid packages[*].platforms[*].help.online format",
		Description:      "The package index has a platform with a `help.online` property that is not a valid format for a URL.",
		MessageTemplate:  "packages[*].platforms[*].help.online property does not have a valid URL format in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpOnlineInvalidFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL023",
		Brief:            "dead packages[*].platforms[*].help.online",
		Description:      "The package index has a platform with a `help.online` property that did not load from the Internet.",
		MessageTemplate:  "Unable to load the packages[*].platforms[*].help.online URL for platforms(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsHelpOnlineDeadLink,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL024",
		Brief:            "packages[*].platforms[*].url missing",
		Description:      "The package index has a platform without a `url` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].url property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsURLMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL025",
		Brief:            "incorrect packages[*].platforms[*].url type",
		Description:      "The package index has a platform with a `url` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].url property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsURLIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL026",
		Brief:            "invalid packages[*].platforms[*].url format",
		Description:      "The package index has a platform with a `url` property that is not a valid format for a URL.",
		MessageTemplate:  "packages[*].platforms[*].url property does not have a valid URL format in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsURLInvalidFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL027",
		Brief:            "dead packages[*].platforms[*].url",
		Description:      "The package index has a platform with a `url` property that did not load from the Internet.",
		MessageTemplate:  "Unable to load the packages[*].platforms[*].url URL for platforms(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsURLDeadLink,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL028",
		Brief:            "packages[*].platforms[*].archiveFileName missing",
		Description:      "The package index has a platform without an `archiveFileName` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].archiveFileName property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchiveFileNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL029",
		Brief:            "incorrect packages[*].platforms[*].archiveFileName type",
		Description:      "The package index has a platform with an `archiveFileName` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].archiveFileName property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchiveFileNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL030",
		Brief:            "packages[*].platforms[*].archiveFileName < min length",
		Description:      "The package index has a platform with an `archiveFileName` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].archiveFileName value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchitectureLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL031",
		Brief:            "invalid packages[*].platforms[*].archiveFileName",
		Description:      "The package index has a platform with an `archiveFileName` property that uses an unsupported file extension.",
		MessageTemplate:  "packages[*].platforms[*].archiveFileName filename uses unsupported file extension in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsArchiveFileNameInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL032",
		Brief:            "packages[*].platforms[*].checksum missing",
		Description:      "The package index has a platform without a `checksum` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].checksum property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsChecksumMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL033",
		Brief:            "incorrect packages[*].platforms[*].checksum type",
		Description:      "The package index has a platform with a `checksum` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].checksum property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsChecksumIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL034",
		Brief:            "invalid packages[*].platforms[*].checksum",
		Description:      "The `checksum` property of a platform in the package index has an invalid format.",
		MessageTemplate:  "packages[*].platforms[*].checksum has an invalid format in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsChecksumInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL035",
		Brief:            "discouraged packages[*].platforms[*].checksum algorithm",
		Description:      "The `checksum` property of a platform in the package index uses a discouraged hash algorithm.",
		MessageTemplate:  "packages[*].platforms[*].checksum uses a discouraged hash algorithm in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsChecksumDiscouragedAlgorithm,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL036",
		Brief:            "packages[*].platforms[*].size missing",
		Description:      "The package index has a platform without a `size` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].size property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsSizeMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL037",
		Brief:            "incorrect packages[*].platforms[*].size type",
		Description:      "The package index has a platform with a `size` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].size property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsSizeIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IL038",
		Brief:            "invalid packages[*].platforms[*].size",
		Description:      "The `size` property of a platform in the package index has an invalid value.",
		MessageTemplate:  "packages[*].platforms[*].size has an invalid format in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsSizeInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL039",
		Brief:            "packages[*].platforms[*].boards missing",
		Description:      "The package index has a platform without a `boards` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].boards property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsBoardsMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL040",
		Brief:            "incorrect packages[*].platforms[*].boards type",
		Description:      "The package index has a platform with a `boards` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].boards property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsBoardsIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL041",
		Brief:            "unrecognized properties in packages[*].platforms[*].boards[*]",
		Description:      "A `boards` object for one of the package index's platforms contains unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].platforms[*].boards[*] found in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsBoardsAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL042",
		Brief:            "packages[*].platforms[*].boards[*].name missing",
		Description:      "A `boards` object for one of the package index's platforms is missing a `name` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].boards[*].name property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsBoardsNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL043",
		Brief:            "incorrect packages[*].platforms[*].boards[*].name type",
		Description:      "A `boards` object for one of the package index's platforms has a `name` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].boards[*].name property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsBoardsNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL044",
		Brief:            "packages[*].platforms[*].boards[*].name < min length",
		Description:      "A `boards` object for one of the package index's platforms has a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].boards[*].name value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsBoardsNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL045",
		Brief:            "packages[*].platforms[*].toolsDependencies missing",
		Description:      "The package index has a platform without a `toolsDependencies` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].toolsDependencies property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL046",
		Brief:            "incorrect packages[*].platforms[*].toolsDependencies type",
		Description:      "The package index has a platform with a `toolsDependencies` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL047",
		Brief:            "unrecognized properties in packages[*].platforms[*].toolsDependencies[*]",
		Description:      "The `toolsDependencies` property of a platform in the package index contains unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].platforms[*].toolsDependencies[*] found in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL048",
		Brief:            "packages[*].platforms[*].toolsDependencies[*].packager missing",
		Description:      "A `toolsDependencies` object for one of the package index's platforms is missing a `packager` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].toolsDependencies[*].packager property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesPackagerMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL049",
		Brief:            "incorrect packages[*].platforms[*].toolsDependencies[*].packager type",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has a `packager` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies[*].packager property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesPackagerIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL050",
		Brief:            "packages[*].platforms[*].toolsDependencies[*].packager < min length",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has a `packager` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies[*].packager value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesPackagerLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL051",
		Brief:            "packages[*].platforms[*].toolsDependencies[*].name missing",
		Description:      "A `toolsDependencies` object for one of the package index's platforms is missing a `name` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].toolsDependencies[*].name property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL052",
		Brief:            "incorrect packages[*].platforms[*].toolsDependencies[*].name type",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has a `name` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies[*].name property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL053",
		Brief:            "packages[*].platforms[*].toolsDependencies[*].name < min length",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies[*].name value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL054",
		Brief:            "packages[*].platforms[*].toolsDependencies[*].version missing",
		Description:      "A `toolsDependencies` object for one of the package index's platforms is missing a `version` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].toolsDependencies[*].version property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesVersionMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL055",
		Brief:            "incorrect packages[*].platforms[*].toolsDependencies[*].version type",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has a `version` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies[*].version property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesVersionIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL056",
		Brief:            "invalid packages[*].platforms[*].toolsDependencies[*].version",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has an invalid `version` property. It must be compliant with \"relaxed semver\".",
		MessageTemplate:  "Invalid packages[*].platforms[*].toolsDependencies[*].version property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesVersionNonRelaxedSemver,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL057",
		Brief:            "non-semver packages[*].platforms[*].toolsDependencies[*].version",
		Description:      "A `toolsDependencies` object for one of the package index's platforms has a `version` property that is not compliant with the \"semver\" specification. Although not required, use of the standard semver version format is recommended.",
		MessageTemplate:  "packages[*].platforms[*].toolsDependencies[*].version property in violation of semver specification found in platform(s):\n{{.}}",
		Reference:        "https://semver.org/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL059",
		Brief:            "incorrect packages[*].platforms[*].discoveryDependencies type",
		Description:      "The package index has a platform with a `discoveryDependencies` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].discoveryDependencies property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL060",
		Brief:            "unrecognized properties in packages[*].platforms[*].discoveryDependencies[*]",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms contains unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].platforms[*].discoveryDependencies[*] found in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL061",
		Brief:            "packages[*].platforms[*].discoveryDependencies[*].packager missing",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms is missing a `packager` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].discoveryDependencies[*].packager property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesPackagerMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL062",
		Brief:            "incorrect packages[*].platforms[*].discoveryDependencies[*].packager type",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms has a `packager` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].discoveryDependencies[*].packager property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesPackagerIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL063",
		Brief:            "packages[*].platforms[*].discoveryDependencies[*].packager < min length",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms has a `packager` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].discoveryDependencies[*].packager value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesPackagerLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL064",
		Brief:            "packages[*].platforms[*].discoveryDependencies[*].name missing",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms is missing a `name` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].discoveryDependencies[*].name property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL065",
		Brief:            "incorrect packages[*].platforms[*].discoveryDependencies[*].name type",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms has a `name` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].discoveryDependencies[*].name property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL066",
		Brief:            "packages[*].platforms[*].discoveryDependencies[*].name < min length",
		Description:      "A `discoveryDependencies` object for one of the package index's platforms has a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].discoveryDependencies[*].name value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsDiscoveryDependenciesNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL067",
		Brief:            "incorrect packages[*].platforms[*].monitorDependencies type",
		Description:      "The package index has a platform with a `monitorDependencies` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].monitorDependencies property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL068",
		Brief:            "unrecognized properties in packages[*].platforms[*].monitorDependencies[*]",
		Description:      "A `monitorDependencies` object for one of the package index's platforms contains unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].platforms[*].monitorDependencies[*] found in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL069",
		Brief:            "packages[*].platforms[*].monitorDependencies[*].packager missing",
		Description:      "A `monitorDependencies` object for one of the package index's platforms is missing a `packager` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].monitorDependencies[*].packager property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesPackagerMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL070",
		Brief:            "incorrect packages[*].platforms[*].monitorDependencies[*].packager type",
		Description:      "A `monitorDependencies` object for one of the package index's platforms has a `packager` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].monitorDependencies[*].packager property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesPackagerIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL071",
		Brief:            "packages[*].platforms[*].monitorDependencies[*].packager < min length",
		Description:      "A `monitorDependencies` object for one of the package index's platforms has a `packager` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].monitorDependencies[*].packager value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesPackagerLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL072",
		Brief:            "packages[*].platforms[*].monitorDependencies[*].name missing",
		Description:      "A `monitorDependencies` object for one of the package index's platforms is missing a `name` property.",
		MessageTemplate:  "Missing packages[*].platforms[*].monitorDependencies[*].name property in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL073",
		Brief:            "incorrect packages[*].platforms[*].monitorDependencies[*].name type",
		Description:      "A `monitorDependencies` object for one of the package index's platforms has a `name` property of incorrect type.",
		MessageTemplate:  "packages[*].platforms[*].monitorDependencies[*].name property has incorrect type in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "platform",
		ID:               "IL074",
		Brief:            "packages[*].platforms[*].monitorDependencies[*].name < min length",
		Description:      "A `monitorDependencies` object for one of the package index's platforms has a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].platforms[*].monitorDependencies[*].name value less than the minimum length in platform(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#platforms-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesPlatformsMonitorDependenciesNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "package",
		ID:               "IT001",
		Brief:            "packages[*].tools missing",
		Description:      "The package index has a package without a `tools` property.",
		MessageTemplate:  "Missing packages[*].tools property in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT002",
		Brief:            "incorrect packages[*].tools type",
		Description:      "The package index has a package with a `tools` property of incorrect type.",
		MessageTemplate:  "packages[*].tools property has incorrect type in package(s): {{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT003",
		Brief:            "unrecognized properties in packages[*].tools[*]",
		Description:      "The package index has a tool containing unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].tools[*] found in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT004",
		Brief:            "packages[*].tools[*].name missing",
		Description:      "The package index has a tool without a `name` property.",
		MessageTemplate:  "Missing packages[*].tools[*].name property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT005",
		Brief:            "incorrect packages[*].tools[*].name type",
		Description:      "The package index has a tool with a `name` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].name property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT006",
		Brief:            "packages[*].tools[*].name < min length",
		Description:      "The package index has a tool with a `name` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].tools[*].name value less than the minimum length in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT007",
		Brief:            "packages[*].tools[*].version missing",
		Description:      "The package index has a tool without a `version` property.",
		MessageTemplate:  "Missing packages[*].tools[*].version property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsVersionMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT008",
		Brief:            "incorrect packages[*].tools[*].version type",
		Description:      "The package index has a tool with a `version` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].version property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsVersionIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT009",
		Brief:            "invalid packages[*].tools[*].version",
		Description:      "The package index has a tool with an invalid `version` property. It must be compliant with \"relaxed semver\".",
		MessageTemplate:  "Invalid packages[*].tools[*].version property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsVersionNonRelaxedSemver,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT010",
		Brief:            "non-semver packages[*].tools[*].version",
		Description:      "The package index has a tool with a `version` property that is not compliant with the \"semver\" specification. Although not required, use of the standard semver version format is recommended.",
		MessageTemplate:  "packages[*].tools[*].version property in violation of semver specification found in tool(s):\n{{.}}",
		Reference:        "https://semver.org/",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsVersionNonSemver,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT011",
		Brief:            "packages[*].tools[*].systems missing",
		Description:      "The package index has a tool without a `systems` property.",
		MessageTemplate:  "Missing packages[*].tools[*].systems property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT012",
		Brief:            "incorrect packages[*].tools[*].systems type",
		Description:      "The package index has a tool with a `systems` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].systems property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT013",
		Brief:            "unrecognized properties in packages[*].tools[*].systems[*]",
		Description:      "A `systems` object for one of the package index's tools contains unknown data properties.",
		MessageTemplate:  "Unknown properties under packages[*].tools[*].systems[*] found in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsAdditionalProperties,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT014",
		Brief:            "packages[*].tools[*].systems[*].host missing",
		Description:      "A `systems` object for one of the package index's tools is missing a `host` property.",
		MessageTemplate:  "Missing packages[*].tools[*].systems[*].host property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsHostMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT015",
		Brief:            "incorrect packages[*].tools[*].systems[*].host type",
		Description:      "A `systems` object for one of the package index's tools has a `host` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].systems[*].host property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsHostIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT0016",
		Brief:            "invalid packages[*].tools[*].systems[*].host",
		Description:      "A `systems` object for one of the package index's tools has an invalid `host` property.",
		MessageTemplate:  "packages[*].tools[*].systems[*].host has an invalid format in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsHostInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT017",
		Brief:            "packages[*].tools[*].systems[*].url missing",
		Description:      "A `systems` object for one of the package index's tools is missing a `url` property.",
		MessageTemplate:  "Missing packages[*].tools[*].systems[*].url property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsURLMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT018",
		Brief:            "incorrect packages[*].tools[*].systems[*].url type",
		Description:      "A `systems` object for one of the package index's tools has a `url` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].systems[*].url property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsURLIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT019",
		Brief:            "invalid packages[*].tools[*].systems[*].url format",
		Description:      "A `systems` object for one of the package index's tools has a `url` property that is not a valid format for a URL.",
		MessageTemplate:  "packages[*].tools[*].systems[*].url property does not have a valid URL format in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsURLInvalidFormat,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT020",
		Brief:            "dead packages[*].tools[*].systems[*].url",
		Description:      "A `systems` object for one of the package index's tools has a `url` property that did not load from the Internet.",
		MessageTemplate:  "Unable to load the packages[*].tools[*].systems[*].url URL for tools(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Permissive},
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsURLDeadLink,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT021",
		Brief:            "packages[*].tools[*].systems[*].archiveFileName missing",
		Description:      "A `systems` object for one of the package index's tools is missing an `archiveFileName` property.",
		MessageTemplate:  "Missing packages[*].tools[*].systems[*].archiveFileName property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsArchiveFileNameMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT022",
		Brief:            "incorrect packages[*].tools[*].systems[*].archiveFileName type",
		Description:      "A `systems` object for one of the package index's tools has an `archiveFileName` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].systems[*].archiveFileName property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT023",
		Brief:            "packages[*].tools[*].systems[*].archiveFileName < min length",
		Description:      "A `systems` object for one of the package index's tools has an `archiveFileName` property shorter than the minimum length.",
		MessageTemplate:  "packages[*].tools[*].systems[*].archiveFileName value less than the minimum length in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT0024",
		Brief:            "invalid packages[*].tools[*].systems[*].archiveFileName",
		Description:      "A `systems` object for one of the package index's tools has an invalid `archiveFileName` value.",
		MessageTemplate:  "packages[*].tools[*].systems[*].archiveFileName has an invalid format in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsArchiveFileNameInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT025",
		Brief:            "packages[*].tools[*].systems[*].checksum missing",
		Description:      "A `systems` object for one of the package index's tools is missing a `checksum` property.",
		MessageTemplate:  "Missing packages[*].tools[*].systems[*].checksum property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsChecksumMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT026",
		Brief:            "incorrect packages[*].tools[*].systems[*].checksum type",
		Description:      "A `systems` object for one of the package index's tools has a `checksum` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].systems[*].checksum property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsChecksumIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT027",
		Brief:            "invalid packages[*].tools[*].systems[*].checksum",
		Description:      "A `systems` object for one of the package index's tools has a `checksum` property with an invalid format.",
		MessageTemplate:  "packages[*].tools[*].systems[*].checksum has an invalid format in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsChecksumInvalid,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT028",
		Brief:            "discouraged packages[*].tools[*].systems[*].checksum algorithm",
		Description:      "A `systems` object for one of the package index's tools has a `checksum` property using a discouraged hash algorithm.",
		MessageTemplate:  "packages[*].tools[*].systems[*].checksum uses a discouraged hash algorithm in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     []rulemode.Type{rulemode.Default},
		ErrorModes:       []rulemode.Type{rulemode.Strict},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT029",
		Brief:            "packages[*].tools[*].systems[*].size missing",
		Description:      "A `systems` object for one of the package index's tools is missing a `size` property.",
		MessageTemplate:  "Missing packages[*].tools[*].systems[*].size property in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsSizeMissing,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT030",
		Brief:            "incorrect packages[*].tools[*].systems[*].size type",
		Description:      "A `systems` object for one of the package index's tools has a `size` property of incorrect type.",
		MessageTemplate:  "packages[*].tools[*].systems[*].size property has incorrect type in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsSizeIncorrectType,
	},
	{
		ProjectType:      projecttype.PackageIndex,
		SuperprojectType: projecttype.All,
		Category:         "data",
		Subcategory:      "tool",
		ID:               "IT031",
		Brief:            "invalid packages[*].tools[*].systems[*].size",
		Description:      "A `systems` object for one of the package index's tools has an invalid `size` property.",
		MessageTemplate:  "packages[*].tools[*].systems[*].size has an invalid format in tool(s):\n{{.}}",
		Reference:        "https://arduino.github.io/arduino-cli/latest/package_index_json-specification/#tools-definitions",
		DisableModes:     nil,
		EnableModes:      []rulemode.Type{rulemode.Default},
		InfoModes:        nil,
		WarningModes:     nil,
		ErrorModes:       []rulemode.Type{rulemode.Default},
		RuleFunction:     rulefunction.PackageIndexPackagesToolsSystemsSizeInvalid,
	},
}
