From c25540b106be98d1781fb82f1633bec5e58367f7 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Mon, 9 Oct 2017 14:09:42 -0700 Subject: [PATCH 1/2] Do not commit autocompletion on bracket or pipe chars --- .../Completion/CompletionProvider.fs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs index e30c0322b47..5c81b45d22e 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs @@ -21,6 +21,7 @@ open Microsoft.VisualStudio.Shell.Interop open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.SourceCodeServices +open XmlDocumentation type internal FSharpCompletionProvider ( @@ -55,9 +56,23 @@ type internal FSharpCompletionProvider let xmlMemberIndexService = serviceProvider.GetService(typeof) :?> IVsXMLMemberIndexService let documentationBuilder = XmlDocumentation.CreateDocumentationBuilder(xmlMemberIndexService, serviceProvider.DTE) - + static let noCommitOnSpaceRules = - CompletionItemRules.Default.WithCommitCharacterRule(CharacterSetModificationRule.Create(CharacterSetModificationKind.Remove, ' ', '=', ',', '.', '<', '>', '(', ')', '!', ':')) + // These are important. They make sure we don't _commit_ autocompletion when people don't expect them to. Some examples: + // + // * type Foo() = + // member val a = 12 with get, <<---- Don't commit autocomplete! + // + // * type MyRecord = { name: <<---- Don't commit autocomplete! + // + // * type My< <<---- Don't commit autocomplete! + // + // * let myClassInstance = MyClass(Date= <<---- Don't commit autocomplete! + // + // * let xs = [1..10] <<---- Don't commit autocomplete! (same for arrays) + let noCommitChars = [|' '; '='; ','; '.'; '<'; '>'; '('; ')'; '!'; ':'; '['; ']'; '|'|].ToImmutableArray() + + CompletionItemRules.Default.WithCommitCharacterRule(CharacterSetModificationRule.Create(CharacterSetModificationKind.Remove, noCommitChars)) static let getRules() = if Settings.IntelliSense.ShowAfterCharIsTyped then noCommitOnSpaceRules else CompletionItemRules.Default From 9d2e6775cfec063551431a00e37872040a1e1279 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Mon, 9 Oct 2017 14:24:54 -0700 Subject: [PATCH 2/2] Remove accidentally added open statement --- vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs index 5c81b45d22e..c569ddef8e3 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs @@ -21,7 +21,6 @@ open Microsoft.VisualStudio.Shell.Interop open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.SourceCodeServices -open XmlDocumentation type internal FSharpCompletionProvider (