Skip to content

Commit cbf7c11

Browse files
committed
Ability to let caller determine analyzer for each run
1 parent a4dc2a4 commit cbf7c11

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

src/FSharp.Analyzers.SDK/FSharp.Analyzers.SDK.Client.fs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ open System.Text.RegularExpressions
99
open McMaster.NETCore.Plugins
1010
open Microsoft.Extensions.Logging
1111

12+
type AnalyzerName = string
13+
1214
type AnalysisResult =
1315
{
14-
AnalyzerName: string
16+
AnalyzerName: AnalyzerName
1517
Output: Result<Message list, exn>
1618
}
1719

@@ -20,7 +22,7 @@ module Client =
2022
type RegisteredAnalyzer<'TContext when 'TContext :> Context> =
2123
{
2224
AssemblyPath: string
23-
Name: string
25+
Name: AnalyzerName
2426
Analyzer: Analyzer<'TContext>
2527
ShortDescription: string option
2628
HelpUri: string option
@@ -135,8 +137,8 @@ type AssemblyLoadStats =
135137
}
136138

137139
type ExcludeInclude =
138-
| ExcludeFilter of (string -> bool)
139-
| IncludeFilter of (string -> bool)
140+
| ExcludeFilter of (AnalyzerName -> bool)
141+
| IncludeFilter of (AnalyzerName -> bool)
140142

141143
type Client<'TAttribute, 'TContext when 'TAttribute :> AnalyzerAttribute and 'TContext :> Context>(logger: ILogger) =
142144
do TASTCollecting.logger <- logger
@@ -263,8 +265,11 @@ type Client<'TAttribute, 'TContext when 'TAttribute :> AnalyzerAttribute and 'TC
263265
}
264266

265267
member x.RunAnalyzers(ctx: 'TContext) : Async<AnalyzerMessage list> =
268+
x.RunAnalyzers(ctx, fun _ -> true)
269+
270+
member x.RunAnalyzers(ctx: 'TContext, analyzerPredicate: Client.RegisteredAnalyzer<'TContext> -> bool) : Async<AnalyzerMessage list> =
266271
async {
267-
let analyzers = registeredAnalyzers.Values |> Seq.collect id
272+
let analyzers = registeredAnalyzers.Values |> Seq.collect id |> Seq.filter analyzerPredicate
268273

269274
let! messagesPerAnalyzer =
270275
analyzers
@@ -298,8 +303,11 @@ type Client<'TAttribute, 'TContext when 'TAttribute :> AnalyzerAttribute and 'TC
298303
}
299304

300305
member x.RunAnalyzersSafely(ctx: 'TContext) : Async<AnalysisResult list> =
306+
x.RunAnalyzersSafely(ctx, fun _ -> true)
307+
308+
member x.RunAnalyzersSafely(ctx: 'TContext, analyzerPredicate: Client.RegisteredAnalyzer<'TContext> -> bool) : Async<AnalysisResult list> =
301309
async {
302-
let analyzers = registeredAnalyzers.Values |> Seq.collect id
310+
let analyzers = registeredAnalyzers.Values |> Seq.collect id |> Seq.filter analyzerPredicate
303311

304312
let! results =
305313
analyzers

src/FSharp.Analyzers.SDK/FSharp.Analyzers.SDK.Client.fsi

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ type AnalysisResult =
88
Output: Result<Message list, exn>
99
}
1010

11+
module Client =
12+
13+
type RegisteredAnalyzer<'TContext when 'TContext :> Context> =
14+
{
15+
AssemblyPath: string
16+
Name: string
17+
Analyzer: Analyzer<'TContext>
18+
ShortDescription: string option
19+
HelpUri: string option
20+
}
21+
1122
type AssemblyLoadStats =
1223
{
1324
/// The number of DLLs from which we tried to load analyzers.
@@ -37,6 +48,16 @@ type Client<'TAttribute, 'TContext when 'TAttribute :> AnalyzerAttribute and 'TC
3748
/// <summary>Runs all registered analyzers for given context (file).</summary>
3849
/// <returns>list of messages. Ignores errors from the analyzers</returns>
3950
member RunAnalyzers: ctx: 'TContext -> Async<AnalyzerMessage list>
51+
52+
/// <summary>Runs all registered analyzers for given context (file).</summary>
53+
/// <returns>list of messages. Ignores errors from the analyzers</returns>
54+
member RunAnalyzers: ctx: 'TContext * analyzerPredicate: (Client.RegisteredAnalyzer<'TContext> -> bool) -> Async<AnalyzerMessage list>
55+
4056
/// <summary>Runs all registered analyzers for given context (file).</summary>
4157
/// <returns>list of results per analyzer which can either be messages or an exception.</returns>
4258
member RunAnalyzersSafely: ctx: 'TContext -> Async<AnalysisResult list>
59+
60+
61+
/// <summary>Runs all registered analyzers for given context (file).</summary>
62+
/// <returns>list of results per analyzer which can either be messages or an exception.</returns>
63+
member RunAnalyzersSafely: ctx: 'TContext * analyzerPredicate: (Client.RegisteredAnalyzer<'TContext> -> bool) -> Async<AnalysisResult list>

0 commit comments

Comments
 (0)