fix: wrap &"..." <|> ... as well
This commit is contained in:
parent
731e28df00
commit
9b05f57ec8
3 changed files with 32 additions and 7 deletions
|
|
@ -166,10 +166,13 @@ where
|
|||
-- wrap lone string literals in `<|>` in dedicated node (#1275)
|
||||
let args' ← if aliasName == `orelse then -- TODO: generalize if necessary
|
||||
args.zip args' |>.mapM fun (arg, arg') => do
|
||||
if arg.getNumArgs == 1 && arg[0].isOfKind ``Lean.Parser.Syntax.atom then
|
||||
if let some sym := arg[0][0].isStrLit? then
|
||||
return (← `(ParserDescr.nodeWithAntiquot $(quote sym) $(quote (`token ++ sym)) $(arg'.1)), 1)
|
||||
return arg'
|
||||
let mut #[arg] := arg.getArgs | return arg'
|
||||
let sym ← match arg with
|
||||
| `(stx| &$sym) => pure sym
|
||||
| `(stx| $sym:str) => pure sym
|
||||
| _ => return arg'
|
||||
let sym := sym.getString
|
||||
return (← `(ParserDescr.nodeWithAntiquot $(quote sym) $(quote (`token ++ sym)) $(arg'.1)), 1)
|
||||
else
|
||||
pure args'
|
||||
let (args', stackSz) := if let some stackSz := info.stackSz? then
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import Lean open Lean
|
||||
|
||||
syntax "👉" (ident <|> "_") : term
|
||||
#check `(👉 $_)
|
||||
#check fun x => `(👉 $x)
|
||||
#eval match Unhygienic.run `(👉 _) with
|
||||
| `(👉 $_:ident) => false
|
||||
| `(👉 _) => true
|
||||
|
|
@ -10,3 +10,14 @@ syntax "👉" (ident <|> "_") : term
|
|||
| `(👉 _) => false
|
||||
| `(👉 $_:ident) => true
|
||||
| _ => false
|
||||
|
||||
syntax "bar" (&"baz" <|> &"boing") : term
|
||||
#check fun x => `(bar $x)
|
||||
#eval match Unhygienic.run `(bar boing) with
|
||||
| `(bar baz) => false
|
||||
| `(bar boing) => true
|
||||
| _ => false
|
||||
#eval match Unhygienic.run `(bar baz) with
|
||||
| `(bar boing) => false
|
||||
| `(bar baz) => true
|
||||
| _ => false
|
||||
|
|
|
|||
|
|
@ -1,9 +1,20 @@
|
|||
do
|
||||
fun x => do
|
||||
let info ← MonadRef.mkInfoFromRefPos
|
||||
let scp ← getCurrMacroScope
|
||||
let mainModule ← getMainModule
|
||||
pure
|
||||
{ raw :=
|
||||
Syntax.node2 info `term👉__ (Syntax.atom info "👉") (?m info scp mainModule).raw } : ?m (TSyntax `term)
|
||||
Syntax.node2 info `term👉__ (Syntax.atom info "👉")
|
||||
x.raw } : (x : TSyntax [`ident, `token._]) → ?m x (TSyntax `term)
|
||||
true
|
||||
true
|
||||
fun x => do
|
||||
let info ← MonadRef.mkInfoFromRefPos
|
||||
let scp ← getCurrMacroScope
|
||||
let mainModule ← getMainModule
|
||||
pure
|
||||
{ raw :=
|
||||
Syntax.node2 info `termBarBazBoing (Syntax.atom info "bar")
|
||||
x.raw } : (x : TSyntax [`token.baz, `token.boing]) → ?m x (TSyntax `term)
|
||||
true
|
||||
true
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue