@@ -39,24 +39,18 @@ instance : Coe Hole BinderIdent where
39
39
instance : Coe Ident BinderIdent where
40
40
coe s := ⟨s.raw⟩
41
41
42
- abbrev SimpleBinder := TSyntax ``Term.simpleBinder
43
42
abbrev BracketedBinder := TSyntax ``Term.bracketedBinder
44
43
abbrev FunBinder := TSyntax ``Term.funBinder
45
44
46
- instance : Coe BinderIdent SimpleBinder where
47
- coe s := ⟨s.raw⟩
48
-
49
- instance : Coe SimpleBinder FunBinder where
45
+ instance : Coe BinderIdent FunBinder where
50
46
coe s := ⟨s.raw⟩
51
47
52
48
@[runParserAttributeHooks]
53
- def declBinder := Term.simpleBinderWithoutType <|> Term.bracketedBinder
54
- abbrev DeclBinder := TSyntax ``declBinder
55
-
56
- abbrev Binder := TSyntax [``Term.simpleBinder, ``Term.bracketedBinder]
49
+ def binder := Term.binderIdent <|> Term.bracketedBinder
57
50
58
- instance : Coe DeclBinder Binder where
59
- coe s := ⟨s.raw⟩
51
+ abbrev Binder := TSyntax ``binder
52
+ instance : Coe Binder (TSyntax [identKind, ``Term.hole, ``Term.bracketedBinder]) where
53
+ coe stx := ⟨stx.raw⟩
60
54
61
55
abbrev BinderModifier := TSyntax [``Term.binderTactic, ``Term.binderDefault]
62
56
@@ -102,15 +96,9 @@ def expandBinderModifier (optBinderModifier : Syntax) : Option BinderModifier :=
102
96
103
97
def matchBinder (stx : Syntax) : MacroM (Array BinderSyntaxView) := do
104
98
let k := stx.getKind
105
- if k == ``Lean.Parser.Term.simpleBinder then
106
- -- binderIdent+ >> optType
107
- let ids ← getBinderIds stx[0 ]
108
- let optType := stx[1 ]
109
- ids.mapM fun id => return {
110
- id := (← expandBinderIdent id),
111
- type := expandOptType id optType,
112
- info := .default
113
- }
99
+ if stx.isIdent || k == ``Term.hole then
100
+ -- binderIdent
101
+ return #[{ id := (← expandBinderIdent stx), type := mkHoleFrom stx, info := .default }]
114
102
else if k == ``Lean.Parser.Term.explicitBinder then
115
103
-- `(` binderIdent+ binderType (binderDefault <|> binderTactic)? `)`
116
104
let ids ← getBinderIds stx[1 ]
@@ -153,16 +141,16 @@ def matchBinder (stx : Syntax) : MacroM (Array BinderSyntaxView) := do
153
141
def BinderSyntaxView.mkBinder : BinderSyntaxView → MacroM Binder
154
142
| {id, type, info, modifier?} => do
155
143
match info with
156
- | .default => `(declBinder | ($id : $type $[$modifier?]?))
157
- | .implicit => `(declBinder | {$id : $type})
158
- | .strictImplicit => `(declBinder | ⦃$id : $type⦄)
159
- | .instImplicit => `(declBinder | [$id : $type])
144
+ | .default => `(binder | ($id : $type $[$modifier?]?))
145
+ | .implicit => `(binder | {$id : $type})
146
+ | .strictImplicit => `(binder | ⦃$id : $type⦄)
147
+ | .instImplicit => `(binder | [$id : $type])
160
148
| _ => unreachable!
161
149
162
150
def BinderSyntaxView.mkArgument : BinderSyntaxView → MacroM NamedArgument
163
151
| {id, ..} => `(Term.namedArgument| ($id := $id))
164
152
165
- def expandBinders (dbs : Array DeclBinder ) : MacroM (Array Binder × Array Term) := do
153
+ def expandBinders (dbs : Array Binder ) : MacroM (Array Binder × Array Term) := do
166
154
let mut bs := #[]
167
155
let mut args : Array Term := #[]
168
156
for db in dbs do
0 commit comments