fsprojects/VisualFSharpPowerTools — pull request #903 by ctaggart (2014-12-23 04:41:44+00:00)
Title: SignatureGenerator.Filterer

I'm exploring ways to use the `SignatureGenerator`. There are several use cases where it would be good to only print a subset of the members/functions/values for an entity. This pull request enables that.

A fictional example is to print `Microsoft.FSharp.Linq.QueryBuilder` and all of its members/functions/values that begin with "Then":
```
let formatSymbol symbol =
let xmlDoc xmlFile = []
let openDeclarations = []
let filterer = {
SignatureGenerator.Filterer.NoFilters with
MemberOrFunctionOrValueFilter = Some (fun m -> m.DisplayName.StartsWith "Then") }
SignatureGenerator.formatSymbol xmlDoc 4 FSharpDisplayContext.Empty openDeclarations symbol filterer

let txt = formatSymbol entityQueryBuilder
```
```
[]
type QueryBuilder =
[]
member ThenBy : source:Microsoft.FSharp.Linq.QuerySource<'T,'Q> * keySelector:('T -> 'Key) -> Microsoft.FSharp.Linq.QuerySource<'T,'Q> when 'Key : comparison
[]
member ThenByDescending : source:Microsoft.FSharp.Linq.QuerySource<'T,'Q> * keySelector:('T -> 'Key) -> Microsoft.FSharp.Linq.QuerySource<'T,'Q> when 'Key : comparison
[]
member ThenByNullable : source:Microsoft.FSharp.Linq.QuerySource<'T,'Q> * keySelector:('T -> System.Nullable<'Key>) -> Microsoft.FSharp.Linq.QuerySource<'T,'Q> when 'Key : comparison and 'Key : (new : unit -> 'Key) and 'Key : struct and 'Key :> System.ValueType
[]
member ThenByNullableDescending : source:Microsoft.FSharp.Linq.QuerySource<'T,'Q> * keySelector:('T -> System.Nullable<'Key>) -> Microsoft.FSharp.Linq.QuerySource<'T,'Q> when 'Key : comparison and 'Key : (new : unit -> 'Key) and 'Key : struct and 'Key :> System.ValueType
```

My immediate need is for diffing the public surface area of `FSharp.Core` `3.0`, `3.1` and `4.0`.
[Any benefit for targeting F# runtime for F# 4.0 or 3.1 instead of 3.0?]
(http://stackoverflow.com/questions/27363777/any-benefit-for-targeting-f-runtime-for-f-4-0-or-3-1-instead-of-3-0)

Other questions I have:
* How do I prevent the types from being fully qualified. I tried without luck variations of `
let openDeclarations = [ "Microsoft.FSharp.Core"; "Microsoft.FSharp.Linq" ]`
* How do I control the formatting so that there is a blank between members/functions/values?