未验证 提交 5857c33e 编写于 作者: P Phillip Carter 提交者: GitHub

Respect ShowAfterCharIsDeleted and turn it off by default (#5865)

* Respect ShowAfterCharIsDeleted

* Small refactor and modify test

* ShowCharAfterDelete false by default

* Delete FSharp.Core.UnitTests.dll.config
上级 55cd1a8f
......@@ -84,22 +84,24 @@ type internal FSharpCompletionProvider
static let mruItems = Dictionary<(* Item.FullName *) string, (* hints *) int>()
static member ShouldTriggerCompletionAux(sourceText: SourceText, caretPosition: int, trigger: CompletionTriggerKind, getInfo: (unit -> DocumentId * string * string list), intelliSenseOptions: IntelliSenseOptions) =
// Skip if we are at the start of a document
if caretPosition = 0 then false
// Skip if it was triggered by an operation other than insertion
elif not (trigger = CompletionTriggerKind.Insertion) then false
// Skip if we are not on a completion trigger
if caretPosition = 0 then
false
else
let triggerPosition = caretPosition - 1
let triggerChar = sourceText.[triggerPosition]
// do not trigger completion if it's not single dot, i.e. range expression
if not intelliSenseOptions.ShowAfterCharIsTyped && triggerPosition > 0 && sourceText.[triggerPosition - 1] = '.' then
if trigger = CompletionTriggerKind.Deletion && intelliSenseOptions.ShowAfterCharIsDeleted then
Char.IsLetterOrDigit(sourceText.[triggerPosition]) || triggerChar = '.'
elif not (trigger = CompletionTriggerKind.Insertion) then
false
else
let documentId, filePath, defines = getInfo()
CompletionUtils.shouldProvideCompletion(documentId, filePath, defines, sourceText, triggerPosition) &&
(triggerChar = '.' || (intelliSenseOptions.ShowAfterCharIsTyped && CompletionUtils.isStartingNewWord(sourceText, triggerPosition)))
// Do not trigger completion if it's not single dot, i.e. range expression
if not intelliSenseOptions.ShowAfterCharIsTyped && triggerPosition > 0 && sourceText.[triggerPosition - 1] = '.' then
false
else
let documentId, filePath, defines = getInfo()
CompletionUtils.shouldProvideCompletion(documentId, filePath, defines, sourceText, triggerPosition) &&
(triggerChar = '.' || (intelliSenseOptions.ShowAfterCharIsTyped && CompletionUtils.isStartingNewWord(sourceText, triggerPosition)))
static member ProvideCompletionsAsyncAux(checker: FSharpChecker, sourceText: SourceText, caretPosition: int, options: FSharpProjectOptions, filePath: string,
......
......@@ -32,7 +32,7 @@ type IntelliSenseOptions =
EnterKeySetting : EnterKeySetting }
static member Default =
{ ShowAfterCharIsTyped = true
ShowAfterCharIsDeleted = true
ShowAfterCharIsDeleted = false
IncludeSymbolsFromUnopenedNamespacesOrModules = false
EnterKeySetting = EnterKeySetting.NeverNewline}
......
......@@ -148,14 +148,14 @@ System.Console.WriteLine(x + y)
Assert.AreEqual(shouldBeTriggered, triggered, "FSharpCompletionProvider.ShouldTriggerCompletionAux() should compute the correct result")
[<Test>]
let ShouldNotTriggerCompletionAfterAnyTriggerOtherThanInsertion() =
for triggerKind in [CompletionTriggerKind.Deletion; CompletionTriggerKind.Invoke; CompletionTriggerKind.Snippets ] do
let fileContents = "System.Console.WriteLine(123)"
let caretPosition = fileContents.IndexOf("System.")
let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId())
let getInfo() = documentId, filePath, []
let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux(SourceText.From(fileContents), caretPosition, triggerKind, getInfo, IntelliSenseOptions.Default)
Assert.IsFalse(triggered, "FSharpCompletionProvider.ShouldTriggerCompletionAux() should not trigger")
let ShouldNotTriggerCompletionAfterAnyTriggerOtherThanInsertionOrDeletion() =
for triggerKind in [ CompletionTriggerKind.Invoke; CompletionTriggerKind.Snippets ] do
let fileContents = "System.Console.WriteLine(123)"
let caretPosition = fileContents.IndexOf("rite")
let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId())
let getInfo() = documentId, filePath, []
let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux(SourceText.From(fileContents), caretPosition, triggerKind, getInfo, IntelliSenseOptions.Default)
Assert.IsFalse(triggered, "FSharpCompletionProvider.ShouldTriggerCompletionAux() should not trigger")
[<Test>]
let ShouldNotTriggerCompletionInStringLiterals() =
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册