Skip to content

Commit e5a3ac6

Browse files
reid-spencerclaude
andcommitted
Fix validation: faicon, Term length, duplicate checkMetadata
- Add faicon, external, namespace, package to RecognizedOptions - Add deprecation framework for package→namespace rename - Fix Term definition length check to sum character counts instead of checking sequence size - Remove 10 duplicate checkMetadata calls on VitalDefinitions - Add KnownOption.namespace to language module Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d33e9e4 commit e5a3ac6

File tree

3 files changed

+34
-12
lines changed

3 files changed

+34
-12
lines changed

language/shared/src/main/scala/com/ossuminc/riddl/language/KnownOptions.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ object KnownOptions {
3737
KnownOption.gateway,
3838
KnownOption.service,
3939
KnownOption.package_,
40+
KnownOption.namespace,
4041
KnownOption.technology,
4142
KnownOption.css,
4243
KnownOption.kind,
@@ -46,6 +47,7 @@ object KnownOptions {
4647
final val domain: Seq[String] = Seq(
4748
KnownOption.external,
4849
KnownOption.package_,
50+
KnownOption.namespace,
4951
KnownOption.technology,
5052
KnownOption.css,
5153
KnownOption.kind,
@@ -120,6 +122,7 @@ object KnownOption {
120122
final val gateway = "gateway"
121123
final val kind = "kind"
122124
final val message_queue = "message-queue"
125+
final val namespace = "namespace"
123126
final val package_ = "package"
124127
final val parallel = "parallel"
125128
final val persistent = "persistent"

passes/shared/src/main/scala/com/ossuminc/riddl/passes/validate/DefinitionValidation.scala

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ case class OptionSpec(
2929
maxArgs: Int = 0
3030
)
3131

32+
/** Registry of deprecated option names and their replacements.
33+
* Used to generate deprecation warnings while maintaining
34+
* backward compatibility.
35+
*/
36+
object DeprecatedOptions:
37+
case class Deprecation(
38+
replacement: String,
39+
sinceVersion: String = "1.15.0"
40+
)
41+
42+
val registry: Map[String, Deprecation] = Map(
43+
"package" -> Deprecation("namespace", "1.15.0")
44+
)
45+
end DeprecatedOptions
46+
3247
/** Registry of recognized RIDDL option names with their
3348
* specifications. Options not in this registry will produce
3449
* style warnings (not errors) to keep the system extensible.
@@ -78,7 +93,13 @@ object RecognizedOptions:
7893
),
7994
"batch" -> OptionSpec(
8095
Seq("Projector", "Repository"), 1, 1
81-
)
96+
),
97+
// Icon and display options
98+
"faicon" -> OptionSpec(Seq.empty, 1, 1),
99+
// Domain/Context structural options
100+
"external" -> OptionSpec(Seq("Domain"), 0, 0),
101+
"namespace" -> OptionSpec(Seq("Domain", "Context"), 1, 1),
102+
"package" -> OptionSpec(Seq("Domain", "Context"), 1, 1)
82103
)
83104
end RecognizedOptions
84105

@@ -206,7 +227,7 @@ trait DefinitionValidation(using pc: PlatformContext) extends BasicValidation:
206227
hasDescription = true
207228
case t: Term =>
208229
check(
209-
t.definition.length >= 10,
230+
t.definition.map(_.s.length).sum >= 10,
210231
s"${t.identify}'s definition is too short. It must be at least 10 characters'",
211232
Warning,
212233
t.loc
@@ -238,6 +259,14 @@ trait DefinitionValidation(using pc: PlatformContext) extends BasicValidation:
238259
identity: String,
239260
loc: At
240261
): Unit =
262+
DeprecatedOptions.registry.get(option.name).foreach { dep =>
263+
messages.addStyle(
264+
option.loc,
265+
s"Option '${option.name}' in $identity is deprecated" +
266+
s" since ${dep.sinceVersion}." +
267+
s" Use '${dep.replacement}' instead"
268+
)
269+
}
241270
RecognizedOptions.registry.get(option.name) match
242271
case Some(spec) =>
243272
val argCount = option.args.size

passes/shared/src/main/scala/com/ossuminc/riddl/passes/validate/ValidationPass.scala

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,6 @@ case class ValidationPass(
517517
f.output.foreach { agg =>
518518
checkTypeExpression(agg, f, parents)
519519
}
520-
checkMetadata(f)
521520
}
522521

523522
private def validateHandler(
@@ -741,7 +740,6 @@ case class ValidationPass(
741740
)
742741
)
743742
}
744-
checkMetadata(entity)
745743
}
746744

747745
private def validateProjector(
@@ -785,15 +783,13 @@ case class ValidationPass(
785783
)
786784
}
787785
}
788-
checkMetadata(projector)
789786
}
790787

791788
private def validateRepository(
792789
repository: Repository,
793790
parents: Parents
794791
): Unit = {
795792
checkContainer(parents, repository)
796-
checkMetadata(repository)
797793
checkNonEmpty(
798794
repository.contents.filter[Schema],
799795
"schema",
@@ -913,7 +909,6 @@ case class ValidationPass(
913909
}
914910
}
915911
}
916-
checkMetadata(adaptor)
917912
case None | Some(_) =>
918913
messages.addError(adaptor.errorLoc, "Adaptor not contained within Context")
919914
}
@@ -952,7 +947,6 @@ case class ValidationPass(
952947
end if
953948
if streamlet.handlers.isEmpty && streamlet.nonEmpty then
954949
messages.addMissing(streamlet.errorLoc, s"${streamlet.identify} should have a handler")
955-
checkMetadata(streamlet)
956950
}
957951

958952
private def validateDomain(
@@ -966,7 +960,6 @@ case class ValidationPass(
966960
StyleWarning,
967961
domain.errorLoc
968962
)
969-
checkMetadata(domain)
970963
}
971964

972965
private def validateSaga(
@@ -986,7 +979,6 @@ case class ValidationPass(
986979
Messages.Error,
987980
saga.errorLoc
988981
)
989-
checkMetadata(saga)
990982
}
991983

992984
private def validateSagaStep(
@@ -1034,7 +1026,6 @@ case class ValidationPass(
10341026
parents: Parents
10351027
): Unit = {
10361028
checkContainer(parents, c)
1037-
checkMetadata(c)
10381029
}
10391030

10401031
private def validateEpic(
@@ -1046,7 +1037,6 @@ case class ValidationPass(
10461037
messages.addMissing(epic.errorLoc, s"${epic.identify} is missing a user story")
10471038
else
10481039
checkRef[User](epic.userStory.user, parents)
1049-
checkMetadata(epic)
10501040
}
10511041

10521042
private def validateGroup(

0 commit comments

Comments
 (0)