diff --git a/samples/OptionAnalyzer/Library.fs b/samples/OptionAnalyzer/Library.fs index f1788f9..936b9f0 100644 --- a/samples/OptionAnalyzer/Library.fs +++ b/samples/OptionAnalyzer/Library.fs @@ -9,37 +9,47 @@ let notUsed () = let option: Option = None option.Value -[] -let optionValueAnalyzer: Analyzer = - fun ctx -> - async { - let state = ResizeArray() +let handler typeTree = + async { + let state = ResizeArray() - let walker = - { new TypedTreeCollectorBase() with - override _.WalkCall _ m _ _ _ range = - let name = String.Join(".", m.DeclaringEntity.Value.FullName, m.DisplayName) + let walker = + { new TypedTreeCollectorBase() with + override _.WalkCall _ m _ _ _ range = + m.DeclaringEntity + |> Option.iter (fun de -> + let name = String.Join(".", de.FullName, m.DisplayName) if name = "Microsoft.FSharp.Core.FSharpOption`1.Value" then state.Add range - + ) + + } + + match typeTree with + | None -> () + | Some typedTree -> walkTast walker typedTree + + return + state + |> Seq.map (fun r -> + { + Type = "Option.Value analyzer" + Message = "Option.Value shouldn't be used" + Code = "OV001" + Severity = Severity.Warning + Range = r + Fixes = [] } + ) + |> Seq.toList + } + - match ctx.TypedTree with - | None -> () - | Some typedTree -> walkTast walker typedTree - - return - state - |> Seq.map (fun r -> - { - Type = "Option.Value analyzer" - Message = "Option.Value shouldn't be used" - Code = "OV001" - Severity = Severity.Warning - Range = r - Fixes = [] - } - ) - |> Seq.toList - } +[] +let analyzerEditorContext : Analyzer = + fun ctx -> handler ctx.TypedTree + +[] +let optionValueAnalyzer: Analyzer = + fun ctx -> handler ctx.TypedTree