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

Commitb1a5c68

Browse files
dsymeKevinRansom
authored andcommitted
Fixdotnet#4714 (save completion data for at least as long as the completion session) (dotnet#4809)
* extend sliding window for intellisense completion to 2 minutes* save declaration items for at least as long as the completion session* save declaration items for at least as long as the completion session* save declaration items for at least as long as the completion session* save declaration items for at least as long as the completion session
1 parent19d4532 commitb1a5c68

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ open Microsoft.FSharp.Compiler
2121
openMicrosoft.FSharp.Compiler.Range
2222
openMicrosoft.FSharp.Compiler.SourceCodeServices
2323
openSystem.Runtime.Caching
24+
openSystem.Collections.Concurrent
2425

2526
typeinternalFSharpCompletionProvider
2627
(
@@ -34,8 +35,9 @@ type internal FSharpCompletionProvider
3435
inherit CompletionProvider()
3536

3637
static letuserOpName="CompletionProvider"
37-
// Save the backing data in a memory cache held in a sliding window
38-
static letdeclarationItemsCache=new MemoryCache("FSharp.Editor."+ userOpName)
38+
// Save the backing data in a cache, we need to save for at least the length of the completion session
39+
// See https://github.com/Microsoft/visualfsharp/issues/4714
40+
static letdeclarationItemsData=new ConcurrentDictionary<string, FSharpDeclarationListItem>()
3941
static let [<Literal>]NameInCodePropName="NameInCode"
4042
static let [<Literal>]FullNamePropName="FullName"
4143
static let [<Literal>]IsExtensionMemberPropName="IsExtensionMember"
@@ -139,6 +141,7 @@ type internal FSharpCompletionProvider
139141

140142
letmaxHints=if mruItems.Values.Count=0then0else Seq.max mruItems.Values
141143

144+
declarationItemsData.Clear()
142145
sortedDeclItems|> Array.iteri(fun number declarationItem->
143146
letglyph= Tokenizer.FSharpGlyphToRoslynGlyph(declarationItem.Glyph, declarationItem.Accessibility)
144147
letname=
@@ -184,9 +187,7 @@ type internal FSharpCompletionProvider
184187
letcompletionItem= completionItem.WithSortText(sortText)
185188

186189
letkey= completionItem.DisplayText
187-
letcacheItem= CacheItem(key, declarationItem)
188-
letpolicy= CacheItemPolicy(SlidingExpiration=DefaultTuning.PerDocumentSavedDataSlidingWindow)
189-
declarationItemsCache.Set(cacheItem, policy)
190+
declarationItemsData.TryAdd(key, declarationItem)|> ignore
190191
results.Add(completionItem))
191192

192193
if results.Count>0&&not declarations.IsForType&&not declarations.IsError&& List.isEmpty partialName.QualifyingIdentsthen
@@ -212,7 +213,7 @@ type internal FSharpCompletionProvider
212213
(documentId, document.FilePath, defines)
213214

214215
FSharpCompletionProvider.ShouldTriggerCompletionAux(sourceText, caretPosition, trigger.Kind, getInfo)
215-
216+
216217
overridethis.ProvideCompletionsAsync(context:Completion.CompletionContext)=
217218
asyncMaybe{
218219
letdocument= context.Document
@@ -228,13 +229,14 @@ type internal FSharpCompletionProvider
228229
let!results=
229230
FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, sourceText, context.Position, projectOptions,
230231
document.FilePath, textVersion.GetHashCode(), getAllSymbols)
232+
231233
context.AddItems(results)
232234
}|> Async.Ignore|> RoslynHelpers.StartAsyncUnitAsTask context.CancellationToken
233235

234236
overridethis.GetDescriptionAsync(_:Document,completionItem:Completion.CompletionItem,cancellationToken:CancellationToken):Task<CompletionDescription>=
235237
async{
236-
matchdeclarationItemsCache.Get(completionItem.DisplayText)with
237-
|:? FSharpDeclarationListItem as declarationItem->
238+
matchdeclarationItemsData.TryGetValue(completionItem.DisplayText)with
239+
|true, declarationItem->
238240
let!description= declarationItem.StructuredDescriptionTextAsync
239241
letdocumentation= List()
240242
letcollector= RoslynHelpers.CollectTaggedText documentation

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp