Add a linter to validate that our configuration for codegen actually implements all requirements (#19074)
* Add support for a linter program for matter files:
- supports a simplified parser language for "rules"
- supports loading existing XML files that define cluster data and
required attributes
* code review
* Updated error message
* Updated error message again - better description
diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint
new file mode 100644
index 0000000..b2fa324
--- /dev/null
+++ b/scripts/rules.matterlint
@@ -0,0 +1,87 @@
+// These are global .matter idl linter rules
+// First load data from XML definitions
+
+load "../src/app/zap-templates/zcl/data-model/chip/access-control-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/access-control-definitions.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/account-login-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/administrator-commissioning-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/application-basic-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/application-launcher-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/audio-output-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/basic-information-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/binding-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/boolean-state-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/bridged-actions-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/bridged-device-basic.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/channel-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/chip-ota.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/chip-types.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/clusters-extensions.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/content-launch-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/descriptor-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/diagnostic-logs-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/door-lock-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/ethernet-network-diagnostics-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/fixed-label-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/flow-measurement-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/general-commissioning-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/general-diagnostics-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/global-attributes.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/group-key-mgmt-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/identify-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/illuminance-measurement-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/keypad-input-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/localization-configuration-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/low-power-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/matter-devices.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/media-input-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/media-playback-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/mode-select-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/network-commissioning-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/onoff-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/operational-credentials-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/power-source-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/power-source-configuration-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/pressure-measurement-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/proxy-configuration-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/proxy-discovery-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/proxy-valid-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/pump-configuration-and-control-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/pwm-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/relative-humidity-measurement-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/scene.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/software-diagnostics-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/switch-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/target-navigator-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/temperature-measurement-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/test-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/time-format-localization-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/time-synchronization-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/unit-localization-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/user-label-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/wake-on-lan-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/wifi-network-diagnostics-cluster.xml";
+load "../src/app/zap-templates/zcl/data-model/chip/window-covering.xml";
+
+all endpoints {
+ // These attributes follow a different code path and do not have to be
+ // present in the .matter file
+ //
+ // require global attribute generatedCommandList = 65528;
+ // require global attribute acceptedCommandList = 65529;
+ // require global attribute attributeList = 65531;
+
+ require global attribute featureMap = 65532;
+ require global attribute clusterRevision = 65533;
+}
+
+endpoint 0 {
+ // Identifiers for clusters are loaded from XML files
+ require server cluster Basic;
+ require server cluster GroupKeyManagement;
+ require server cluster NetworkCommissioning;
+ require server cluster GeneralCommissioning;
+ require server cluster OTASoftwareUpdateRequestor;
+}