[backport] run nimpretty on parsers
This commit is contained in:
parent
6c994b2498
commit
b17ed2ca9c
11 changed files with 207 additions and 193 deletions
|
|
@ -1945,7 +1945,8 @@ proc untilElementEnd(x: var XmlParser, result: XmlNode,
|
|||
adderr(expected(x, result))
|
||||
# this seems to do better match error corrections in browsers:
|
||||
while x.kind in {xmlElementEnd, xmlWhitespace}:
|
||||
if x.kind == xmlElementEnd and cmpIgnoreCase(x.elemName, result.tag) == 0:
|
||||
if x.kind == xmlElementEnd and cmpIgnoreCase(x.elemName,
|
||||
result.tag) == 0:
|
||||
break
|
||||
next(x)
|
||||
next(x)
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ macro `%*`*(x: untyped): untyped =
|
|||
## `%` for every element.
|
||||
result = toJson(x)
|
||||
|
||||
proc `==`* (a, b: JsonNode): bool =
|
||||
proc `==`*(a, b: JsonNode): bool =
|
||||
## Check two nodes for equality
|
||||
if a.isNil:
|
||||
if b.isNil: return true
|
||||
|
|
@ -502,7 +502,8 @@ proc contains*(node: JsonNode, val: JsonNode): bool =
|
|||
assert(node.kind == JArray)
|
||||
find(node.elems, val) >= 0
|
||||
|
||||
proc existsKey*(node: JsonNode, key: string): bool {.deprecated: "use 'hasKey' instead".} =
|
||||
proc existsKey*(node: JsonNode, key: string): bool {.
|
||||
deprecated: "use 'hasKey' instead".} =
|
||||
node.hasKey(key)
|
||||
|
||||
proc `{}`*(node: JsonNode, keys: varargs[string]): JsonNode =
|
||||
|
|
@ -538,7 +539,8 @@ proc getOrDefault*(node: JsonNode, key: string): JsonNode =
|
|||
if not isNil(node) and node.kind == JObject:
|
||||
result = node.fields.getOrDefault(key)
|
||||
|
||||
template simpleGetOrDefault*{`{}`(node, [key])}(node: JsonNode, key: string): JsonNode = node.getOrDefault(key)
|
||||
template simpleGetOrDefault*{`{}`(node, [key])}(node: JsonNode,
|
||||
key: string): JsonNode = node.getOrDefault(key)
|
||||
|
||||
proc `{}=`*(node: JsonNode, keys: varargs[string], value: JsonNode) =
|
||||
## Traverses the node and tries to set the value at the given location
|
||||
|
|
@ -691,7 +693,7 @@ proc pretty*(node: JsonNode, indent = 2): string =
|
|||
## Similar to prettyprint in Python.
|
||||
runnableExamples:
|
||||
let j = %* {"name": "Isaac", "books": ["Robot Dreams"],
|
||||
"details": {"age":35, "pi":3.1415}}
|
||||
"details": {"age": 35, "pi": 3.1415}}
|
||||
doAssert pretty(j) == """
|
||||
{
|
||||
"name": "Isaac",
|
||||
|
|
@ -1331,7 +1333,8 @@ proc createConstructor(typeSym, jsonNode: NimNode): NimNode =
|
|||
(
|
||||
var map = `tableInit`[`tableKeyType`, `tableValueType`]();
|
||||
verifyJsonKind(`jsonNode`, {JObject}, astToStr(`jsonNode`));
|
||||
for `forLoopKey` in keys(`jsonNode`.fields): map[`forLoopKey`] = `constructorNode`;
|
||||
for `forLoopKey` in keys(`jsonNode`.fields): map[
|
||||
`forLoopKey`] = `constructorNode`;
|
||||
map
|
||||
)
|
||||
of "ref":
|
||||
|
|
@ -1374,7 +1377,8 @@ proc createConstructor(typeSym, jsonNode: NimNode): NimNode =
|
|||
(
|
||||
var list: `typeSym`;
|
||||
verifyJsonKind(`jsonNode`, {JArray}, astToStr(`jsonNode`));
|
||||
for `forLoopI` in 0 ..< `jsonNode`.len: list[`forLoopI`] =`constructorNode`;
|
||||
for `forLoopI` in 0 ..< `jsonNode`.len: list[
|
||||
`forLoopI`] = `constructorNode`;
|
||||
list
|
||||
)
|
||||
of "tuple":
|
||||
|
|
@ -1640,11 +1644,11 @@ when isMainModule:
|
|||
except:
|
||||
doAssert(false, "IndexError thrown for valid index")
|
||||
|
||||
doAssert(testJson{"b"}.getStr()=="asd", "Couldn't fetch a singly nested key with {}")
|
||||
doAssert(testJson{"b"}.getStr() == "asd", "Couldn't fetch a singly nested key with {}")
|
||||
doAssert(isNil(testJson{"nonexistent"}), "Non-existent keys should return nil")
|
||||
doAssert(isNil(testJson{"a", "b"}), "Indexing through a list should return nil")
|
||||
doAssert(isNil(testJson{"a", "b"}), "Indexing through a list should return nil")
|
||||
doAssert(testJson{"a"}==parseJson"[1, 2, 3, 4]", "Didn't return a non-JObject when there was one to be found")
|
||||
doAssert(testJson{"a"} == parseJson"[1, 2, 3, 4]", "Didn't return a non-JObject when there was one to be found")
|
||||
doAssert(isNil(parseJson("[1, 2, 3]"){"foo"}), "Indexing directly into a list should return nil")
|
||||
|
||||
# Generator:
|
||||
|
|
@ -1669,10 +1673,10 @@ when isMainModule:
|
|||
const hisAge = 31
|
||||
|
||||
var j3 = %*
|
||||
[ { "name": "John"
|
||||
[ {"name": "John"
|
||||
, "age": herAge
|
||||
}
|
||||
, { "name": "Susan"
|
||||
, {"name": "Susan"
|
||||
, "age": hisAge
|
||||
}
|
||||
]
|
||||
|
|
@ -1708,7 +1712,8 @@ when isMainModule:
|
|||
except IndexError: doAssert(true)
|
||||
|
||||
var parsed2 = parseFile("tests/testdata/jsontest2.json")
|
||||
doAssert(parsed2{"repository", "description"}.str=="IRC Library for Haskell", "Couldn't fetch via multiply nested key using {}")
|
||||
doAssert(parsed2{"repository", "description"}.str ==
|
||||
"IRC Library for Haskell", "Couldn't fetch via multiply nested key using {}")
|
||||
|
||||
doAssert escapeJsonUnquoted("\10Foo🎃barÄ") == "\\nFoo🎃barÄ"
|
||||
doAssert escapeJsonUnquoted("\0\7\20") == "\\u0000\\u0007\\u0014" # for #7887
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ when declared(os.paramCount):
|
|||
# we cannot provide this for NimRtl creation on Posix, because we can't
|
||||
# access the command line arguments then!
|
||||
|
||||
proc initOptParser*(cmdline = "", shortNoVal: set[char]={},
|
||||
proc initOptParser*(cmdline = "", shortNoVal: set[char] = {},
|
||||
longNoVal: seq[string] = @[];
|
||||
allowWhitespaceAfterColon = true): OptParser =
|
||||
## Initializes the command line parser.
|
||||
|
|
@ -235,7 +235,7 @@ when declared(os.paramCount):
|
|||
result.key = TaintedString""
|
||||
result.val = TaintedString""
|
||||
|
||||
proc initOptParser*(cmdline: seq[TaintedString], shortNoVal: set[char]={},
|
||||
proc initOptParser*(cmdline: seq[TaintedString], shortNoVal: set[char] = {},
|
||||
longNoVal: seq[string] = @[];
|
||||
allowWhitespaceAfterColon = true): OptParser =
|
||||
## Initializes the command line parser.
|
||||
|
|
@ -345,7 +345,8 @@ proc next*(p: var OptParser) {.rtl, extern: "npo$1".} =
|
|||
inc(i)
|
||||
while i < p.cmds[p.idx].len and p.cmds[p.idx][i] in {'\t', ' '}: inc(i)
|
||||
# if we're at the end, use the next command line option:
|
||||
if i >= p.cmds[p.idx].len and p.idx < p.cmds.len and p.allowWhitespaceAfterColon:
|
||||
if i >= p.cmds[p.idx].len and p.idx < p.cmds.len and
|
||||
p.allowWhitespaceAfterColon:
|
||||
inc p.idx
|
||||
i = 0
|
||||
if p.idx < p.cmds.len:
|
||||
|
|
@ -403,7 +404,8 @@ proc remainingArgs*(p: OptParser): seq[TaintedString] {.rtl, extern: "npo$1".} =
|
|||
result = @[]
|
||||
for i in p.idx..<p.cmds.len: result.add TaintedString(p.cmds[i])
|
||||
|
||||
iterator getopt*(p: var OptParser): tuple[kind: CmdLineKind, key, val: TaintedString] =
|
||||
iterator getopt*(p: var OptParser): tuple[kind: CmdLineKind, key,
|
||||
val: TaintedString] =
|
||||
## Convenience iterator for iterating over the given
|
||||
## `OptParser<#OptParser>`_.
|
||||
##
|
||||
|
|
@ -443,7 +445,7 @@ iterator getopt*(p: var OptParser): tuple[kind: CmdLineKind, key, val: TaintedSt
|
|||
|
||||
when declared(initOptParser):
|
||||
iterator getopt*(cmdline: seq[TaintedString] = commandLineParams(),
|
||||
shortNoVal: set[char]={}, longNoVal: seq[string] = @[]):
|
||||
shortNoVal: set[char] = {}, longNoVal: seq[string] = @[]):
|
||||
tuple[kind: CmdLineKind, key, val: TaintedString] =
|
||||
## Convenience iterator for iterating over command line arguments.
|
||||
##
|
||||
|
|
@ -484,7 +486,8 @@ when declared(initOptParser):
|
|||
## if filename == "":
|
||||
## # no filename has been written, so we show the help
|
||||
## writeHelp()
|
||||
var p = initOptParser(cmdline, shortNoVal=shortNoVal, longNoVal=longNoVal)
|
||||
var p = initOptParser(cmdline, shortNoVal = shortNoVal,
|
||||
longNoVal = longNoVal)
|
||||
while true:
|
||||
next(p)
|
||||
if p.kind == cmdEnd: break
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ proc skip(c: var SqlLexer) =
|
|||
break
|
||||
of '/':
|
||||
if c.buf[pos+1] == '*':
|
||||
inc(pos,2)
|
||||
inc(pos, 2)
|
||||
while true:
|
||||
case c.buf[pos]
|
||||
of '\0': break
|
||||
|
|
@ -264,12 +264,13 @@ proc getSymbol(c: var SqlLexer, tok: var Token) =
|
|||
while true:
|
||||
add(tok.literal, c.buf[pos])
|
||||
inc(pos)
|
||||
if c.buf[pos] notin {'a'..'z','A'..'Z','0'..'9','_','$', '\128'..'\255'}:
|
||||
if c.buf[pos] notin {'a'..'z', 'A'..'Z', '0'..'9', '_', '$',
|
||||
'\128'..'\255'}:
|
||||
break
|
||||
c.bufpos = pos
|
||||
tok.kind = tkIdentifier
|
||||
|
||||
proc getQuotedIdentifier(c: var SqlLexer, tok: var Token, quote='\"') =
|
||||
proc getQuotedIdentifier(c: var SqlLexer, tok: var Token, quote = '\"') =
|
||||
var pos = c.bufpos + 1
|
||||
tok.kind = tkQuotedIdentifier
|
||||
while true:
|
||||
|
|
@ -403,7 +404,7 @@ proc getTok(c: var SqlLexer, tok: var Token) =
|
|||
of 'x', 'X':
|
||||
if c.buf[c.bufpos + 1] == '\'':
|
||||
tok.kind = tkHexStringConstant
|
||||
getBitHexString(c, tok, {'a'..'f','A'..'F','0'..'9'})
|
||||
getBitHexString(c, tok, {'a'..'f', 'A'..'F', '0'..'9'})
|
||||
else:
|
||||
getSymbol(c, tok)
|
||||
of '$': getDollarString(c, tok)
|
||||
|
|
@ -714,7 +715,8 @@ proc identOrLiteral(p: var SqlParser): SqlNode =
|
|||
getTok(p) # we must consume a token here to prevent endless loops!
|
||||
|
||||
proc primary(p: var SqlParser): SqlNode =
|
||||
if (p.tok.kind == tkOperator and (p.tok.literal == "+" or p.tok.literal == "-")) or isKeyw(p, "not"):
|
||||
if (p.tok.kind == tkOperator and (p.tok.literal == "+" or p.tok.literal ==
|
||||
"-")) or isKeyw(p, "not"):
|
||||
result = newNode(nkPrefix)
|
||||
result.add(newNode(nkIdent, p.tok.literal))
|
||||
getTok(p)
|
||||
|
|
@ -1439,7 +1441,7 @@ proc ra(n: SqlNode, s: var SqlWriter) =
|
|||
s.addKeyw("enum")
|
||||
rs(n, s)
|
||||
|
||||
proc renderSQL*(n: SqlNode, upperCase=false): string =
|
||||
proc renderSQL*(n: SqlNode, upperCase = false): string =
|
||||
## Converts an SQL abstract syntax tree to its string representation.
|
||||
var s: SqlWriter
|
||||
s.buffer = ""
|
||||
|
|
@ -1493,7 +1495,7 @@ when not defined(js):
|
|||
finally:
|
||||
close(p)
|
||||
|
||||
proc parseSQL*(input: string, filename=""): SqlNode =
|
||||
proc parseSQL*(input: string, filename = ""): SqlNode =
|
||||
## parses the SQL from `input` into an AST and returns the AST.
|
||||
## `filename` is only used for error messages.
|
||||
## Syntax errors raise an `SqlParseError` exception.
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
{.deadCodeElim: on.} # dce option deprecated
|
||||
|
||||
{.push debugger:off .} # the user does not want to trace a part
|
||||
{.push debugger: off.} # the user does not want to trace a part
|
||||
# of the standard library!
|
||||
|
||||
include "system/inclrtl"
|
||||
|
|
@ -64,8 +64,8 @@ const
|
|||
proc toLower(c: char): char {.inline.} =
|
||||
result = if c in {'A'..'Z'}: chr(ord(c)-ord('A')+ord('a')) else: c
|
||||
|
||||
proc parseBin*[T: SomeInteger](s: string, number: var T, start = 0, maxLen = 0): int
|
||||
{.noSideEffect.} =
|
||||
proc parseBin*[T: SomeInteger](s: string, number: var T, start = 0,
|
||||
maxLen = 0): int {.noSideEffect.} =
|
||||
## Parses a binary number and stores its value in ``number``.
|
||||
##
|
||||
## Returns the number of the parsed characters or 0 in case of an error.
|
||||
|
|
@ -111,8 +111,8 @@ proc parseBin*[T: SomeInteger](s: string, number: var T, start = 0, maxLen = 0):
|
|||
number = output
|
||||
result = i - start
|
||||
|
||||
proc parseOct*[T: SomeInteger](s: string, number: var T, start = 0, maxLen = 0): int
|
||||
{.noSideEffect.} =
|
||||
proc parseOct*[T: SomeInteger](s: string, number: var T, start = 0,
|
||||
maxLen = 0): int {.noSideEffect.} =
|
||||
## Parses an octal number and stores its value in ``number``.
|
||||
##
|
||||
## Returns the number of the parsed characters or 0 in case of an error.
|
||||
|
|
@ -158,8 +158,8 @@ proc parseOct*[T: SomeInteger](s: string, number: var T, start = 0, maxLen = 0):
|
|||
number = output
|
||||
result = i - start
|
||||
|
||||
proc parseHex*[T: SomeInteger](s: string, number: var T, start = 0, maxLen = 0): int
|
||||
{.noSideEffect.} =
|
||||
proc parseHex*[T: SomeInteger](s: string, number: var T, start = 0,
|
||||
maxLen = 0): int {.noSideEffect.} =
|
||||
## Parses a hexadecimal number and stores its value in ``number``.
|
||||
##
|
||||
## Returns the number of the parsed characters or 0 in case of an error.
|
||||
|
|
@ -468,7 +468,7 @@ proc parseInt*(s: string, number: var int, start = 0): int {.
|
|||
number = int(res)
|
||||
|
||||
proc parseSaturatedNatural*(s: string, b: var int, start = 0): int {.
|
||||
raises: [].}=
|
||||
raises: [].} =
|
||||
## Parses a natural number into ``b``. This cannot raise an overflow
|
||||
## error. ``high(int)`` is returned for an overflow.
|
||||
## The number of processed character is returned.
|
||||
|
|
|
|||
|
|
@ -399,7 +399,7 @@ proc parseComment(my: var XmlParser) =
|
|||
my.bufpos = pos
|
||||
my.kind = xmlComment
|
||||
|
||||
proc parseWhitespace(my: var XmlParser, skip=false) =
|
||||
proc parseWhitespace(my: var XmlParser, skip = false) =
|
||||
var pos = my.bufpos
|
||||
while true:
|
||||
case my.buf[pos]
|
||||
|
|
@ -562,7 +562,7 @@ proc parseTag(my: var XmlParser) =
|
|||
my.kind = xmlCharData
|
||||
add(my.a, '<')
|
||||
return
|
||||
parseWhitespace(my, skip=true)
|
||||
parseWhitespace(my, skip = true)
|
||||
if my.buf[my.bufpos] in NameStartChar:
|
||||
# an attribute follows:
|
||||
my.kind = xmlElementOpen
|
||||
|
|
@ -588,7 +588,7 @@ proc parseEndTag(my: var XmlParser) =
|
|||
my.bufpos = lexbase.handleRefillChar(my, my.bufpos+1)
|
||||
#inc(my.bufpos, 2)
|
||||
parseName(my, my.a)
|
||||
parseWhitespace(my, skip=true)
|
||||
parseWhitespace(my, skip = true)
|
||||
if my.buf[my.bufpos] == '>':
|
||||
inc(my.bufpos)
|
||||
else:
|
||||
|
|
@ -606,7 +606,7 @@ proc parseAttribute(my: var XmlParser) =
|
|||
return
|
||||
|
||||
let startPos = my.bufpos
|
||||
parseWhitespace(my, skip=true)
|
||||
parseWhitespace(my, skip = true)
|
||||
if my.buf[my.bufpos] != '=':
|
||||
if allowEmptyAttribs notin my.options or
|
||||
(my.buf[my.bufpos] != '>' and my.bufpos == startPos):
|
||||
|
|
@ -614,7 +614,7 @@ proc parseAttribute(my: var XmlParser) =
|
|||
return
|
||||
|
||||
inc(my.bufpos)
|
||||
parseWhitespace(my, skip=true)
|
||||
parseWhitespace(my, skip = true)
|
||||
|
||||
var pos = my.bufpos
|
||||
if my.buf[pos] in {'\'', '"'}:
|
||||
|
|
@ -678,7 +678,7 @@ proc parseAttribute(my: var XmlParser) =
|
|||
add(my.b, my.buf[pos])
|
||||
inc pos
|
||||
my.bufpos = pos
|
||||
parseWhitespace(my, skip=true)
|
||||
parseWhitespace(my, skip = true)
|
||||
|
||||
proc parseCharData(my: var XmlParser) =
|
||||
var pos = my.bufpos
|
||||
|
|
@ -711,8 +711,9 @@ proc rawGetTok(my: var XmlParser) =
|
|||
of '/':
|
||||
parseEndTag(my)
|
||||
of '!':
|
||||
if my.buf[pos+2] == '[' and my.buf[pos+3] == 'C' and my.buf[pos+4] == 'D' and
|
||||
my.buf[pos+5] == 'A' and my.buf[pos+6] == 'T' and my.buf[pos+7] == 'A' and
|
||||
if my.buf[pos+2] == '[' and my.buf[pos+3] == 'C' and
|
||||
my.buf[pos+4] == 'D' and my.buf[pos+5] == 'A' and
|
||||
my.buf[pos+6] == 'T' and my.buf[pos+7] == 'A' and
|
||||
my.buf[pos+8] == '[':
|
||||
parseCDATA(my)
|
||||
elif my.buf[pos+2] == '-' and my.buf[pos+3] == '-':
|
||||
|
|
@ -742,7 +743,8 @@ proc getTok(my: var XmlParser) =
|
|||
of xmlComment:
|
||||
if my.options.contains(reportComments): break
|
||||
of xmlWhitespace:
|
||||
if my.options.contains(reportWhitespace) or lastKind in {xmlCharData, xmlComment, xmlEntity}:
|
||||
if my.options.contains(reportWhitespace) or lastKind in {xmlCharData,
|
||||
xmlComment, xmlEntity}:
|
||||
break
|
||||
else: break
|
||||
|
||||
|
|
|
|||
|
|
@ -169,4 +169,5 @@ when isMainModule:
|
|||
|
||||
block bug1518:
|
||||
var err: seq[string] = @[]
|
||||
assert $parsexml(newStringStream"<tag>One & two</tag>", "temp.xml", err) == "<tag>One & two</tag>"
|
||||
assert $parsexml(newStringStream"<tag>One & two</tag>", "temp.xml",
|
||||
err) == "<tag>One & two</tag>"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue