From d3f2b8fc6d91d2a7f9b49775bbb2f7df2718540d Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Mon, 9 Mar 2026 21:42:57 -0500 Subject: [PATCH] Migrate to nitely/nim-regex away from std/nre. --- tupdate_version.nim | 2 +- update_version.nim | 69 +++++++++++++++++++------------------------ update_version.nimble | 4 +-- 3 files changed, 34 insertions(+), 41 deletions(-) diff --git a/tupdate_version.nim b/tupdate_version.nim index 75070a4..9edd6af 100644 --- a/tupdate_version.nim +++ b/tupdate_version.nim @@ -7,7 +7,7 @@ suite "update_version": check: incrementLastVersionPart("1.0.0") == "1.0.1" incrementLastVersionPart("1.0.0-alpha.1") == "1.0.0-alpha.2" - incrementLastVersionPart("cicd_alphe.1-prerelease") == "cicd_alphe.2-prerelease" + incrementLastVersionPart("cicd_alpha.1-prerelease") == "cicd_alpha.2-prerelease" incrementLastVersionPart("2024.04.1") == "2024.04.2" test "incrementSemverPart": diff --git a/update_version.nim b/update_version.nim index 5c595dc..b38e656 100644 --- a/update_version.nim +++ b/update_version.nim @@ -1,6 +1,5 @@ import std/[dirs, json, paths, sequtils, strutils, syncio, tables] -import std/nre except toSeq -import docopt, zero_functional +import docopt, regex, zero_functional const USAGE = """Usage: update_nim_package_version bump [ ...] [options] @@ -85,7 +84,7 @@ Details: Node: ^\s*export\s+const\s+\S*VERSION\S*\s*=\s*"()"\s*;?$ """ -const UV_VERSION = "1.2.1" +const UV_VERSION = "1.2.2" type LangType* = enum lNim, lNode @@ -110,8 +109,8 @@ type PackageVersion* = object # See also: # https://regex101.com/r/Ly7O1x/3/ # -let SemverRegex = - re"^(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)(?:-(?P(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$" +const SemverRegex = + re2"^(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)(?:-(?P(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$" let NimConstPattern = "^\\s*const\\s+\\S*VERSION\\S*\\*?\\s*=\\s*\"($#)\"\\s*$" let NodeConstPattern = @@ -199,18 +198,17 @@ proc replaceVersionInSource*( let rgx = case pkg.lang - of lNim: re(NimConstPattern % [vOld.replace(".", "\\.")]) - of lNode: re(NodeConstPattern % [vOld.replace(".", "\\.")]) + of lNim: re2(NimConstPattern % [vOld.replace(".", "\\.")]) + of lNode: re2(NodeConstPattern % [vOld.replace(".", "\\.")]) var newLines = newSeq[string]() for l in source.splitLines(): - let mOpt = l.match(rgx) - if mOpt.isSome: - let m = mOpt.get + var m = RegexMatch2() + if match(l, rgx, m): newLines.add( - l[0.. part: versionParts[p] = defaults[p] - else: versionParts[p] = m.captures[$p] + elif m.group($p).b < m.group($p).a or p > part: versionParts[p] = defaults[p] + else: versionParts[p] = version[m.group($p)] result = fmtSemver(versionParts) - if match(result, SemverRegex).isNone: + if not match(result, SemverRegex): raise newException(ValueError, "Refusing to update: Version [$#] would not be a valid Semantic Version number" % result) proc incrementLastVersionPart*(version: string): string = - let versionParts = toSeq(findIter(version, re"([^\d.]+)?\.?(\d+)")) - let lastVersionPartMatch = versionParts[^1] - let lastVersionPartInt = parseInt(lastVersionPartMatch.captures[1]) + let versionParts = findAll(version, re2"([^\d.]+)?\.?(\d+)") + let lastVersionPart = versionParts[^1] + let lastVersionPartInt = parseInt(version[lastVersionPart.group(1)]) + return - version[0.. 0: versionParts[p] = defaults[p] # if this part specifically has been requested to be incremented but # the default is empty, we are still going to give it *something* elif p == prerelease: versionParts[p] = "prerelease.0" elif p == buildmetadata: versionParts[p] = "build.0" - elif not m.captures.contains($p) or p > part: versionParts[p] = defaults[p] - else: versionParts[p] = m.captures[$p] + elif m.group($p).b < m.group($p).a or p > part: versionParts[p] = defaults[p] + else: versionParts[p] = version[m.group($p)] return fmtSemver(versionParts) diff --git a/update_version.nimble b/update_version.nimble index 61a09ad..199749c 100644 --- a/update_version.nimble +++ b/update_version.nimble @@ -1,6 +1,6 @@ # Package -version = "1.2.1" +version = "1.2.2" author = "Jonathan Bernard" description = "Small util to update version consistently for nim and node packages." license = "MIT" @@ -10,4 +10,4 @@ bin = @["update_version"] # Dependencies -requires @["nim >= 1.0.4", "docopt >= 0.7.1", "zero_functional"] +requires @["nim >= 1.0.4", "docopt >= 0.7.1", "regex", "zero_functional"]