Skip to content

Commit 8a4786c

Browse files
authored
Declarative various fixes (#1359)
* Makes the declarative parser the default (CI test) * Various fixes - Fixes an issue where the --require flag wasnt working - Fixes an issue where cycletest was failing due to underspecified nim - Adds support to multiple require features in the same line - Fallback to full vm parser when a babel file is encountered
1 parent ec91888 commit 8a4786c

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

src/nimblepkg/declarativeparser.nim

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import std/strutils
55

66
import compiler/[ast, idents, msgs, syntaxes, options, pathutils, lineinfos]
7-
import version, packageinfotypes, packageinfo, options, packageparser
8-
import std/[tables, sequtils, strscans, strformat]
7+
import version, packageinfotypes, packageinfo, options, packageparser, cli
8+
import std/[tables, sequtils, strscans, strformat, os]
99

1010
type NimbleFileInfo* = object
1111
nimbleFile*: string
@@ -207,25 +207,27 @@ iterator tokenizeRequires*(s: string): string =
207207
yield tok
208208

209209

210-
proc parseRequiresWithFeatures(require: string): (PkgTuple, seq[string]) =
210+
proc parseRequiresWithFeatures(require: string): seq[(PkgTuple, seq[string])] =
211211
#features are expressed like this: require[feature1, feature2]
212-
var featuresStr: string
213-
var requireStr: string
214-
var features = newSeq[string]()
215-
if scanf(require, "$*[$*]", requireStr, featuresStr):
216-
features = featuresStr.split(",")
217-
return (parseRequires(requireStr), features)
218-
else:
219-
return (parseRequires(require), @[])
212+
result = newSeq[(PkgTuple, seq[string])]()
213+
for req in require.split(",").mapIt(it.strip):
214+
var featuresStr: string
215+
var requireStr: string
216+
var features = newSeq[string]()
217+
if scanf(req, "$*[$*]", requireStr, featuresStr):
218+
features = featuresStr.split(",")
219+
result.add((parseRequires(requireStr), features))
220+
else:
221+
result.add((parseRequires(req), @[]))
220222

221223
proc getRequires*(nimbleFileInfo: NimbleFileInfo, pkgActiveFeatures: var Table[PkgTuple, seq[string]]): seq[PkgTuple] =
222224
for require in nimbleFileInfo.requires:
223-
let (pkgTuple, activeFeatures) = parseRequiresWithFeatures(require)
224-
if activeFeatures.len > 0:
225-
# displayInfo &"Package {nimbleFileInfo.nimbleFile} Found active features {activeFeatures} for {pkgTuple}", priority = HighPriority
226-
pkgActiveFeatures[pkgTuple] = activeFeatures
225+
for (pkgTuple, activeFeatures) in parseRequiresWithFeatures(require):
226+
if activeFeatures.len > 0:
227+
# displayInfo &"Package {nimbleFileInfo.nimbleFile} Found active features {activeFeatures} for {pkgTuple}", priority = HighPriority
228+
pkgActiveFeatures[pkgTuple] = activeFeatures
227229

228-
result.add(pkgTuple)
230+
result.add(pkgTuple)
229231

230232
proc getFeatures*(nimbleFileInfo: NimbleFileInfo): Table[string, seq[PkgTuple]] =
231233
result = initTable[string, seq[PkgTuple]]()
@@ -238,6 +240,10 @@ proc toRequiresInfo*(pkgInfo: PackageInfo, options: Options): PackageInfo =
238240
if pkgInfo.basicInfo.name.isNim:
239241
return pkgInfo.toFullInfo(options)
240242

243+
if pkgInfo.myPath.splitFile.ext == ".babel":
244+
displayWarning &"Package {pkgInfo.basicInfo.name} is a babel package, skipping declarative parser", priority = HighPriority
245+
return pkgInfo.toFullInfo(options)
246+
241247
let nimbleFileInfo = extractRequiresInfo(pkgInfo.myPath)
242248
result = pkgInfo
243249
result.requires = getRequires(nimbleFileInfo, result.activeFeatures)

src/nimblepkg/options.nim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,8 @@ proc initOptions*(): Options =
818818
startDir: getCurrentDir(),
819819
nimBinariesDir: getHomeDir() / ".nimble" / "nimbinaries",
820820
maxTaggedVersions: 4,
821-
useSatSolver: true
821+
useSatSolver: true,
822+
useDeclarativeParser: false
822823
)
823824

824825
proc handleUnknownFlags(options: var Options) =

tests/sattests/cycletest/cycletest.nimble

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ srcDir = "src"
99

1010
# Dependencies
1111

12-
requires "https://github.com/disruptek/frosty"
12+
requires "nim", "https://github.com/disruptek/frosty"

0 commit comments

Comments
 (0)