diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets
index 65119e6130e..0e4aab34d77 100644
--- a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets
+++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets
@@ -22,6 +22,7 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
true
true
true
+ true
@@ -39,7 +40,6 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
mscorlib
netcore
netstandard
- $(OtherFlags) --simpleresolution
diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets
index 9bdd9868dc0..2190678fec6 100644
--- a/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets
+++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.Targets
@@ -266,6 +266,12 @@ this file.
+
+
+ --simpleresolution $(OtherFlags)
+ $(OtherFlags)
+
+
()
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,
diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
index 269ae085680..3f2610a0d8a 100644
--- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
+++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
@@ -32,7 +32,7 @@ type IntelliSenseOptions =
EnterKeySetting : EnterKeySetting }
static member Default =
{ ShowAfterCharIsTyped = true
- ShowAfterCharIsDeleted = true
+ ShowAfterCharIsDeleted = false
IncludeSymbolsFromUnopenedNamespacesOrModules = false
EnterKeySetting = EnterKeySetting.NeverNewline}
diff --git a/vsintegration/tests/UnitTests/CompletionProviderTests.fs b/vsintegration/tests/UnitTests/CompletionProviderTests.fs
index f73c57ce899..4f90bee81c2 100644
--- a/vsintegration/tests/UnitTests/CompletionProviderTests.fs
+++ b/vsintegration/tests/UnitTests/CompletionProviderTests.fs
@@ -148,14 +148,14 @@ System.Console.WriteLine(x + y)
Assert.AreEqual(shouldBeTriggered, triggered, "FSharpCompletionProvider.ShouldTriggerCompletionAux() should compute the correct result")
[]
-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")
[]
let ShouldNotTriggerCompletionInStringLiterals() =