Skip to content

Analyzer package ​

Package: Pulse.Mqtt.Analyzers

Use this package when projects should get C# compiler warnings for common Pulse MQTT usage mistakes. It is opt-in and is not referenced by the runtime packages.

Install ​

shell
dotnet add package Pulse.Mqtt.Analyzers

Keep analyzer references private:

xml
<PackageReference Include="Pulse.Mqtt.Analyzers" PrivateAssets="all" />

When using central package management, keep the version in Directory.Packages.props and the private asset marker in the project file.

Diagnostics ​

IDDefault severityWhat it catches
PMQ0001WarningA Pulse MQTT async operation is called as a bare statement and not awaited, returned, assigned, passed, or explicitly discarded.
PMQ0002WarningA cancellable Pulse MQTT async API omits an available in-scope CancellationToken.
PMQ0003WarningKnown async-owned MQTT resources are disposed synchronously.
PMQ0004WarningAn explicit MQTT 3.1.1 packet initializer sets a known MQTT 5-only packet property.

Common fixes ​

Await async operations:

csharp
await client.PublishAsync(packet, cancellationToken);

Pass the available cancellation token:

csharp
await client.SubscribeAsync(filters, cancellationToken);

Dispose async-owned resources asynchronously:

csharp
await using var source = client.ToRouteSourceBlock(template, cancellationToken: cancellationToken);

Avoid MQTT 5-only properties on MQTT 3.1.1 packets:

csharp
var publish = new MqttPublishPacket
{
    ProtocolVersion = MqttProtocolVersion.V311,
    Topic = "events/device-7",
};

Use protocol feature guards when the code supports both protocol versions.

Suppression ​

Prefer fixing the code. Suppress only when the analyzer cannot see a deliberate application pattern:

ini
[*.cs]
dotnet_diagnostic.PMQ0002.severity = none

Or suppress a narrow region:

csharp
#pragma warning disable PMQ0002
await client.ConnectAsync();
#pragma warning restore PMQ0002

Operational notes ​

  • The package is C# only.
  • Diagnostics are warning-only by default.
  • The package has no runtime assets and should not be referenced by shipping libraries as a transitive dependency.

Released under the MIT License.