Skip to content

Commit

Permalink
Fix uppercases in the patterns
Browse files Browse the repository at this point in the history
  • Loading branch information
msosnicki committed Feb 13, 2025
1 parent 0eb94e5 commit 3c5e80e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
17 changes: 12 additions & 5 deletions modules/codegen/src/smithy4s/codegen/internals/CodegenImpl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -277,17 +277,24 @@ object RepeatedNamespaceException {
}
}

/**
* This matcher supports following syntax:
* - a.b.c - exact match, will match only 'a.b.c'
* - a.b.* - will match a.b followed with some segments.
* - a.b* - like above, but will also match a.b
*/
private[internals] final case class NamespacePattern private (pattern: String) {
import NamespacePattern._
private val regexPattern =
new Regex(
pattern
.split("\\.")
.map {
case "*" => "[a-z0-9_\\.]*"
case wildcardSegment(segment) => s"$segment([a-z0-9_\\.])*"
case "*" => "[\\w\\.]*"
case wildcardSegment(segment) => s"$segment([\\w\\.])*"
case validSegment(segment) => segment
case _ => "(?!).*"
// negative lookahead without a value - the pattern will always fail because the pattern is incorrect
case _ => "(?!)"
}
.mkString("^", "\\.", "$")
)
Expand All @@ -297,7 +304,7 @@ private[internals] final case class NamespacePattern private (pattern: String) {
}

private[internals] object NamespacePattern {
val wildcardSegment = "([a-z][a-z0-9_]*)\\*".r
val validSegment = "([a-z][a-z0-9_]*)".r
val wildcardSegment = "([a-zA-Z][\\w]*)\\*".r
val validSegment = "([a-zA-Z][\\w]*)".r
def fromString(str: String): NamespacePattern = new NamespacePattern(str)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ class NamespacePatternSpec extends munit.FunSuite {
"a.b.*" -> "a.b.c",
"a.b.*" -> "a.b.c.d",
"a.b*" -> "a.b",
"a.b.*" -> "a.b.C",
"a.b*" -> "a.bc",
"a.b*" -> "a.b.c"
"a.b*" -> "a.bC",
"a.b*" -> "a.b.c",
"a.b*" -> "a.b.C"
).foreach { case (pattern, namespace) =>
assert(
NamespacePattern.fromString(pattern).matches(namespace),
Expand All @@ -25,14 +28,12 @@ class NamespacePatternSpec extends munit.FunSuite {
"a.b" -> "acb",
"a.b.*" -> "a.b",
"a.b.*" -> "a.B",
"a.b.*" -> "a.b.C",
"a.b.*" -> "b.a",
"a.b.*" -> "a.bb.c",
"a.b.*" -> "acb.d",
"a.b*" -> "acb",
"a.b*" -> "b.a.c",
"a.b*" -> "a.bC",
"a.b*" -> "a.b.C"
"a.b.c-d" -> "a.b.c-d"
).foreach { case (pattern, namespace) =>
assert(
!NamespacePattern.fromString(pattern).matches(namespace),
Expand Down

0 comments on commit 3c5e80e

Please sign in to comment.