Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Do not generate leading and trailing "" in template expressions. #602

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions src/res_core.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2158,8 +2158,10 @@ and parseTemplateExpr ?(prefix = "js") p =
Ast_helper.Exp.constant ~attrs:[templateLiteralAttr] ~loc
(Pconst_string (txt, Some prefix))
in
Ast_helper.Exp.apply ~attrs:[templateLiteralAttr] ~loc hiddenOperator
[(Nolabel, acc); (Nolabel, str)]
if txt = "" then acc
else
Ast_helper.Exp.apply ~attrs:[templateLiteralAttr] ~loc hiddenOperator
[(Nolabel, acc); (Nolabel, str)]
| TemplatePart txt ->
Parser.next p;
let loc = mkLoc startPos p.prevEndPos in
Expand Down Expand Up @@ -2201,9 +2203,11 @@ and parseTemplateExpr ?(prefix = "js") p =
(Pconst_string (txt, Some prefix))
in
let next =
Ast_helper.Exp.apply ~attrs:[templateLiteralAttr] ~loc:fullLoc
hiddenOperator
[(Nolabel, str); (Nolabel, expr)]
if txt = "" then expr
else
Ast_helper.Exp.apply ~attrs:[templateLiteralAttr] ~loc:fullLoc
hiddenOperator
[(Nolabel, str); (Nolabel, expr)]
in
parseParts next
| token ->
Expand Down
4 changes: 1 addition & 3 deletions tests/parsing/errors/structure/expected/gh16B.res.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ open Ws
let wss = Server.make { port = 82 }
let address = wss |. Server.address
let log msg =
Js.log
(((((({js|> Server: |js})[@res.template ]) ^ msg)[@res.template ]) ^
(({js||js})[@res.template ]))[@res.template ])
Js.log (((({js|> Server: |js})[@res.template ]) ^ msg)[@res.template ])
;;log
(((((((((((({js|Running on: |js})[@res.template ]) ^ address.address)
[@res.template ]) ^ (({js|:|js})[@res.template ]))
Expand Down
73 changes: 16 additions & 57 deletions tests/parsing/grammar/expressions/expected/es6template.res.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,62 +4,23 @@ let s = (({js|multi

string
|js})[@res.template ])
let s = foo
let s = (((({js|before|js})[@res.template ]) ^ foo)[@res.template ])
let s = (((({js|before |js})[@res.template ]) ^ foo)[@res.template ])
let s = (((({js|before |js})[@res.template ]) ^ foo)[@res.template ])
let s = ((foo ^ (({js|after|js})[@res.template ]))[@res.template ])
let s = ((foo ^ (({js| after|js})[@res.template ]))[@res.template ])
let s = ((foo ^ (({js| after|js})[@res.template ]))[@res.template ])
let s = ((foo ^ (({js||js})[@res.template ]))[@res.template ]) ^ bar
let s =
(((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^ (({js||js})
[@res.template ]))
[@res.template ])
let s =
(((((({js|before|js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js||js})[@res.template ]))
[@res.template ])
let s =
(((((({js|before |js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js||js})[@res.template ]))
[@res.template ])
let s =
(((((({js|before |js})[@res.template ]) ^ foo)[@res.template ]) ^
(((((foo ^ (({js||js})[@res.template ]))[@res.template ]) ^ bar) ^
(({js||js})[@res.template ]))
[@res.template ])
let s =
(((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^ (({js|after|js})
[@res.template ]))
[@res.template ])
let s =
(((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js| after|js})[@res.template ]))
[@res.template ])
let s =
(((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js| after|js})[@res.template ]))
[@res.template ])
[@res.template ]) ^ baz
let s = ((foo ^ (({js| |js})[@res.template ]))[@res.template ]) ^ bar
let s =
((((((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^ (({js||js})
[@res.template ]))
[@res.template ]) ^ bar)
^ (({js||js})[@res.template ]))
[@res.template ])
let s =
(((((((((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js||js})[@res.template ]))
[@res.template ]) ^ bar)
^ (({js||js})[@res.template ]))
[@res.template ]) ^ baz)
^ (({js||js})[@res.template ]))
[@res.template ])
let s =
((((((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^ (({js| |js})
[@res.template ]))
[@res.template ]) ^ bar)
^ (({js||js})[@res.template ]))
[@res.template ])
let s =
(((((((((((({js||js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js| |js})[@res.template ]))
[@res.template ]) ^ bar)
^ (({js| |js})[@res.template ]))
[@res.template ]) ^ baz)
^ (({js||js})[@res.template ]))
[@res.template ])
(((((foo ^ (({js| |js})[@res.template ]))[@res.template ]) ^ bar) ^
(({js| |js})[@res.template ]))
[@res.template ]) ^ baz
let s =
((((((((({js| before |js})[@res.template ]) ^ foo)[@res.template ]) ^
(({js| |js})[@res.template ]))
Expand Down Expand Up @@ -101,7 +62,5 @@ let x =
let thisIsFine = (({js|$something|js})[@res.template ])
let thisIsAlsoFine = (({js|fine\$|js})[@res.template ])
let isThisFine = (({js|shouldBeFine$|js})[@res.template ])
;;(((((({js|$|js})[@res.template ]) ^ dollarAmountInt)[@res.template ]) ^
(({js||js})[@res.template ]))[@res.template ])
;;(((((({js|\$|js})[@res.template ]) ^ dollarAmountInt)[@res.template ]) ^
(({js||js})[@res.template ]))[@res.template ])
;;(((({js|$|js})[@res.template ]) ^ dollarAmountInt)[@res.template ])
;;(((({js|\$|js})[@res.template ]) ^ dollarAmountInt)[@res.template ])
3 changes: 1 addition & 2 deletions tests/parsing/grammar/expressions/expected/jsx.res.txt
Original file line number Diff line number Diff line change
Expand Up @@ -521,8 +521,7 @@ let _ =
let _ =
((div
~children:[(((let left = limit |. Int.toString in
(((((({js||js})[@res.template ]) ^ left)[@res.template ])
^ (({js| characters left|js})[@res.template ]))
((left ^ (({js| characters left|js})[@res.template ]))
[@res.template ]) |. React.string))
[@ns.braces ])] ())
[@JSX ])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ let truth = false
let constructor = None
let longidentConstructor = Option.None
let txt = {js|a string|js}
let otherTxt =
(((((({js|foo bar |js})[@res.template ]) ^ txt)[@res.template ]) ^
(({js||js})[@res.template ]))
[@res.template ])
let otherTxt = (((({js|foo bar |js})[@res.template ]) ^ txt)[@res.template ])
let ident = myIdent
let aList = [1; 2]
let anArray = [|1;2|]
Expand Down
12 changes: 6 additions & 6 deletions tests/printer/expr/expected/templateLiteral.res.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ let s = `a \ b`
let s = `a \\ b`
let s = `a \\\ b`

let s = `${foo}`
let s = foo

let s = `before${foo}`
let s = `before ${foo}`
Expand All @@ -23,11 +23,11 @@ let s = `${foo}after`
let s = `${foo} after`
let s = `${foo} after`

let s = `${foo}${bar}`
let s = `${foo}${bar}${baz}`
let s = \"^"(`${foo}`, bar)
let s = \"^"(`${foo}${bar}`, baz)

let s = `${foo} ${bar}`
let s = `${foo} ${bar} ${baz}`
let s = \"^"(`${foo} `, bar)
let s = \"^"(`${foo} ${bar} `, baz)

let s = ` before ${foo} ${bar} after `
let s = `before ${foo} middle ${bar} ${baz} wow `
Expand Down Expand Up @@ -63,7 +63,7 @@ a ++ (` x ` ++ b)

let x = json`null`

let x = sql`select ${column} from ${table}`
let x = \"^"(sql`select ${column} from `, table)

module X = %graphql("
query 123456789 {
Expand Down