File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -74,3 +74,17 @@ def getNewDecls (t : InfoTree) : List Name :=
7474 else
7575 acc
7676 | _ => acc
77+
78+ open Elab in
79+ def findMatchingDecl? [Monad m] [MonadInfoTree m] [MonadEnv m] [MonadFileMap m]
80+ (stx : Syntax) : m (Option Name) := do
81+ let some stxRange ← getDeclarationRange? stx | return none
82+ let mut best? : Option (Name × DeclarationRange) := none
83+ for t in ← getInfoTrees do
84+ for declName in getNewDecls t do
85+ let some ranges ← findDeclarationRangesCore? declName | continue
86+ let r := ranges.range
87+ unless !r.pos.lt stxRange.pos && !stxRange.endPos.lt r.endPos do continue
88+ if best?.all fun (_, b) => r.pos.lt b.pos then
89+ best? := some (declName, r)
90+ return best?.map (·.1 )
Original file line number Diff line number Diff line change @@ -3,3 +3,14 @@ import ModLinter.Def
33def a := 1
44def b := 2
55def c := 3
6+
7+ inductive Foo where
8+ | mk : Foo
9+
10+ mutual
11+ def hello2 : Option Nat := hello1
12+ partial_fixpoint
13+
14+ def hello1 : Option Nat := hello2
15+ partial_fixpoint
16+ end
Original file line number Diff line number Diff line change 11import Lean.Elab.Command
2+ import Lean.Linter.Util
23
34open Lean Elab Command
45
@@ -7,4 +8,10 @@ def dummyModuleLinter : ModuleLinter where
78 let ref := cmds[0 ]?.getD .missing
89 logWarningAt ref m! "cmds: { cmds} "
910
11+ def myLinter : Linter where
12+ run stx := do
13+ if let some decl := (← Linter.findMatchingDecl? stx) then
14+ logInfoAt stx m! "best match is: { decl} "
15+
1016initialize addModuleLinter dummyModuleLinter
17+ initialize addLinter myLinter
You can’t perform that action at this time.
0 commit comments