Skip to content

Commit 3444517

Browse files
authored
Rename QuantityDefinitionAttribute to QuantitySpecAttribute (#1710)
## Motivation The public authoring vocabulary now calls selectable quantity recipes `*Spec`, but their identifying attribute is still named `QuantityDefinitionAttribute`. That mixes the selectable spec with the underlying JSON/catalog definition and makes examples such as `[QuantityDefinition] HowMuchSpec` needlessly inconsistent. ## Changes - Rename `QuantityDefinitionAttribute` to `QuantitySpecAttribute` (`[QuantitySpec]` in source). - Rename the attribute payload property from `Id` to the more precise `SemanticId`. - Update generated built-in spec metadata and generator attribute discovery. - Update custom and definition-package samples, generator fixtures, runtime tests, README, and architecture documentation. - Keep internal `QuantityDefinition` model terminology unchanged for actual JSON/catalog definitions. This is an intentional public authoring API rename while UnitsNet.Modular is still alpha. Generated quantity APIs and definition JSON formats are unchanged. ## Validation - Repacked the runtime/analyzer and sample definition package, then built the package-reference consumer. - Repacked and built the isolated NuGet consumer. - `dotnet build UnitsNet.Modular/UnitsNet.Modular.slnx --configuration Release --no-restore --no-incremental -p:GenerateDocumentationFile=false` - `dotnet test UnitsNet.Modular/UnitsNet.Modular.slnx --configuration Release --no-build --no-restore` - 109 tests passed: 35 runtime, 43 compatibility, and 31 generator tests.
1 parent c622e2b commit 3444517

15 files changed

Lines changed: 35 additions & 35 deletions

File tree

‎UnitsNet.Modular/ARCHITECTURE.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ source emitted during post-initialization.
4747
Authoring types use role-specific suffixes: quantity recipes are `*Spec`, reusable unit filters are
4848
`*UnitSet`, and reusable selection groups are `*Profile`. This keeps an input such as `LengthSpec`
4949
visually distinct from the generated `Length` quantity and `LengthUnit` enum. Each built-in or
50-
custom spec identifies its definition through `[QuantityDefinition]`; the generator does not infer
50+
custom spec identifies its definition through `[QuantitySpec]`; the generator does not infer
5151
identity from the spec's namespace or type name.
5252

5353
Select every unit for a built-in quantity by inheriting `IInclude<TQuantitySpec>`:
@@ -149,7 +149,7 @@ namespace Fictional;
149149

150150
using UnitsNet.Modular;
151151

152-
[QuantityDefinition("Fictional.Measurements.HowMuch")]
152+
[QuantitySpec("Fictional.Measurements.HowMuch")]
153153
public interface HowMuchSpec;
154154

155155
[UnitsNetModule]

‎UnitsNet.Modular/README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ Built-in spec names add the `Spec` suffix to quantity definition names in the Un
344344
the `Length` recipe is selected with `UnitsNet.Modular.BuiltIns.LengthSpec`. The specs are generated
345345
by the analyzer in `UnitsNet.Modular.BuiltIns`; generated quantities retain their familiar names,
346346
such as `Length` and `LengthUnit`. Built-in and custom specs both declare their stable semantic ID
347-
with `[QuantityDefinition]`; the namespace and `Spec` suffix are naming conventions, not lookup
347+
with `[QuantitySpec]`; the namespace and `Spec` suffix are naming conventions, not lookup
348348
rules.
349349

350350
### Use profiles
@@ -483,7 +483,7 @@ using UnitsNet.Modular;
483483

484484
namespace Fictional.Measurements.Definitions;
485485

486-
[QuantityDefinition("Fictional.Measurements.HowMuch")]
486+
[QuantitySpec("Fictional.Measurements.HowMuch")]
487487
public interface HowMuchSpec;
488488
```
489489

@@ -721,7 +721,7 @@ The props file contributes those files directly to the referencing consumer's co
721721
```
722722

723723
Quantity specs should be public so the consumer can select them. Keep their
724-
`[QuantityDefinition]` IDs stable once published.
724+
`[QuantitySpec]` semantic IDs stable once published.
725725

726726
An organization can instead publish one canonical compiled units assembly for several controlled
727727
applications. That is a deployment choice, not the primary composition model. Independently

‎UnitsNet.Modular/Samples/DefinitionPackages/Fictional.Measurements.Definitions/QuantitySpecs.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
namespace Fictional.Measurements.Definitions;
66

77
/// <summary>Represents the fictional HowMuch recipe from this definition package.</summary>
8-
[QuantityDefinition("Fictional.Measurements.HowMuch")]
8+
[QuantitySpec("Fictional.Measurements.HowMuch")]
99
public interface HowMuchSpec;
1010

1111
/// <summary>Represents the fictional HowMuchDistance recipe from this definition package.</summary>
12-
[QuantityDefinition("Fictional.Measurements.HowMuchDistance")]
12+
[QuantitySpec("Fictional.Measurements.HowMuchDistance")]
1313
public interface HowMuchDistanceSpec;

‎UnitsNet.Modular/Samples/UnitsNet.Modular.Custom.Sample/Program.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Fictional.Measurements;
66

7-
[QuantityDefinition("Fictional.Measurements.HowMuch")]
7+
[QuantitySpec("Fictional.Measurements.HowMuch")]
88
public interface HowMuchSpec
99
{
1010
}

‎UnitsNet.Modular/Samples/UnitsNet.Modular.NuGet.Sample/Program.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace UnitsNet.Modular.NuGet.Sample;
1010

11-
[QuantityDefinition("NuGetConsumer.Measurements.HowMuch")]
11+
[QuantitySpec("NuGetConsumer.Measurements.HowMuch")]
1212
internal interface HowMuchSpec;
1313

1414
[UnitsNetModule]

‎UnitsNet.Modular/UnitsNet.Modular.Generator.Tests/DiagnosticGeneratorTests.cs‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ public void DifferentDefinitionsWithSameGeneratedType_ReportCollision()
8686
"""
8787
using UnitsNet.Modular;
8888
89-
[QuantityDefinition("First.Widget")]
89+
[QuantitySpec("First.Widget")]
9090
internal interface FirstWidgetSpec;
9191
92-
[QuantityDefinition("Second.Widget")]
92+
[QuantitySpec("Second.Widget")]
9393
internal interface SecondWidgetSpec;
9494
9595
[UnitsNetModule("Application.Units")]
@@ -111,7 +111,7 @@ public void MalformedJson_ReportsTheJsonErrorLocation()
111111
"""
112112
using UnitsNet.Modular;
113113
114-
[QuantityDefinition("Sample.Widget")]
114+
[QuantitySpec("Sample.Widget")]
115115
internal interface WidgetSpec;
116116
117117
[UnitsNetModule]
@@ -142,7 +142,7 @@ public void UnknownPrefix_ReportsInvalidDefinitionInsteadOfCrashingGenerator()
142142
"""
143143
using UnitsNet.Modular;
144144
145-
[QuantityDefinition("Sample.Widget")]
145+
[QuantitySpec("Sample.Widget")]
146146
internal interface WidgetSpec;
147147
148148
[UnitsNetModule]
@@ -177,7 +177,7 @@ public void DuplicateUnitName_ReportsDefinitionDiagnosticWithoutCompilerCollisio
177177
"""
178178
using UnitsNet.Modular;
179179
180-
[QuantityDefinition("Sample.Widget")]
180+
[QuantitySpec("Sample.Widget")]
181181
internal interface WidgetSpec;
182182
183183
[UnitsNetModule]
@@ -209,7 +209,7 @@ public void InvalidCSharpIdentifier_ReportsDefinitionDiagnostic()
209209
"""
210210
using UnitsNet.Modular;
211211
212-
[QuantityDefinition("Sample.Bad-Widget")]
212+
[QuantitySpec("Sample.Bad-Widget")]
213213
internal interface WidgetSpec;
214214
215215
[UnitsNetModule]

‎UnitsNet.Modular/UnitsNet.Modular.Generator.Tests/IncrementalityGeneratorTests.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ public sealed class IncrementalityGeneratorTests
1212
private const string CustomModule = """
1313
using UnitsNet.Modular;
1414
15-
[QuantityDefinition("Sample.Distance")]
15+
[QuantitySpec("Sample.Distance")]
1616
internal interface DistanceSpec;
1717
18-
[QuantityDefinition("Sample.Weight")]
18+
[QuantitySpec("Sample.Weight")]
1919
internal interface WeightSpec;
2020
2121
[UnitsNetModule]

‎UnitsNet.Modular/UnitsNet.Modular.Generator.Tests/PrefixGeneratorTests.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void AffinePrefixedUnit_ScalesInputBeforeApplyingConversion()
1414
"""
1515
using UnitsNet.Modular;
1616
17-
[QuantityDefinition("Sample.Widget")]
17+
[QuantitySpec("Sample.Widget")]
1818
internal interface WidgetSpec;
1919
2020
[UnitsNetModule]

‎UnitsNet.Modular/UnitsNet.Modular.Generator.Tests/QuantityFacadeGeneratorTests.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void AttributedSpecOutsideBuiltInNamespace_ResolvesBuiltInBySemanticId()
5151
5252
namespace Application.Units;
5353
54-
[QuantityDefinition("UnitsNet.Length")]
54+
[QuantitySpec("UnitsNet.Length")]
5555
internal interface DistanceRecipe;
5656
5757
[UnitsNetModule]
@@ -94,7 +94,7 @@ public void DefaultCustomOnlyModule_EmitsQuantityFacadeInOwnerNamespace()
9494
9595
namespace Application.Units;
9696
97-
[QuantityDefinition("Fictional.Widget")]
97+
[QuantitySpec("Fictional.Widget")]
9898
internal interface WidgetSpec;
9999
100100
[UnitsNetModule]

‎UnitsNet.Modular/UnitsNet.Modular.Generator.Tests/RelationshipGeneratorTests.cs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void ReciprocalPair_GeneratesCompilableInverseMembers()
1414
"""
1515
using UnitsNet.Modular;
1616
17-
[QuantityDefinition("UnitsNet.ReciprocalLength")]
17+
[QuantitySpec("UnitsNet.ReciprocalLength")]
1818
internal interface ReciprocalLengthSpec;
1919
2020
[UnitsNetModule("UnitsNet.Modular")]
@@ -84,10 +84,10 @@ public void StructuredRelation_CrossesNamespacesAndUsesUnselectedAnchorUnits()
8484
"""
8585
using UnitsNet.Modular;
8686
87-
[QuantityDefinition("Fictional.Width")]
87+
[QuantitySpec("Fictional.Width")]
8888
internal interface WidthSpec;
8989
90-
[QuantityDefinition("Fictional.AreaLike")]
90+
[QuantitySpec("Fictional.AreaLike")]
9191
internal interface AreaLikeSpec;
9292
9393
[UnitSet("Meter")]

0 commit comments

Comments
 (0)