Split out QueueDefinitionAnalyzer - #40
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughQueue attribute discovery now distinguishes queue definitions from queue usage. A new analyzer validates queue references and configuration, duplicate detection targets queue definitions, and job generation derives queue metadata directly from uses-queue attributes. ChangesQueue definition flow
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant Compilation
participant QueueDefinitionAnalyzer
participant AttributeDataExtensions
participant Diagnostics
Compilation->>QueueDefinitionAnalyzer: Analyze named type
QueueDefinitionAnalyzer->>AttributeDataExtensions: Read queue attributes
AttributeDataExtensions-->>QueueDefinitionAnalyzer: Return attribute metadata
QueueDefinitionAnalyzer->>Diagnostics: Report validation diagnostics
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
QueueDefinitionAnalyzerQueueDefinitionAnalyzer
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/Immediate.Jobs.Generators/ImmediateJobsGenerator.Transform.cs`:
- Around line 85-103: Update the UsesQueue<T> resolution in
ImmediateJobsGenerator.Transform.cs so it consistently reads T’s QueueDefinition
priority and concurrency, preserving the resolved values for critical-queue;
update
AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ..WorkJob.g.verified.cs
lines 157-158 to retain 10 and 1, and remove the competing zero-valued
registration from
AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ.ServiceCollectionExtensions.g.verified.cs
lines 25-30.
- Around line 85-103: Update the queue-name validation in the
`UsesQueueAttribute` switch within `ImmediateJobsGenerator.Transform` to reject
names that are null, empty, or whitespace-only, matching
`QueueDefinitionAnalyzer` and `TransformQueue`; preserve the existing priority
and concurrency validation and default-name handling.
In `@tests/Immediate.Jobs.Tests/AnalyzerTests/QueueDefinitionAnalyzerTests.cs`:
- Around line 35-36: Update PresentQueueDefinitionAttributeShouldNotError to
instantiate and run QueueDefinitionAnalyzer instead of
MissingHandlerAttributeAnalyzer, so the test validates the valid
queue-definition path while preserving its existing no-error assertion.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: a94eba0f-43f4-4b28-b0d4-1cdd6e71a0ba
📒 Files selected for processing (8)
src/Common/AttributeDataExtensions.cssrc/Immediate.Jobs.Analyzers/DiagnosticIds.cssrc/Immediate.Jobs.Analyzers/DuplicateElementsAnalyzer.cssrc/Immediate.Jobs.Analyzers/QueueDefinitionAnalyzer.cssrc/Immediate.Jobs.Generators/ImmediateJobsGenerator.Transform.cstests/Immediate.Jobs.Tests/AnalyzerTests/QueueDefinitionAnalyzerTests.cstests/Immediate.Jobs.Tests/GeneratorTests/Snapshots/AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ..WorkJob.g.verified.cstests/Immediate.Jobs.Tests/GeneratorTests/Snapshots/AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ.ServiceCollectionExtensions.g.verified.cs
| if ( | ||
| attributes.UsesQueueAttribute switch | ||
| { | ||
| { AttributeClass.TypeArguments: [{ } queueSymbol] } | ||
| when queueSymbol.GetAttributes().QueueDefinitionAttribute is { } queueDefinitionAttribute => | ||
| ( | ||
| QueueName: queueDefinitionAttribute.GetQueueName(queueSymbol.Name).NullIf("default"), | ||
| QueuePriority: queueDefinitionAttribute.NamedArguments.GetIntValue("Priority", 0), | ||
| QueueConcurrency: queueDefinitionAttribute.NamedArguments.GetIntValue("Concurrency", 0) | ||
| ), | ||
|
|
||
| { } => default((string? QueueName, int QueuePriority, int QueueConcurrency)?), | ||
|
|
||
| _ => (QueueName: "default", QueuePriority: 0, QueueConcurrency: 0), | ||
| } is not ({ } queueName, var queuePriority, >= 0 and var queueConcurrency) | ||
| ) | ||
| { | ||
| return null; | ||
| } |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Preserve the referenced queue definition’s configuration. The generated output now treats critical-queue as both { Priority = 10, Concurrency = 1 } and { Priority = 0, Concurrency = 0 }, so jobs and DI consumers can observe conflicting definitions.
src/Immediate.Jobs.Generators/ImmediateJobsGenerator.Transform.cs#L85-L103: ensure theUsesQueue<T>path resolves the same priority and concurrency asT’sQueueDefinition.tests/Immediate.Jobs.Tests/GeneratorTests/Snapshots/AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ..WorkJob.g.verified.cs#L157-L158: retain the resolved10and1values forcritical-queue.tests/Immediate.Jobs.Tests/GeneratorTests/Snapshots/AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ.ServiceCollectionExtensions.g.verified.cs#L25-L30: remove the competing zero-valued registration; only the queue-definition configuration should be registered.
📍 Affects 3 files
src/Immediate.Jobs.Generators/ImmediateJobsGenerator.Transform.cs#L85-L103(this comment)tests/Immediate.Jobs.Tests/GeneratorTests/Snapshots/AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ..WorkJob.g.verified.cs#L157-L158tests/Immediate.Jobs.Tests/GeneratorTests/Snapshots/AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ.ServiceCollectionExtensions.g.verified.cs#L25-L30
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/Immediate.Jobs.Generators/ImmediateJobsGenerator.Transform.cs` around
lines 85 - 103, Update the UsesQueue<T> resolution in
ImmediateJobsGenerator.Transform.cs so it consistently reads T’s QueueDefinition
priority and concurrency, preserving the resolved values for critical-queue;
update
AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ..WorkJob.g.verified.cs
lines 157-158 to retain 10 and 1, and remove the competing zero-valued
registration from
AddJobsTests.ServiceCollectionExtensionsUsesQueuesAndTaggedRegistrations_framework=net11.0#IJ.ServiceCollectionExtensions.g.verified.cs
lines 25-30.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
Reject whitespace-only queue names here too.
QueueDefinitionAnalyzer and TransformQueue reject whitespace-only names, but this path only excludes "default". A job can therefore reference " " while its queue definition is skipped.
Proposed fix
if (
attributes.UsesQueueAttribute switch
{
// ...
} is not ({ } queueName, var queuePriority, >= 0 and var queueConcurrency)
)
{
return null;
}
+
+ if (string.IsNullOrWhiteSpace(queueName))
+ return null;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if ( | |
| attributes.UsesQueueAttribute switch | |
| { | |
| { AttributeClass.TypeArguments: [{ } queueSymbol] } | |
| when queueSymbol.GetAttributes().QueueDefinitionAttribute is { } queueDefinitionAttribute => | |
| ( | |
| QueueName: queueDefinitionAttribute.GetQueueName(queueSymbol.Name).NullIf("default"), | |
| QueuePriority: queueDefinitionAttribute.NamedArguments.GetIntValue("Priority", 0), | |
| QueueConcurrency: queueDefinitionAttribute.NamedArguments.GetIntValue("Concurrency", 0) | |
| ), | |
| { } => default((string? QueueName, int QueuePriority, int QueueConcurrency)?), | |
| _ => (QueueName: "default", QueuePriority: 0, QueueConcurrency: 0), | |
| } is not ({ } queueName, var queuePriority, >= 0 and var queueConcurrency) | |
| ) | |
| { | |
| return null; | |
| } | |
| if ( | |
| attributes.UsesQueueAttribute switch | |
| { | |
| { AttributeClass.TypeArguments: [{ } queueSymbol] } | |
| when queueSymbol.GetAttributes().QueueDefinitionAttribute is { } queueDefinitionAttribute => | |
| ( | |
| QueueName: queueDefinitionAttribute.GetQueueName(queueSymbol.Name).NullIf("default"), | |
| QueuePriority: queueDefinitionAttribute.NamedArguments.GetIntValue("Priority", 0), | |
| QueueConcurrency: queueDefinitionAttribute.NamedArguments.GetIntValue("Concurrency", 0) | |
| ), | |
| { } => default((string? QueueName, QueuePriority, QueueConcurrency)?), | |
| _ => (QueueName: "default", QueuePriority: 0, QueueConcurrency: 0), | |
| } is not ({ } queueName, var queuePriority, >= 0 and var queueConcurrency) | |
| ) | |
| { | |
| return null; | |
| } | |
| if (string.IsNullOrWhiteSpace(queueName)) | |
| return null; |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/Immediate.Jobs.Generators/ImmediateJobsGenerator.Transform.cs` around
lines 85 - 103, Update the queue-name validation in the `UsesQueueAttribute`
switch within `ImmediateJobsGenerator.Transform` to reject names that are null,
empty, or whitespace-only, matching `QueueDefinitionAnalyzer` and
`TransformQueue`; preserve the existing priority and concurrency validation and
default-name handling.
Summary by CodeRabbit
New Features
Bug Fixes
Tests