Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit 0d472e5

Browse files
authored
Distinguish signature files from non-signature files in NavigateToSearchService results (dotnet#11324)
1 parent deb425a commit 0d472e5

File tree

1 file changed

+38
-27
lines changed

1 file changed

+38
-27
lines changed

Navigation/NavigateToSearchService.fs

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,14 @@ type internal NavigateToSearchResult(item: NavigableItem, matchKind: FSharpNavig
3333

3434
module private Index =
3535
[<System.Diagnostics.DebuggerDisplay("{DebugString()}")>]
36-
type private IndexEntry(str: string, offset: int, item: NavigableItem, isOperator: bool) =
36+
type private IndexEntry(str: string, offset: int, item: NavigableItem) =
3737
member _.String = str
3838
member _.Offset = offset
3939
member _.Length = str.Length - offset
4040
member _.Item = item
41-
member _.IsOperator = isOperator
4241
member x.StartsWith (s: string) =
4342
if s.Length > x.Length then false
4443
else CultureInfo.CurrentCulture.CompareInfo.IndexOf(str, s, offset, s.Length, CompareOptions.IgnoreCase) = offset
45-
member private _.DebugString() = sprintf "%s (offset %d) (%s)" (str.Substring offset) offset str
4644

4745
let private indexEntryComparer =
4846
{ new IComparer<IndexEntry> with
@@ -70,20 +68,20 @@ module private Index =
7068
let entries = ResizeArray()
7169

7270
for item in items do
73-
let isOperator, name =
71+
let name =
7472
if PrettyNaming.IsMangledOpName item.Name then
75-
true, PrettyNaming.DecompileOpName item.Name
73+
PrettyNaming.DecompileOpName item.Name
7674
else
77-
false, item.Name
75+
item.Name
7876
for i = 0 to name.Length - 1 do
79-
entries.Add(IndexEntry(name, i, item, isOperator))
77+
entries.Add(IndexEntry(name, i, item))
8078

8179
entries.Sort(indexEntryComparer)
8280
{ new IIndexedNavigableItems with
8381
member _.Find (searchValue) =
8482
let result = HashSet(navigateToSearchResultComparer)
8583
if entries.Count > 0 then
86-
let entryToFind = IndexEntry(searchValue, 0, Unchecked.defaultof<_>, Unchecked.defaultof<_>)
84+
let entryToFind = IndexEntry(searchValue, 0, Unchecked.defaultof<_>)
8785

8886
let initial =
8987
let p = entries.BinarySearch(entryToFind, indexEntryComparer)
@@ -143,7 +141,8 @@ module private Utils =
143141
| NavigableItemKind.EnumCase -> Glyph.EnumPublic
144142
| NavigableItemKind.UnionCase -> Glyph.EnumPublic
145143

146-
let containerToString (container: NavigableContainer) (project: Project) =
144+
let containerToString (container: NavigableContainer) (document: Document) =
145+
let project = document.Project
147146
let typeAsString =
148147
match container.Type with
149148
| NavigableContainerType.File -> "project "
@@ -156,7 +155,13 @@ module private Utils =
156155
| NavigableContainerType.File ->
157156
(Path.GetFileNameWithoutExtension project.Name) + ", " + (Path.GetFileName container.Name)
158157
| _ -> container.Name
159-
typeAsString + name
158+
159+
let combined = typeAsString + name
160+
161+
if isSignatureFile document.FilePath then
162+
"signature for: " + combined
163+
else
164+
combined
160165

161166
type PerDocumentSavedData = { Hash: int; Items: Index.IIndexedNavigableItems }
162167

@@ -181,23 +186,29 @@ type internal FSharpNavigateToSearchService
181186
match parseResults with
182187
| None -> return [||]
183188
| Some parseResults ->
184-
185-
let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
186-
let navItems parsedInput =
187-
NavigateTo.GetNavigableItems parsedInput
188-
|> Array.filter (fun i -> kinds.Contains(navigateToItemKindToRoslynKind i.Kind))
189-
190-
let items = parseResults.ParseTree |> navItems
191-
let navigableItems =
192-
[| for item in items do
193-
match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with
194-
| None -> ()
195-
| Some sourceSpan ->
196-
let glyph = navigateToItemKindToGlyph item.Kind
197-
let kind = navigateToItemKindToRoslynKind item.Kind
198-
let additionalInfo = containerToString item.Container document.Project
199-
yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) |]
200-
return navigableItems
189+
let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
190+
let navItems parsedInput =
191+
NavigateTo.GetNavigableItems parsedInput
192+
|> Array.filter (fun i -> kinds.Contains(navigateToItemKindToRoslynKind i.Kind))
193+
194+
let items = parseResults.ParseTree |> navItems
195+
let navigableItems =
196+
[|
197+
for item in items do
198+
match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with
199+
| None -> ()
200+
| Some sourceSpan ->
201+
let glyph = navigateToItemKindToGlyph item.Kind
202+
let kind = navigateToItemKindToRoslynKind item.Kind
203+
let additionalInfo = containerToString item.Container document
204+
let _name =
205+
if isSignatureFile document.FilePath then
206+
item.Name + " (signature)"
207+
else
208+
item.Name
209+
yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo)
210+
|]
211+
return navigableItems
201212
}
202213

203214
let getCachedIndexedNavigableItems(document: Document, parsingOptions: FSharpParsingOptions, kinds: IImmutableSet<string>) =

0 commit comments

Comments
 (0)