summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorArdek Romak <ardek66@tutanota.com>2021-03-28 19:57:40 +0300
committerGitHub <noreply@github.com>2021-03-28 09:57:40 -0700
commit207bcabdf29dbaa954a3db778cbd9e4d59ca37ae (patch)
treee0be3fb116c1b28503a454baa593edc2d47414af
parenteb3ed44009fdfea3e67608b68a049c265124d643 (diff)
downloadNim-207bcabdf29dbaa954a3db778cbd9e4d59ca37ae.tar.gz
Add a getter for all defined Sections in parsecfg (#15450)
-rw-r--r--changelog.md2
-rw-r--r--lib/pure/parsecfg.nim6
-rw-r--r--tests/stdlib/tparsecfg.nim23
3 files changed, 17 insertions, 14 deletions
diff --git a/changelog.md b/changelog.md
index f180e90f9..d3335c2a3 100644
--- a/changelog.md
+++ b/changelog.md
@@ -4,6 +4,8 @@
 
 ## Standard library additions and changes
 
+- Added `sections` iterator in `parsecfg`.
+
 - Make custom op in macros.quote work for all statements.
 
 - On Windows the SSL library now checks for valid certificates.
diff --git a/lib/pure/parsecfg.nim b/lib/pure/parsecfg.nim
index 23bb09ac4..7f22a9857 100644
--- a/lib/pure/parsecfg.nim
+++ b/lib/pure/parsecfg.nim
@@ -174,6 +174,7 @@ runnableExamples:
 
 import strutils, lexbase, streams, tables
 import std/private/decode_helpers
+import std/private/since
 
 include "system/inclrtl"
 
@@ -649,3 +650,8 @@ proc delSectionKey*(dict: var Config, section, key: string) =
         dict.del(section)
       else:
         dict[section].del(key)
+
+iterator sections*(dict: Config): lent string {.since: (1, 5).} =
+  ## Iterates through the sections in the `dict`.
+  for section in dict.keys:
+    yield section
diff --git a/tests/stdlib/tparsecfg.nim b/tests/stdlib/tparsecfg.nim
index 5c077bbda..b2e57ac3d 100644
--- a/tests/stdlib/tparsecfg.nim
+++ b/tests/stdlib/tparsecfg.nim
@@ -2,7 +2,7 @@ discard """
   targets: "c js"
 """
 
-import parsecfg, streams
+import parsecfg, streams, sequtils
 
 when not defined(js):
   from stdtest/specialpaths import buildDir
@@ -39,19 +39,14 @@ var ss = newStringStream()
 dict1.writeConfig(ss)
 
 ## Reading a configuration file.
-var dict2 = loadConfig(newStringStream(ss.data))
-var charset = dict2.getSectionValue("", "charset")
-var threads = dict2.getSectionValue("Package", "--threads")
-var pname = dict2.getSectionValue("Package", "name")
-var name = dict2.getSectionValue("Author", "name")
-var qq = dict2.getSectionValue("Author", "qq")
-var email = dict2.getSectionValue("Author", "email")
-doAssert charset == "utf-8"
-doAssert threads == "on"
-doAssert pname == "hello"
-doAssert name == "lihf8515"
-doAssert qq == "10214028"
-doAssert email == "lihaifeng@wxm.com"
+let dict2 = loadConfig(newStringStream(ss.data))
+doAssert dict2.getSectionValue("", "charset") == "utf-8"
+doAssert dict2.getSectionValue("Package", "--threads") == "on"
+doAssert dict2.getSectionValue("Package", "name") == "hello"
+doAssert dict2.getSectionValue("Author", "name") == "lihf8515"
+doAssert dict2.getSectionValue("Author", "qq") == "10214028"
+doAssert dict2.getSectionValue("Author", "email") == "lihaifeng@wxm.com"
+doAssert toSeq(dict2.sections) == @["", "Package", "Author"]
 
 ## Modifying a configuration file.
 var dict3 = loadConfig(newStringStream(ss.data))