Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit320f56c

Browse files
CompletionProvider item's cache: replace dictionary with array
1 parentc63e49d commit320f56c

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

‎vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs‎

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@ type internal FSharpCompletionProvider
3939
static letuserOpName="CompletionProvider"
4040
// Save the backing data in a cache, we need to save for at least the length of the completion session
4141
// See https://github.com/Microsoft/visualfsharp/issues/4714
42-
static letdeclarationItemsData=new ConcurrentDictionary<string, FSharpDeclarationListItem>()
42+
static letmutabledeclarationItems:FSharpDeclarationListItem[]=[||]
4343
static let [<Literal>]NameInCodePropName="NameInCode"
4444
static let [<Literal>]FullNamePropName="FullName"
4545
static let [<Literal>]IsExtensionMemberPropName="IsExtensionMember"
4646
static let [<Literal>]NamespaceToOpenPropName="NamespaceToOpen"
4747
static let [<Literal>]IsKeywordPropName="IsKeyword"
48+
static let [<Literal>]IndexPropName="Index"
4849

4950
static letkeywordCompletionItems=
5051
Lexhelp.Keywords.keywordsWithDescription
@@ -129,7 +130,7 @@ type internal FSharpCompletionProvider
129130
| CompletionItemKind.Other->5
130131
| CompletionItemKind.Method(isExtension=true)->6
131132

132-
letsortedDeclItems=
133+
declarationItems<-
133134
declarations.Items
134135
|> Array.sortWith(fun x y->
135136
let mutablen=(not x.IsResolved).CompareTo(not y.IsResolved)
@@ -144,8 +145,7 @@ type internal FSharpCompletionProvider
144145

145146
letmaxHints=if mruItems.Values.Count=0then0else Seq.max mruItems.Values
146147

147-
declarationItemsData.Clear()
148-
sortedDeclItems|> Array.iteri(fun number declarationItem->
148+
declarationItems|> Array.iteri(fun number declarationItem->
149149
letglyph= Tokenizer.FSharpGlyphToRoslynGlyph(declarationItem.Glyph, declarationItem.Accessibility)
150150
letname=
151151
match declarationItem.NamespaceToOpenwith
@@ -180,17 +180,15 @@ type internal FSharpCompletionProvider
180180
| Some ns-> completionItem.AddProperty(NamespaceToOpenPropName, ns)
181181
| None-> completionItem
182182

183+
letcompletionItem= completionItem.AddProperty(IndexPropName, string number)
184+
183185
letpriority=
184186
match mruItems.TryGetValue declarationItem.FullNamewith
185187
|true, hints-> maxHints- hints
186188
|_-> number+ maxHints+1
187189

188190
letsortText= sprintf"%06d" priority
189-
190191
letcompletionItem= completionItem.WithSortText(sortText)
191-
192-
letkey= completionItem.DisplayText
193-
declarationItemsData.TryAdd(key, declarationItem)|> ignore
194192
results.Add(completionItem))
195193

196194
if results.Count>0&&not declarations.IsForType&&not declarations.IsError&& List.isEmpty partialName.QualifyingIdentsthen
@@ -243,15 +241,19 @@ type internal FSharpCompletionProvider
243241
overridethis.GetDescriptionAsync(document:Document,completionItem:Completion.CompletionItem,cancellationToken:CancellationToken):Task<CompletionDescription>=
244242
async{
245243
use _logBlock= Logger.LogBlockMessage document.Name LogEditorFunctionId.Completion_GetDescriptionAsync
246-
247-
match declarationItemsData.TryGetValue(completionItem.DisplayText)with
248-
|true, declarationItem->
249-
let!description= declarationItem.StructuredDescriptionTextAsync
250-
letdocumentation= List()
251-
letcollector= RoslynHelpers.CollectTaggedText documentation
252-
// mix main description and xmldoc by using one collector
253-
XmlDocumentation.BuildDataTipText(documentationBuilder, collector, collector, collector, collector, collector, description)
254-
return CompletionDescription.Create(documentation.ToImmutableArray())
244+
match completionItem.Properties.TryGetValue IndexPropNamewith
245+
|true, completionItemIndexStr->
246+
letcompletionItemIndex= int completionItemIndexStr
247+
if completionItemIndex< declarationItems.Lengththen
248+
letdeclarationItem= declarationItems.[completionItemIndex]
249+
let!description= declarationItem.StructuredDescriptionTextAsync
250+
letdocumentation= List()
251+
letcollector= RoslynHelpers.CollectTaggedText documentation
252+
// mix main description and xmldoc by using one collector
253+
XmlDocumentation.BuildDataTipText(documentationBuilder, collector, collector, collector, collector, collector, description)
254+
return CompletionDescription.Create(documentation.ToImmutableArray())
255+
else
256+
return CompletionDescription.Empty
255257
|_->
256258
return CompletionDescription.Empty
257259
}|> RoslynHelpers.StartAsyncAsTask cancellationToken

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp