@@ -182,24 +182,31 @@ module private Utils =
182182
183183type PerDocumentSavedData = { Hash: int ; Items: Index .IIndexedNavigableItems }
184184
185- [<ExportLanguageService( typeof< INavigateToSearchService >, FSharpConstants.FSharpLanguageName); Shared>]
185+ [<ExportLanguageService( typeof< INavigateToSearchService _ RemoveInterfaceAboveAndRenameThisAfterInternalsVisibleToUsersUpdate >, FSharpConstants.FSharpLanguageName); Shared>]
186186type internal FSharpNavigateToSearchService
187187[<ImportingConstructor>]
188188(
189189 checkerProvider: FSharpCheckerProvider,
190190 projectInfoManager: FSharpProjectOptionsManager
191191) =
192192
193+ let kindsProvided = ImmutableHashSet.Create( NavigateToItemKind.Module, NavigateToItemKind.Class, NavigateToItemKind.Field, NavigateToItemKind.Property, NavigateToItemKind.Method, NavigateToItemKind.Enum, NavigateToItemKind.EnumItem) :> IImmutableSet< string>
194+
193195// Save the backing navigation data in a memory cache held in a sliding window
194196let itemsByDocumentId = new MemoryCache( " FSharp.Editor.FSharpNavigateToSearchService" )
195197
196- let getNavigableItems ( document : Document , parsingOptions : FSharpParsingOptions ) =
198+ let getNavigableItems ( document : Document , parsingOptions : FSharpParsingOptions , kinds : IImmutableSet < string > )=
197199async {
198200let! cancellationToken = Async.CancellationToken
199201let! sourceText = document.GetTextAsync( cancellationToken) |> Async.AwaitTask
200202let! parseResults = checkerProvider.Checker.ParseFile( document.FilePath, sourceText.ToString(), parsingOptions)
203+
204+ let navItems parsedInput =
205+ NavigateTo.getNavigableItems parsedInput
206+ |> Array.filter( fun i -> kinds.Contains( navigateToItemKindToRoslynKind i.Kind))
207+
201208return
202- match parseResults.ParseTree|> Option.mapNavigateTo.getNavigableItems with
209+ match parseResults.ParseTree|> Option.mapnavItems with
203210| Some items->
204211[| for itemin itemsdo
205212match RoslynHelpers.TryFSharpRangeToTextSpan( sourceText, item.Range) with
@@ -212,7 +219,7 @@ type internal FSharpNavigateToSearchService
212219| None-> [||]
213220}
214221
215- let getCachedIndexedNavigableItems ( document : Document , parsingOptions : FSharpParsingOptions ) =
222+ let getCachedIndexedNavigableItems ( document : Document , parsingOptions : FSharpParsingOptions , kinds : IImmutableSet < string > )=
216223async {
217224let! cancellationToken = Async.CancellationToken
218225let! textVersion = document.GetTextVersionAsync( cancellationToken) |> Async.AwaitTask
@@ -221,7 +228,7 @@ type internal FSharpNavigateToSearchService
221228match itemsByDocumentId.Get( key) with
222229| : ? PerDocumentSavedData as data when data .Hash = textVersionHash -> return data .Items
223230| _ ->
224- let! items = getNavigableItems( document, parsingOptions)
231+ let! items = getNavigableItems( document, parsingOptions, kinds )
225232let indexedItems = Index.build items
226233let data = { Hash= textVersionHash; Items= indexedItems}
227234let cacheItem = CacheItem( key, data)
@@ -237,20 +244,20 @@ type internal FSharpNavigateToSearchService
237244| PatternMatchKind.Fuzzy-> NavigateToMatchKind.Regular
238245| _ -> NavigateToMatchKind.Regular
239246
240- interface INavigateToSearchService with
241- member __.SearchProjectAsync ( project , searchPattern , cancellationToken ) : Task < ImmutableArray < INavigateToSearchResult >> =
247+ interface INavigateToSearchService _ RemoveInterfaceAboveAndRenameThisAfterInternalsVisibleToUsersUpdate with
248+ member __.SearchProjectAsync ( project , searchPattern , kinds , cancellationToken ) : Task < ImmutableArray < INavigateToSearchResult >> =
242249asyncMaybe {
243250let! parsingOptions , _site , _options = projectInfoManager.TryGetOptionsForProject( project.Id)
244251let! items =
245252 project.Documents
246- |> Seq.map( fun document -> getCachedIndexedNavigableItems( document, parsingOptions))
253+ |> Seq.map( fun document -> getCachedIndexedNavigableItems( document, parsingOptions, kinds ))
247254|> Async.Parallel
248255|> liftAsync
249256
250257let items =
251258if searchPattern.Length= 1 then
252259 items
253- |> Array.map( fun items -> items.Find( searchPattern))
260+ |> Array.map( fun items -> items.Find( searchPattern))
254261|> Array.concat
255262|> Array.filter( fun x -> x.Name.Length= 1 && String.Equals( x.Name, searchPattern, StringComparison.InvariantCultureIgnoreCase))
256263else
@@ -270,12 +277,16 @@ type internal FSharpNavigateToSearchService
270277|> Async.map Seq.toImmutableArray
271278|> RoslynHelpers.StartAsyncAsTask( cancellationToken)
272279
273- member __.SearchDocumentAsync ( document , searchPattern , cancellationToken ) : Task < ImmutableArray < INavigateToSearchResult >> =
280+ member __.SearchDocumentAsync ( document , searchPattern , kinds , cancellationToken ) : Task < ImmutableArray < INavigateToSearchResult >> =
274281asyncMaybe {
275282let! parsingOptions , _ , _ = projectInfoManager.TryGetOptionsForDocumentOrProject( document)
276- let! items = getCachedIndexedNavigableItems( document, parsingOptions) |> liftAsync
283+ let! items = getCachedIndexedNavigableItems( document, parsingOptions, kinds ) |> liftAsync
277284return items.Find( searchPattern)
278285}
279286|> Async.map( Option.defaultValue[||])
280287|> Async.map Seq.toImmutableArray
281- |> RoslynHelpers.StartAsyncAsTask( cancellationToken)
288+ |> RoslynHelpers.StartAsyncAsTask( cancellationToken)
289+
290+ member __.KindsProvided = kindsProvided
291+
292+ member __.CanFilter = true