diff --git a/src/new-parser.typ b/src/new-parser.typ index e3f127b..2de2479 100644 --- a/src/new-parser.typ +++ b/src/new-parser.typ @@ -60,9 +60,9 @@ if arg.trim().len() > 0 { if is-named { let (name, value) = split-once(arg, ":").map(str.trim) - args.push((name, value.replace("\n", ""))) + args.push((name, value)) } else { - arg = arg.trim().replace("\n", "") + arg = arg.trim() args.push((arg,)) } } @@ -78,30 +78,30 @@ ) } -#assert.eq( - parse-argument-list("text)"), - (args: (("text",),), brace-level: -1, processed-chars: 5) -) -#assert.eq( - parse-argument-list("pos,"), - (args: (("pos",),), brace-level: 0, processed-chars: 4) -) -#assert.eq( - parse-argument-list("12, 13, a)"), - (args: (("12",), ("13",), ("a",)), brace-level: -1, processed-chars: 10) -) -#assert.eq( - parse-argument-list("a: 2, b: 3)"), - (args: (("a", "2"), ("b", "3")), brace-level: -1, processed-chars: 11) -) -#assert.eq( - parse-argument-list("a: 2 // 2\n)"), - (args: (("a", "2"),), brace-level: -1, processed-chars: 11) -) -#assert.eq( - parse-argument-list("a: 2, // 2\nb)"), - (args: (("a", "2"),("b",)), brace-level: -1, processed-chars: 13) -) +// #assert.eq( +// parse-argument-list("text)"), +// (args: (("text",),), brace-level: -1, processed-chars: 5) +// ) +// #assert.eq( +// parse-argument-list("pos,"), +// (args: (("pos",),), brace-level: 0, processed-chars: 4) +// ) +// #assert.eq( +// parse-argument-list("12, 13, a)"), +// (args: (("12",), ("13",), ("a",)), brace-level: -1, processed-chars: 10) +// ) +// #assert.eq( +// parse-argument-list("a: 2, b: 3)"), +// (args: (("a", "2"), ("b", "3")), brace-level: -1, processed-chars: 11) +// ) +// #assert.eq( +// parse-argument-list("a: 2 // 2\n)"), +// (args: (("a", "2"),), brace-level: -1, processed-chars: 11) +// ) +// #assert.eq( +// parse-argument-list("a: 2, // 2\nb)"), +// (args: (("a", "2"),("b",)), brace-level: -1, processed-chars: 13) +// ) #let eval-doc-comment-test((line-number, line), label-prefix: "") = { @@ -254,7 +254,13 @@ #let parse(src) = { - let lines = (src.split("\n") + ("",)).map(str.trim) + let lines = (src.split("\n") + ("",)).map(line => { + // return line.trim() + // trim only doc-comment lines + let l = line.trim(at: start) + if l.starts-with("///") { l } + else { line } + }) let module-description = none let definitions = () diff --git a/tests/new-parser/arguments.typ b/tests/new-parser/arguments.typ index 8d4e816..64259a2 100644 --- a/tests/new-parser/arguments.typ +++ b/tests/new-parser/arguments.typ @@ -67,9 +67,7 @@ let func(named: 2) ///Description ///... let func( - named: ( - a: 12, b: (1+1) - ) + named: (a: 12, b: (1+1)) ) = {} ```.text @@ -85,4 +83,47 @@ let func( return-types: none ), ) +) + + +// Multiline default arguments, see https://github.com/Mc-Zen/tidy/issues/41 + +#let src = ````` +/// -> float +#let func( + code: ```py +i = 1 +while i < 10: + print(i) + i += 1 + ```, + dict: ( + a: 1, + b: 2, + c: 3, + ) +) = { + return 0 +} +`````.text + +#assert.eq( + parse(src).functions, + ( + ( + name: "func", + description: "", + args: ( + code: ( + description: "", + default: "```py\ni = 1\nwhile i < 10:\n print(i)\n i += 1\n ```" + ), + dict: ( + description: "", + default: "(\n a: 1,\n b: 2,\n c: 3,\n )" + ), + ), + return-types: ("float",) + ), + ) ) \ No newline at end of file