diff --git a/internal/rule/rule.go b/internal/rule/rule.go index b9d785a5..a988b3ae 100644 --- a/internal/rule/rule.go +++ b/internal/rule/rule.go @@ -62,7 +62,7 @@ func Runner(project project.Type) { func shouldRun(ruleConfiguration ruleconfiguration.Type, currentProject project.Type) (bool, error) { configurationRuleModes := configuration.RuleModes(currentProject.SuperprojectType) - if ruleConfiguration.ProjectType != currentProject.ProjectType { + if !(ruleConfiguration.ProjectType.Matches(currentProject.ProjectType) && ruleConfiguration.SuperprojectType.Matches(currentProject.SuperprojectType)) { return false, nil } diff --git a/internal/rule/rule_test.go b/internal/rule/rule_test.go index c977492e..a41aba71 100644 --- a/internal/rule/rule_test.go +++ b/internal/rule/rule_test.go @@ -31,7 +31,9 @@ func Test_shouldRun(t *testing.T) { testTables := []struct { testName string ruleProjectType projecttype.Type + ruleSuperprojectType projecttype.Type projectType projecttype.Type + superprojectType projecttype.Type disableModes []rulemode.Type enableModes []rulemode.Type libraryManagerSetting string @@ -39,14 +41,15 @@ func Test_shouldRun(t *testing.T) { shouldRunAssertion assert.BoolAssertionFunc errorAssertion assert.ErrorAssertionFunc }{ - {"Project type mismatch", projecttype.Library, projecttype.Sketch, []rulemode.Type{}, []rulemode.Type{}, "false", "specification", assert.False, assert.NoError}, - {"Disable mode match", projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{}, "submit", "specification", assert.False, assert.NoError}, - {"Enable mode match", projecttype.Library, projecttype.Library, []rulemode.Type{}, []rulemode.Type{rulemode.LibraryManagerSubmission}, "submit", "specification", assert.True, assert.NoError}, - {"Disable mode default", projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.Default}, []rulemode.Type{rulemode.LibraryManagerSubmission}, "update", "specification", assert.False, assert.NoError}, - {"Disable mode default override", projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.Default}, []rulemode.Type{rulemode.LibraryManagerSubmission}, "submit", "specification", assert.True, assert.NoError}, - {"Enable mode default", projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{rulemode.Default}, "update", "specification", assert.True, assert.NoError}, - {"Enable mode default override", projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{rulemode.Default}, "submit", "specification", assert.False, assert.NoError}, - {"Unable to resolve", projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{rulemode.LibraryManagerIndexed}, "false", "specification", assert.False, assert.Error}, + {"Project type mismatch", projecttype.Library, projecttype.All, projecttype.Sketch, projecttype.Sketch, []rulemode.Type{}, []rulemode.Type{}, "false", "specification", assert.False, assert.NoError}, + {"Superproject type mismatch", projecttype.Sketch, projecttype.Library, projecttype.Sketch, projecttype.Sketch, []rulemode.Type{}, []rulemode.Type{}, "false", "specification", assert.False, assert.NoError}, + {"Disable mode match", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{}, "submit", "specification", assert.False, assert.NoError}, + {"Enable mode match", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{}, []rulemode.Type{rulemode.LibraryManagerSubmission}, "submit", "specification", assert.True, assert.NoError}, + {"Disable mode default", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.Default}, []rulemode.Type{rulemode.LibraryManagerSubmission}, "update", "specification", assert.False, assert.NoError}, + {"Disable mode default override", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.Default}, []rulemode.Type{rulemode.LibraryManagerSubmission}, "submit", "specification", assert.True, assert.NoError}, + {"Enable mode default", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{rulemode.Default}, "update", "specification", assert.True, assert.NoError}, + {"Enable mode default override", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{rulemode.Default}, "submit", "specification", assert.False, assert.NoError}, + {"Unable to resolve", projecttype.Library, projecttype.All, projecttype.Library, projecttype.Library, []rulemode.Type{rulemode.LibraryManagerSubmission}, []rulemode.Type{rulemode.LibraryManagerIndexed}, "false", "specification", assert.False, assert.Error}, } flags := test.ConfigurationFlags() @@ -58,13 +61,15 @@ func Test_shouldRun(t *testing.T) { configuration.Initialize(flags, []string{"/foo"}) ruleConfiguration := ruleconfiguration.Type{ - ProjectType: testTable.ruleProjectType, - DisableModes: testTable.disableModes, - EnableModes: testTable.enableModes, + ProjectType: testTable.ruleProjectType, + SuperprojectType: testTable.ruleSuperprojectType, + DisableModes: testTable.disableModes, + EnableModes: testTable.enableModes, } project := project.Type{ - ProjectType: testTable.projectType, + ProjectType: testTable.projectType, + SuperprojectType: testTable.superprojectType, } run, err := shouldRun(ruleConfiguration, project) testTable.errorAssertion(t, err, testTable.testName) diff --git a/internal/rule/ruleconfiguration/ruleconfiguration.go b/internal/rule/ruleconfiguration/ruleconfiguration.go index 7171ee2e..05a65453 100644 --- a/internal/rule/ruleconfiguration/ruleconfiguration.go +++ b/internal/rule/ruleconfiguration/ruleconfiguration.go @@ -31,7 +31,8 @@ import ( // Type is the type for rule configurations. type Type struct { - ProjectType projecttype.Type // The project type the rule applies to. + 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 @@ -57,1368 +58,1459 @@ func Configurations() []Type { // configurations is an array of structs that define the configuration of each rule. var configurations = []Type{ { - ProjectType: projecttype.Library, - Category: "structure", - Subcategory: "general", - ID: "LS001", - Brief: "invalid", - Description: "", - MessageTemplate: "Path does not contain a valid Arduino library. See: 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, - Category: "structure", - Subcategory: "root folder", - ID: "LS002", - Brief: "folder name too long", - Description: "This will be problematic for people doing manual installation of the library.", - MessageTemplate: "Folder name {{.}} exceeds maximum length. See: 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, - Category: "structure", - Subcategory: "root folder", - ID: "LS003", - Brief: "disallowed characters in folder name", - Description: "This will be problematic for people doing manual installation of the library.", - MessageTemplate: "Prohibited characters in folder name: {{.}}. See: 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, - Category: "structure", - Subcategory: "miscellaneous", - ID: "LS004", - Brief: "submodule", - Description: "", - 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.`, - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: nil, - RuleFunction: rulefunction.LibraryHasSubmodule, - }, - { - ProjectType: projecttype.Library, - Category: "structure", - Subcategory: "miscellaneous", - ID: "LS005", - Brief: "symlink", - Description: "", - MessageTemplate: "Symlink(s) found at {{.}}. These block acceptance to the Arduino Library Manager index.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed}, - RuleFunction: rulefunction.LibraryContainsSymlinks, - }, - { - ProjectType: projecttype.Library, - Category: "structure", - Subcategory: "miscellaneous", - ID: "LS006", - Brief: ".development file", - Description: "", - MessageTemplate: ".development flag file found. Presence of this file blocks addition to the Library Manager index.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.Strict}, - RuleFunction: rulefunction.LibraryHasDotDevelopmentFile, - }, - { - ProjectType: projecttype.Library, - Category: "structure", - Subcategory: "miscellaneous", - ID: "LS007", - Brief: ".exe file", - Description: "", - MessageTemplate: ".exe file(s) found: {{.}}. Presence of these files blocks inclusion in Library Manager index.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.Strict}, - RuleFunction: rulefunction.LibraryHasExe, - }, - { - ProjectType: projecttype.Library, - Category: "structure", - Subcategory: "source code", - ID: "LS008", - Brief: "name-header mismatch", - Description: `The name value determines the installation folder name and the folder match to the filename in the #include directive influences "folder name priority".`, - MessageTemplate: "No header file found matching library name ({{.}}). Best practices are for primary header filename to match library name.", - 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, - Category: "structure", - Subcategory: "source code", - ID: "LS009", - Brief: "incorrect src folder case", - Description: "", - MessageTemplate: "Incorrect src folder case: {{.}}. This will cause the library to not be recognized on case-sensitive operating systems. See: 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, - Category: "structure", - Subcategory: "source code", - ID: "LS010", - Brief: "recursive with utility folder", - Description: "", - MessageTemplate: `Utility folder found in "1.5" format library. Compilation of this folder is only supported on "1.0" format libraries. See: 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, - Category: "structure", - Subcategory: "extras folder", - ID: "LS011", - Brief: "incorrect extras folder name", - Description: "", - MessageTemplate: "Potentially misspelled extras folder name found: {{.}}. See: 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, - Category: "structure", - Subcategory: "extras folder", - ID: "LS012", - Brief: "incorrect extras folder name case", - Description: "", - MessageTemplate: "Incorrect extras folder name case: {{.}}. See: 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, - Category: "library.properties", - Subcategory: "general", - ID: "LP001", - Brief: "missing", - Description: `Although not required for 1.0 format libraries (AKA "legacy") not in Library Manager, metadata is useful, so it is recommended.`, - MessageTemplate: "Library has no library.properties metadata file. This file provides useful information and is required for admission to the Library Manager index. See: 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.Strict}, - RuleFunction: rulefunction.LibraryPropertiesMissing, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "general", - ID: "LP002", - Brief: "incorrect library.properties file name", - Description: "", - MessageTemplate: "Incorrectly spelled library.properties file name found: {{.}}. See: 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, - Category: "library.properties", - Subcategory: "general", - ID: "LP003", - Brief: "incorrect library.properties file name case", - Description: `This causes "1.5" format (AKA "recursive layout") libraries to not be recognized on filename case-sensitive operating systems.`, - MessageTemplate: "Incorrect library.properties file name case: {{.}}. See: 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, - Category: "library.properties", - Subcategory: "general", - ID: "LP004", - Brief: "redundant", - Description: "", - MessageTemplate: "Redundant library.properties file found at {{.}}. Only the file in the root of the library is used. See: 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, - Category: "library.properties", - Subcategory: "general", - ID: "LP005", - Brief: "invalid format", - Description: "", - MessageTemplate: "library.properties has an invalid format: {{.}}", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesFormat, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "general", - ID: "LP006", - Brief: "misspelled field", - Description: "", - MessageTemplate: "Potentially misspelled library.properties field name detected. See: 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP007", - Brief: "missing name field", - Description: "", - MessageTemplate: "missing name field in library.properties", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesNameFieldMissing, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "name field", - ID: "LP008", - Brief: "name < min length", - Description: "", - MessageTemplate: "library.properties name value is less than minimum length.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesNameFieldLTMinLength, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "name field", - ID: "LP009", - Brief: "name > max length", - Description: "", - MessageTemplate: "library.properties name value {{.}} is longer than maximum length.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesNameFieldGTMaxLength, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "name field", - ID: "LP010", - Brief: "name > recommended length", - Description: "", - MessageTemplate: "library.properties name value {{.}} is longer than recommended max length.", - 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP011", - Brief: "disallowed characters", - Description: "", - MessageTemplate: "disallowed characters in library.properties name value: {{.}}. See: 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP012", - Brief: `starts with "Arduino"`, - Description: `Case insensitive. 3rd party libraries added to Library Manager index prior to the enactment of this rule are "grandfathered".`, - MessageTemplate: `Library name {{.}} starts with "Arduino". These names are reserved for official libraries.`, - 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP013", - Brief: "missing official prefix", - Description: "", - MessageTemplate: `Library name {{.}} is missing the "Arduino_" prefix. All new official library names must use this prefix.`, - 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP014", - Brief: `contains "Arduino"`, - Description: "Case insensitive", - MessageTemplate: `Library name {{.}} contains "Arduino". This is superfluous.`, - 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP015", - Brief: "contains spaces", - Description: "Best practices is for the name value, installation folder, and primary header filename to all match, but this is not possible with names containing spaces.", - MessageTemplate: "library.properties name {{.}} contains spaces. Although supported, best practices is to not use spaces.", - 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP016", - Brief: `contains "library"`, - Description: "Case insensitive", - MessageTemplate: `Library name {{.}} contains "library". This is superfluous.`, - 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, - Category: "library.properties", - Subcategory: "name field", - ID: "LP017", - Brief: "duplicate name", - Description: "This requirement only applies to the library.properties name value. There is no requirement to change the repository or header file names.", - MessageTemplate: "Library name {{.}} is in use by a library in the Library Manager index. Each library must have a unique name value.", - DisableModes: []rulemode.Type{rulemode.LibraryManagerIndexed}, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission}, - RuleFunction: rulefunction.LibraryPropertiesNameFieldDuplicate, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "name field", - ID: "LP018", - Brief: "not in LM index", - Description: "The name value is the identifier used to install the library and define dependencies, so it should not be changed.", - MessageTemplate: "Library name {{.}} not found in the Library Manager index. Library names are not allowed to change after being added to the index. See: https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ#how-can-i-change-my-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, - Category: "library.properties", - Subcategory: "version field", - ID: "LP019", - Brief: "missing version field", - Description: "", - MessageTemplate: "missing version field in library.properties", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesVersionFieldMissing, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "version field", - ID: "LP020", - Brief: "invalid", - Description: `Must be compliant with "relaxed semver".`, - MessageTemplate: "library.properties version value {{.}} is invalid. See 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, - Category: "library.properties", - Subcategory: "version field", - ID: "LP021", - Brief: "non-semver", - Description: "", - MessageTemplate: "library.properties version value {{.}} is not compliant with the semver specification. See 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, - Category: "library.properties", - Subcategory: "version field", - ID: "LP022", - Brief: "tag mismatch", - Description: "The Library Manager indexer will reject any tag that has a library.properties version 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.", - 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, - Category: "library.properties", - Subcategory: "author field", - ID: "LP023", - Brief: "missing author field", - Description: "", - MessageTemplate: "missing required author field in library.properties. See 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, - Category: "library.properties", - Subcategory: "author field", - ID: "LP024", - Brief: "author < min length", - Description: "", - MessageTemplate: "library.properties author value is less than minimum length.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesAuthorFieldLTMinLength, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "maintainer field", - ID: "LP025", - Brief: "missing maintainer field", - Description: "", - MessageTemplate: "missing required maintainer field in library.properties. See 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, - Category: "library.properties", - Subcategory: "maintainer field", - ID: "LP026", - Brief: "maintainer < min length", - Description: "", - MessageTemplate: "library.properties maintainer value is less than minimum length.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesMaintainerFieldLTMinLength, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "maintainer field", - ID: "LP027", - Brief: `starts with "Arduino"`, - Description: "Case insensitive.", - MessageTemplate: `library.properties maintainer value {{.}} starts with "Arduino". 3rd party libraries are not maintained by Arduino.`, - 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, - Category: "library.properties", - Subcategory: "email field", - ID: "LP028", - Brief: `"email" field used as alias for "maintainer"`, - Description: "This was in an early draft of the beta 1.5 library specification.", - MessageTemplate: `library.properties "email" field used as alias for "maintainer". This is deprecated.`, - 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, - Category: "library.properties", - Subcategory: "email field", - ID: "LP029", - Brief: "email < min length", - Description: "", - MessageTemplate: "library.properties email value is less than minimum length.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesEmailFieldLTMinLength, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "email field", - ID: "LP030", - Brief: `starts with "Arduino"`, - Description: "Case insensitive.", - MessageTemplate: `library.properties email value {{.}} starts with "Arduino". 3rd party libraries are not maintained by Arduino.`, - 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, - Category: "library.properties", - Subcategory: "sentence field", - ID: "LP031", - Brief: "missing sentence field", - Description: "", - MessageTemplate: "missing required sentence field in library.properties. See 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, - Category: "library.properties", - Subcategory: "sentence field", - ID: "LP032", - Brief: "sentence < min length", - Description: "", - MessageTemplate: "library.properties sentence value is less than minimum length.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.LibraryPropertiesSentenceFieldLTMinLength, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "sentence field", - ID: "LP033", - Brief: "sentence spell check", - Description: "", - MessageTemplate: "A commonly misspelled word was found in the library.properties sentence field. Suggested correction: {{.}}", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: nil, - RuleFunction: rulefunction.LibraryPropertiesSentenceFieldSpellCheck, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "paragraph field", - ID: "LP034", - Brief: "missing paragraph field", - Description: "", - MessageTemplate: "missing required paragraph field in library.properties. See 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, - Category: "library.properties", - Subcategory: "paragraph field", - ID: "LP035", - Brief: "paragraph spell check", - Description: "", - MessageTemplate: "A commonly misspelled word was found in the library.properties paragraph field. Suggested correction: {{.}}", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: nil, - RuleFunction: rulefunction.LibraryPropertiesParagraphFieldSpellCheck, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "paragraph field", - ID: "LP036", - Brief: "paragraph repeats sentence", - Description: "", - MessageTemplate: "The library.properties paragraph field repeats the sentence field. These are displayed together so redundancy is not needed.", - 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, - Category: "library.properties", - Subcategory: "category field", - ID: "LP037", - Brief: "missing category field", - Description: `This can cause a warning and results in the default "Uncategorized" category being used.`, - MessageTemplate: "missing category field in library.properties. See 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, - Category: "library.properties", - Subcategory: "category field", - ID: "LP038", - Brief: "invalid category value", - Description: `This can cause a warning and results in the default "Uncategorized" category being used.`, - MessageTemplate: "invalid category field value {{.}} in library.properties. See 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, - Category: "library.properties", - Subcategory: "category field", - ID: "LP039", - Brief: `"Uncategorized" category value`, - Description: "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 supported categories listed at 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, - Category: "library.properties", - Subcategory: "url field", - ID: "LP040", - Brief: "missing url field", - Description: "", - MessageTemplate: "missing required url field in library.properties. See 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, - Category: "library.properties", - Subcategory: "url field", - ID: "LP041", - Brief: "invalid url format", - Description: "", - MessageTemplate: "library.properties url field value {{.}} does not have a valid URL 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, - Category: "library.properties", - Subcategory: "url field", - ID: "LP042", - Brief: "Dead URL", - Description: "", - MessageTemplate: "Unable to load the library.properties url field: {{.}}", - 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, - Category: "library.properties", - Subcategory: "architectures field", - ID: "LP043", - Brief: "missing architectures field", - Description: "Defaults to *, but it's better to explicitly define architectures.", - MessageTemplate: "missing architectures field in library.properties. See 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, - Category: "library.properties", - Subcategory: "architectures field", - ID: "LP044", - Brief: "architectures blank", - Description: "Causes 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. See 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, - Category: "library.properties", - Subcategory: "architectures field", - ID: "LP045", - Brief: "architecture alias", - Description: "Alternative development frameworks diverged on architecture naming.", - MessageTemplate: "Architecture alias(es) in library.properties architectures field: {{.}}. Please also specify the true Arduino architectures compatibilities of the library. See 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, - Category: "library.properties", - Subcategory: "architectures field", - ID: "LP046", - Brief: "miscased architecture", - Description: "", - MessageTemplate: "Incorrect case of library.properties architectures field item(s): {{.}}. Architectures are case sensitive. See 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, - Category: "library.properties", - Subcategory: "depends field", - ID: "LP047", - Brief: "disallowed characters", - Description: "", - MessageTemplate: "disallowed characters in library.properties depends field {{.}}. See: 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.LibraryPropertiesDependsFieldDisallowedCharacters, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "depends field", - ID: "LP048", - Brief: "Dependency not in index", - Description: "", - MessageTemplate: "library.properties depends field item(s) {{.}} not found in the Library Manager index.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: nil, - RuleFunction: rulefunction.LibraryPropertiesDependsFieldNotInIndex, - }, - { - ProjectType: projecttype.Library, - Category: "library.properties", - Subcategory: "dot_a_linkage field", - ID: "LP049", - Brief: "invalid value", - Description: "", - MessageTemplate: "invalid dot_a_linkage field value {{.}} in library.properties. See 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, - Category: "library.properties", - Subcategory: "dot_a_linkage field", - ID: "LP050", - Brief: `"true" with "1.5" library format`, - Description: `dot_a_linkage feature is only supported for the "1.5" or "recursive" library format.`, - MessageTemplate: `library.properties dot_a_linkage field enabled but library is not in "1.5" format. See: 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, - Category: "library.properties", - Subcategory: "includes field", - ID: "LP051", - Brief: "includes blank", - Description: `Caused the "Sketch > Include library" feature of previous IDE versions to add an empty #include directive to the sketch.`, - MessageTemplate: "Empty library.properties includes field. Please either define includes or remove this optional field. See 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, - Category: "library.properties", - Subcategory: "includes field", - ID: "LP052", - Brief: "includes file not in library", - Description: `People often think this is the way to define their library's dependencies, which breaks the "Sketch > Include Library" feature for that library.`, - MessageTemplate: "library.properties includes field item(s) {{.}} not found in library.", - 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, - Category: "library.properties", - Subcategory: "precompiled field", - ID: "LP053", - Brief: "invalid value", - Description: "", - MessageTemplate: "invalid precompiled field value {{.}} in library.properties. See 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, - Category: "library.properties", - Subcategory: "precompiled field", - ID: "LP054", - Brief: "precompiled with flat layout", - Description: `precompiled feature is only supported for the "1.5" or "recursive" library format.`, - MessageTemplate: `library.properties precompiled field value {{.}}, is not supported with "1.0" format. See: 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, - Category: "library.properties", - Subcategory: "ldflags field", - ID: "LP055", - Brief: "ldflags < min length", - Description: "", - MessageTemplate: "library.properties ldflags value is less than minimum length.", - 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, - Category: "code", - Subcategory: "miscellaneous", - ID: "LC001", - Brief: "incorrect Arduino.h case", - Description: "This causes compilation failure on filename case-sensitive OS (e.g., Linux).", - MessageTemplate: "Incorrect of Arduino.h filename case detected in #include directive: {{.}}", - 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, - Category: "documentation", - Subcategory: "miscellaneous", - ID: "LD001", - Brief: "no readme", - Description: "", - MessageTemplate: "No readme found. Please document your library. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/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, - Category: "documentation", - Subcategory: "miscellaneous", - ID: "LD002", - Brief: "no license file", - Description: "", - MessageTemplate: "No license file found. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license", - 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, - Category: "documentation", - Subcategory: "examples", - ID: "LD003", - Brief: "stray sketch", - Description: "", - MessageTemplate: "Sketch(es) found outside examples and extras folders: {{.}}. See: 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, - Category: "documentation", - Subcategory: "examples", - ID: "LD004", - Brief: "no examples", - Description: "", - MessageTemplate: "No example sketches found. Please provide examples. See: 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, - Category: "documentation", - Subcategory: "examples", - ID: "LD005", - Brief: "incorrect examples folder name", - Description: "", - MessageTemplate: "Potentially misspelled examples folder name found: {{.}}. See: 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, - Category: "documentation", - Subcategory: "examples", - ID: "LD006", - Brief: "incorrect examples folder name case", - Description: "", - MessageTemplate: "Incorrect examples folder name case: {{.}}. See: 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, - Category: "structure", - Subcategory: "root folder", - ID: "SS001", - Brief: "name mismatch", - Description: "", - MessageTemplate: "Sketch file/folder name mismatch. The primary sketch file name must match the folder: {{.}}. See: 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, - Category: "structure", - Subcategory: "file name", - ID: "SS002", - Brief: "disallowed characters in file name", - Description: "", - MessageTemplate: "Prohibited characters in file name(s): {{.}}. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#sketch-root-folder", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.ProhibitedCharactersInSketchFileName, - }, - { - ProjectType: projecttype.Sketch, - Category: "structure", - Subcategory: "file name", - ID: "SS003", - Brief: "file name too long", - Description: "", - MessageTemplate: "File name(s): {{.}} exceed maximum length. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#sketch-root-folder", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.SketchFileNameGTMaxLength, - }, - { - ProjectType: projecttype.Sketch, - Category: "structure", - Subcategory: "file name", - ID: "SS004", - Brief: ".pde extension", - Description: "The .pde extension is used by both Processing sketches and Arduino sketches. Processing sketches should either be in the \"data\" subfolder of the sketch or in the \"extras\" folder of the library. Arduino sketches should use the modern .ino extension.", - MessageTemplate: "{{.}} uses deprecated .pde file extension. Use .ino for Arduino sketches.", - 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, - Category: "structure", - Subcategory: "miscellaneous", - ID: "SS005", - Brief: "incorrect src folder case", - Description: "", - MessageTemplate: "Incorrect src folder case: {{.}}. This will cause the source files under it to not be compiled on case-sensitive operating systems. See: 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, - Category: "code", - Subcategory: "miscellaneous", - ID: "SC001", - Brief: "incorrect Arduino.h case", - Description: "This causes compilation failure on filename case-sensitive OS (e.g., Linux).", - MessageTemplate: "Incorrect of Arduino.h filename case detected in #include directive: {{.}}", - 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, - Category: "documentation", - Subcategory: "miscellaneous", - ID: "SD001", - Brief: "no readme", - Description: "", - MessageTemplate: "No readme found. Please document your sketch. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/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, - Category: "documentation", - Subcategory: "miscellaneous", - ID: "SD002", - Brief: "no license file", - Description: "", - MessageTemplate: "No license file found. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Default}, - ErrorModes: []rulemode.Type{rulemode.Strict}, - RuleFunction: rulefunction.MissingLicenseFile, - }, - { - ProjectType: projecttype.Sketch, - Category: "sketch.json", - Subcategory: "general", - ID: "SM001", - Brief: "invalid sketch.json JSON format", - Description: "", - MessageTemplate: "sketch.json is not a valid JSON document. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#metadata", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Permissive}, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.SketchDotJSONJSONFormat, - }, - { - ProjectType: projecttype.Sketch, - Category: "sketch.json", - Subcategory: "general", - ID: "SM002", - Brief: "invalid sketch.json data format", - Description: "", - MessageTemplate: "sketch.json has an invalid data format: {{.}}. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#metadata", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: []rulemode.Type{rulemode.Permissive}, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.SketchDotJSONFormat, - }, - { - ProjectType: projecttype.Platform, - Category: "documentation", - Subcategory: "miscellaneous", - ID: "PD001", - Brief: "no readme", - Description: "", - MessageTemplate: "No readme found. Please document your library. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/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.Platform, - Category: "documentation", - Subcategory: "miscellaneous", - ID: "PD002", - Brief: "no license file", - Description: "", - MessageTemplate: "No license file found. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license", - 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, - Category: "configuration files", - Subcategory: "boards.txt", - ID: "PF001", - Brief: "missing", - Description: "", - MessageTemplate: "Required boards.txt is missing. Expected at: {{.}}", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.BoardsTxtMissing, - }, - { - ProjectType: projecttype.Platform, - Category: "configuration files", - Subcategory: "boards.txt", - ID: "PF002", - Brief: "Invalid boards.txt", - Description: "", - MessageTemplate: "boards.txt has an invalid format: {{.}}", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.BoardsTxtFormat, - }, - { - ProjectType: projecttype.Platform, - Category: "code", - Subcategory: "miscellaneous", - ID: "PC001", - Brief: "incorrect Arduino.h case", - Description: "This causes compilation failure on filename case-sensitive OS (e.g., Linux).", - MessageTemplate: "Incorrect of Arduino.h filename case detected in #include directive: {{.}}", - 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, - Category: "data", - Subcategory: "general", - ID: "ID001", - Brief: "Invalid JSON format", - Description: "", - MessageTemplate: "Invalid JSON format.", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.PackageIndexJSONFormat, - }, - { - ProjectType: projecttype.PackageIndex, - Category: "data", - Subcategory: "general", - ID: "ID002", - Brief: "Invalid format", - Description: "", - MessageTemplate: "Invalid package index format: {{.}}", - DisableModes: nil, - EnableModes: []rulemode.Type{rulemode.Default}, - InfoModes: nil, - WarningModes: nil, - ErrorModes: []rulemode.Type{rulemode.Default}, - RuleFunction: rulefunction.PackageIndexFormat, + ProjectType: projecttype.Library, + SuperprojectType: projecttype.All, + Category: "structure", + Subcategory: "general", + ID: "LS001", + Brief: "invalid", + Description: "", + MessageTemplate: "Path does not contain a valid Arduino library. See: 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: "This will be problematic for people doing manual installation of the library.", + MessageTemplate: "Folder name {{.}} exceeds maximum length. See: 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: "disallowed characters in folder name", + Description: "This will be problematic for people doing manual installation of the library.", + MessageTemplate: "Prohibited characters in folder name: {{.}}. See: 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: "", + 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.`, + 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: "", + MessageTemplate: "Symlink(s) found at {{.}}. These block acceptance to the Arduino Library Manager index.", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Default}, + ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed}, + RuleFunction: rulefunction.LibraryContainsSymlinks, + }, + { + ProjectType: projecttype.Library, + SuperprojectType: projecttype.All, + Category: "structure", + Subcategory: "miscellaneous", + ID: "LS006", + Brief: ".development file", + Description: "", + MessageTemplate: ".development flag file found. Presence of this file blocks addition to the Library Manager index.", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Default}, + ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.Strict}, + RuleFunction: rulefunction.LibraryHasDotDevelopmentFile, + }, + { + ProjectType: projecttype.Library, + SuperprojectType: projecttype.Library, + Category: "structure", + Subcategory: "miscellaneous", + ID: "LS007", + Brief: ".exe file", + Description: "", + MessageTemplate: ".exe file(s) found: {{.}}. Presence of these files blocks inclusion in Library Manager index.", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Default}, + ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission, rulemode.LibraryManagerIndexed, rulemode.Strict}, + RuleFunction: rulefunction.LibraryHasExe, + }, + { + ProjectType: projecttype.Library, + SuperprojectType: projecttype.All, + Category: "structure", + Subcategory: "source code", + ID: "LS008", + Brief: "name-header mismatch", + Description: `The name value determines the installation folder name and the folder match to the filename in the #include directive influences "folder name priority".`, + MessageTemplate: "No header file found matching library name ({{.}}). Best practices are for primary header filename to match library name.", + 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: "incorrect src folder case", + Description: "", + MessageTemplate: "Incorrect src folder case: {{.}}. This will cause the library to not be recognized on case-sensitive operating systems. See: 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: "", + MessageTemplate: `Utility folder found in "1.5" format library. Compilation of this folder is only supported on "1.0" format libraries. See: 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: "", + MessageTemplate: "Potentially misspelled extras folder name found: {{.}}. See: 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: "incorrect extras folder name case", + Description: "", + MessageTemplate: "Incorrect extras folder name case: {{.}}. See: 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", + Description: `Although not required for 1.0 format libraries (AKA "legacy") not in Library Manager, metadata is useful, so it is recommended.`, + MessageTemplate: "Library has no library.properties metadata file. This file provides useful information and is required for admission to the Library Manager index. See: 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.Strict}, + RuleFunction: rulefunction.LibraryPropertiesMissing, + }, + { + ProjectType: projecttype.Library, + SuperprojectType: projecttype.All, + Category: "library.properties", + Subcategory: "general", + ID: "LP002", + Brief: "incorrect library.properties file name", + Description: "", + MessageTemplate: "Incorrectly spelled library.properties file name found: {{.}}. See: 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: "incorrect library.properties file name case", + Description: `This causes "1.5" format (AKA "recursive layout") libraries to not be recognized on filename case-sensitive operating systems.`, + MessageTemplate: "Incorrect library.properties file name case: {{.}}. See: 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", + Description: "", + MessageTemplate: "Redundant library.properties file found at {{.}}. Only the file in the root of the library is used. See: 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: "invalid format", + Description: "", + MessageTemplate: "library.properties has an invalid 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 field", + Description: "", + MessageTemplate: "Potentially misspelled library.properties field name detected. See: 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 field", + Description: "", + MessageTemplate: "missing name field in library.properties", + 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: "", + MessageTemplate: "library.properties name value is less than minimum length.", + 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: "", + MessageTemplate: "library.properties name value {{.}} is longer than maximum length.", + 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: "", + MessageTemplate: "library.properties name value {{.}} is longer than recommended max length.", + 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: "disallowed characters", + Description: "", + MessageTemplate: "disallowed characters in library.properties name value: {{.}}. See: 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: `starts with "Arduino"`, + Description: `Case insensitive. 3rd party libraries added to Library Manager index prior to the enactment of this rule are "grandfathered".`, + MessageTemplate: `Library name {{.}} starts with "Arduino". These names are reserved for official libraries.`, + 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: "missing official prefix", + Description: "", + MessageTemplate: `Library name {{.}} is missing the "Arduino_" prefix. All new official library names must use this prefix.`, + 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: `contains "Arduino"`, + Description: "Case insensitive", + MessageTemplate: `Library name {{.}} contains "Arduino". This is superfluous.`, + 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: "contains spaces", + Description: "Best practices is for the name value, installation folder, and primary header filename to all match, but this is not possible with names containing spaces.", + MessageTemplate: "library.properties name {{.}} contains spaces. Although supported, best practices is to not use spaces.", + 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: `contains "library"`, + Description: "Case insensitive", + MessageTemplate: `Library name {{.}} contains "library". This is superfluous.`, + 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: "This requirement only applies to the library.properties name value. There is no requirement to change the repository or header file names.", + MessageTemplate: "Library name {{.}} is in use by a library in the Library Manager index. Each library must have a unique name value.", + DisableModes: []rulemode.Type{rulemode.LibraryManagerIndexed}, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Default}, + ErrorModes: []rulemode.Type{rulemode.LibraryManagerSubmission}, + RuleFunction: rulefunction.LibraryPropertiesNameFieldDuplicate, + }, + { + ProjectType: projecttype.Library, + SuperprojectType: projecttype.Library, + Category: "library.properties", + Subcategory: "name field", + ID: "LP018", + Brief: "not in LM index", + Description: "The name value is the identifier used to install the library and define dependencies, so it should not be changed.", + MessageTemplate: "Library name {{.}} not found in the Library Manager index. Library names are not allowed to change after being added to the index. See: https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ#how-can-i-change-my-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: "", + MessageTemplate: "missing version field in library.properties", + 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", + Description: `Must be compliant with "relaxed semver".`, + MessageTemplate: "library.properties version value {{.}} is invalid. See 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", + Description: "", + MessageTemplate: "library.properties version value {{.}} is not compliant with the semver specification. See 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 Library Manager indexer will reject any tag that has a library.properties version 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.", + 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: "", + MessageTemplate: "missing required author field in library.properties. See 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: "", + MessageTemplate: "library.properties author value is less than minimum length.", + 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: "", + MessageTemplate: "missing required maintainer field in library.properties. See 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: "", + MessageTemplate: "library.properties maintainer value is less than minimum length.", + 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: `starts with "Arduino"`, + Description: "Case insensitive.", + MessageTemplate: `library.properties maintainer value {{.}} starts with "Arduino". 3rd party libraries are not maintained by Arduino.`, + 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: "email field", + ID: "LP028", + Brief: `"email" field used as alias for "maintainer"`, + Description: "This was in an early draft of the beta 1.5 library specification.", + MessageTemplate: `library.properties "email" field used as alias for "maintainer". This is deprecated.`, + 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: "", + MessageTemplate: "library.properties email value is less than minimum length.", + 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: `starts with "Arduino"`, + Description: "Case insensitive.", + MessageTemplate: `library.properties email value {{.}} starts with "Arduino". 3rd party libraries are not maintained by Arduino.`, + 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: "", + MessageTemplate: "missing required sentence field in library.properties. See 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: "", + MessageTemplate: "library.properties sentence value is less than minimum length.", + 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: "", + MessageTemplate: "A commonly misspelled word was found in the library.properties sentence field. Suggested correction: {{.}}", + 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: "", + MessageTemplate: "missing required paragraph field in library.properties. See 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: "", + MessageTemplate: "A commonly misspelled word was found in the library.properties paragraph field. Suggested correction: {{.}}", + 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: "", + MessageTemplate: "The library.properties paragraph field repeats the sentence field. These are displayed together so redundancy is not needed.", + 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: `This can cause a warning and results in the default "Uncategorized" category being used.`, + MessageTemplate: "missing category field in library.properties. See 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: `This can cause a warning and results in the default "Uncategorized" category being used.`, + MessageTemplate: "invalid category field value {{.}} in library.properties. See 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: "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 supported categories listed at 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: "", + MessageTemplate: "missing required url field in library.properties. See 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: "LP041", + Brief: "invalid url format", + Description: "", + MessageTemplate: "library.properties url field value {{.}} does not have a valid URL 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: "", + MessageTemplate: "Unable to load the library.properties url field: {{.}}", + 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: "Defaults to *, but it's better to explicitly define architectures.", + MessageTemplate: "missing architectures field in library.properties. See 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: "Causes 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. See 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: "Alternative development frameworks diverged on architecture naming.", + MessageTemplate: "Architecture alias(es) in library.properties architectures field: {{.}}. Please also specify the true Arduino architectures compatibilities of the library. See 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: "miscased architecture", + Description: "", + MessageTemplate: "Incorrect case of library.properties architectures field item(s): {{.}}. Architectures are case sensitive. See 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: "disallowed characters", + Description: "", + MessageTemplate: "disallowed characters in library.properties depends field {{.}}. See: 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.LibraryPropertiesDependsFieldDisallowedCharacters, + }, + { + ProjectType: projecttype.Library, + SuperprojectType: projecttype.All, + Category: "library.properties", + Subcategory: "depends field", + ID: "LP048", + Brief: "Dependency not in index", + Description: "", + MessageTemplate: "library.properties depends field item(s) {{.}} not found in the Library Manager index.", + DisableModes: nil, + 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: "dot_a_linkage field", + ID: "LP049", + Brief: "invalid value", + Description: "", + MessageTemplate: "invalid dot_a_linkage field value {{.}} in library.properties. See 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: `"true" with "1.5" library format`, + Description: `dot_a_linkage feature is only supported for the "1.5" or "recursive" library format.`, + MessageTemplate: `library.properties dot_a_linkage field enabled but library is not in "1.5" format. See: 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: `Caused the "Sketch > Include library" feature of previous IDE versions to add an empty #include directive to the sketch.`, + MessageTemplate: "Empty library.properties includes field. Please either define includes or remove this optional field. See 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 file not in library", + Description: `People often think this is the way to define their library's dependencies, which breaks the "Sketch > Include Library" feature for that library.`, + MessageTemplate: "library.properties includes field item(s) {{.}} not found in library.", + 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 value", + Description: "", + MessageTemplate: "invalid precompiled field value {{.}} in library.properties. See 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 flat layout", + Description: `precompiled feature is only supported for the "1.5" or "recursive" library format.`, + MessageTemplate: `library.properties precompiled field value {{.}}, is not supported with "1.0" format. See: 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: "", + MessageTemplate: "library.properties ldflags value is less than minimum length.", + 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: "incorrect Arduino.h case", + Description: "This causes compilation failure on filename case-sensitive OS (e.g., Linux).", + MessageTemplate: "Incorrect of Arduino.h filename case detected in #include directive: {{.}}", + 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: "", + MessageTemplate: "No readme found. Please document your library. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/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: "", + MessageTemplate: "No license file found. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license", + 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: "", + MessageTemplate: "Sketch(es) found outside examples and extras folders: {{.}}. See: 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: "", + MessageTemplate: "No example sketches found. Please provide examples. See: 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: "", + MessageTemplate: "Potentially misspelled examples folder name found: {{.}}. See: 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: "incorrect examples folder name case", + Description: "", + MessageTemplate: "Incorrect examples folder name case: {{.}}. See: 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: "", + MessageTemplate: "Sketch file/folder name mismatch. The primary sketch file name must match the folder: {{.}}. See: 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: "disallowed characters in file name", + Description: "", + MessageTemplate: "Prohibited characters in file name(s): {{.}}. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#sketch-root-folder", + 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: "", + MessageTemplate: "File name(s): {{.}} exceed maximum length. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#sketch-root-folder", + 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: "The .pde extension is used by both Processing sketches and Arduino sketches. Processing sketches should either be in the \"data\" subfolder of the sketch or in the \"extras\" folder of the library. Arduino sketches should use the modern .ino extension.", + MessageTemplate: "{{.}} uses deprecated .pde file extension. Use .ino for Arduino sketches.", + 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: "incorrect src folder case", + Description: "", + MessageTemplate: "Incorrect src folder case: {{.}}. This will cause the source files under it to not be compiled on case-sensitive operating systems. See: 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: "incorrect Arduino.h case", + Description: "This causes compilation failure on filename case-sensitive OS (e.g., Linux).", + MessageTemplate: "Incorrect of Arduino.h filename case detected in #include directive: {{.}}", + 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: "", + MessageTemplate: "No readme found. Please document your sketch. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/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: "", + MessageTemplate: "No license file found. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Default}, + ErrorModes: []rulemode.Type{rulemode.Strict}, + RuleFunction: rulefunction.MissingLicenseFile, + }, + { + ProjectType: projecttype.Sketch, + SuperprojectType: projecttype.All, + Category: "sketch.json", + Subcategory: "general", + ID: "SM001", + Brief: "invalid sketch.json JSON format", + Description: "", + MessageTemplate: "sketch.json is not a valid JSON document. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#metadata", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Permissive}, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.SketchDotJSONJSONFormat, + }, + { + ProjectType: projecttype.Sketch, + SuperprojectType: projecttype.All, + Category: "sketch.json", + Subcategory: "general", + ID: "SM002", + Brief: "invalid sketch.json data format", + Description: "", + MessageTemplate: "sketch.json has an invalid data format: {{.}}. See: https://arduino.github.io/arduino-cli/latest/sketch-specification/#metadata", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: []rulemode.Type{rulemode.Permissive}, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.SketchDotJSONFormat, + }, + { + ProjectType: projecttype.Platform, + SuperprojectType: projecttype.Platform, + Category: "documentation", + Subcategory: "miscellaneous", + ID: "PD001", + Brief: "no readme", + Description: "", + MessageTemplate: "No readme found. Please document your library. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/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.Platform, + SuperprojectType: projecttype.Platform, + Category: "documentation", + Subcategory: "miscellaneous", + ID: "PD002", + Brief: "no license file", + Description: "", + MessageTemplate: "No license file found. See: https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license", + 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.All, + Category: "configuration files", + Subcategory: "boards.txt", + ID: "PF001", + Brief: "missing", + Description: "", + MessageTemplate: "Required boards.txt is missing. Expected at: {{.}}", + 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: "", + MessageTemplate: "boards.txt has an invalid format: {{.}}", + 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: "code", + Subcategory: "miscellaneous", + ID: "PC001", + Brief: "incorrect Arduino.h case", + Description: "This causes compilation failure on filename case-sensitive OS (e.g., Linux).", + MessageTemplate: "Incorrect of Arduino.h filename case detected in #include directive: {{.}}", + 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: "ID001", + Brief: "Invalid JSON format", + Description: "", + MessageTemplate: "Invalid JSON format.", + 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: "Invalid format", + Description: "", + MessageTemplate: "Invalid package index format: {{.}}", + DisableModes: nil, + EnableModes: []rulemode.Type{rulemode.Default}, + InfoModes: nil, + WarningModes: nil, + ErrorModes: []rulemode.Type{rulemode.Default}, + RuleFunction: rulefunction.PackageIndexFormat, }, } diff --git a/internal/rule/rulefunction/library.go b/internal/rule/rulefunction/library.go index 4a14f549..736ed095 100644 --- a/internal/rule/rulefunction/library.go +++ b/internal/rule/rulefunction/library.go @@ -571,10 +571,6 @@ func LibraryPropertiesVersionFieldNonSemver() (result ruleresult.Type, output st // LibraryPropertiesVersionFieldBehindTag checks whether a release tag was made without first bumping the library.properties version value. func LibraryPropertiesVersionFieldBehindTag() (result ruleresult.Type, output string) { - if projectdata.ProjectType() != projectdata.SuperProjectType() { - return ruleresult.Skip, "Not relevant for subprojects" - } - if projectdata.LibraryPropertiesLoadError() != nil { return ruleresult.NotRun, "Couldn't load library.properties" } diff --git a/internal/rule/rulefunction/library_test.go b/internal/rule/rulefunction/library_test.go index c032ca1e..71271037 100644 --- a/internal/rule/rulefunction/library_test.go +++ b/internal/rule/rulefunction/library_test.go @@ -494,7 +494,6 @@ func TestLibraryPropertiesVersionFieldBehindTag(t *testing.T) { } testTables := []libraryRuleFunctionTestTable{ - // TODO: Test Skip if subproject {"Unable to load", "InvalidLibraryProperties", ruleresult.NotRun, ""}, {"Legacy", "Legacy", ruleresult.NotRun, ""}, {"Unparsable version", "VersionFormatInvalid", ruleresult.NotRun, ""}, diff --git a/internal/rule/rulefunction/rulefunction.go b/internal/rule/rulefunction/rulefunction.go index 944e4aa1..513706d1 100644 --- a/internal/rule/rulefunction/rulefunction.go +++ b/internal/rule/rulefunction/rulefunction.go @@ -34,10 +34,6 @@ type Type func() (result ruleresult.Type, output string) // MissingReadme checks if the project has a readme that will be recognized by GitHub. func MissingReadme() (result ruleresult.Type, output string) { - if projectdata.ProjectType() != projectdata.SuperProjectType() { - return ruleresult.Skip, "Readme not required for subprojects" - } - // https://github.com/github/markup/blob/master/README.md readmeRegexp := regexp.MustCompile(`(?i)^readme\.(markdown)|(mdown)|(mkdn)|(md)|(textile)|(rdoc)|(org)|(creole)|(mediawiki)|(wiki)|(rst)|(asciidoc)|(adoc)|(asc)|(pod)|(txt)$`) @@ -53,10 +49,6 @@ func MissingReadme() (result ruleresult.Type, output string) { // MissingLicenseFile checks if the project has a license file that will be recognized by GitHub. func MissingLicenseFile() (result ruleresult.Type, output string) { - if projectdata.ProjectType() != projectdata.SuperProjectType() { - return ruleresult.Skip, "License file not required for subprojects" - } - // https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository#detecting-a-license // https://github.com/licensee/licensee/blob/master/docs/what-we-look-at.md#detecting-the-license-file // Should be `(?i)^(((un)?licen[sc]e)|(copy(ing|right))|(ofl)|(patents))(\.(?!spdx|header|gemspec).+)?$` but regexp package doesn't support negative lookahead, so only using "preferred extensions". diff --git a/internal/rule/rulefunction/rulefunction_test.go b/internal/rule/rulefunction/rulefunction_test.go index 86501261..ae085fb1 100644 --- a/internal/rule/rulefunction/rulefunction_test.go +++ b/internal/rule/rulefunction/rulefunction_test.go @@ -38,8 +38,6 @@ func init() { type ruleFunctionTestTable struct { testName string projectFolderName string - projectType projecttype.Type - superProjectType projecttype.Type expectedRuleResult ruleresult.Type expectedOutputQuery string } @@ -50,8 +48,8 @@ func checkRuleFunction(ruleFunction Type, testTables []ruleFunctionTestTable, t testProject := project.Type{ Path: testDataPath.Join(testTable.projectFolderName), - ProjectType: testTable.projectType, - SuperprojectType: testTable.superProjectType, + ProjectType: projecttype.Library, + SuperprojectType: projecttype.Library, } projectdata.Initialize(testProject) @@ -64,9 +62,8 @@ func checkRuleFunction(ruleFunction Type, testTables []ruleFunctionTestTable, t func TestMissingReadme(t *testing.T) { testTables := []ruleFunctionTestTable{ - {"Subproject", "readme", projecttype.Sketch, projecttype.Library, ruleresult.Skip, ""}, - {"Readme", "readme", projecttype.Sketch, projecttype.Sketch, ruleresult.Pass, ""}, - {"No readme", "no-readme", projecttype.Sketch, projecttype.Sketch, ruleresult.Fail, ""}, + {"Readme", "readme", ruleresult.Pass, ""}, + {"No readme", "no-readme", ruleresult.Fail, ""}, } checkRuleFunction(MissingReadme, testTables, t) @@ -74,10 +71,9 @@ func TestMissingReadme(t *testing.T) { func TestMissingLicenseFile(t *testing.T) { testTables := []ruleFunctionTestTable{ - {"Subproject", "no-license-file", projecttype.Sketch, projecttype.Library, ruleresult.Skip, ""}, - {"Has license", "license-file", projecttype.Sketch, projecttype.Sketch, ruleresult.Pass, ""}, - {"Has license in subfolder", "license-file-in-subfolder", projecttype.Sketch, projecttype.Sketch, ruleresult.Fail, ""}, - {"No license", "no-license-file", projecttype.Sketch, projecttype.Sketch, ruleresult.Fail, ""}, + {"Has license", "license-file", ruleresult.Pass, ""}, + {"Has license in subfolder", "license-file-in-subfolder", ruleresult.Fail, ""}, + {"No license", "no-license-file", ruleresult.Fail, ""}, } checkRuleFunction(MissingLicenseFile, testTables, t) @@ -85,9 +81,9 @@ func TestMissingLicenseFile(t *testing.T) { func TestIncorrectArduinoDotHFileNameCase(t *testing.T) { testTables := []ruleFunctionTestTable{ - {"Incorrect, angle brackets", "arduino.h-angle", projecttype.Sketch, projecttype.Sketch, ruleresult.Fail, ""}, - {"Incorrect, quotes", "arduino.h-quote", projecttype.Sketch, projecttype.Sketch, ruleresult.Fail, ""}, - {"Correct case", "Arduino.h", projecttype.Sketch, projecttype.Sketch, ruleresult.Pass, ""}, + {"Incorrect, angle brackets", "arduino.h-angle", ruleresult.Fail, ""}, + {"Incorrect, quotes", "arduino.h-quote", ruleresult.Fail, ""}, + {"Correct case", "Arduino.h", ruleresult.Pass, ""}, } checkRuleFunction(IncorrectArduinoDotHFileNameCase, testTables, t)