Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.targets
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
<DefineCommonItemSchemas Condition=" '$(DefineCommonItemSchemas)' == '' ">true</DefineCommonItemSchemas>
<DefineCommonReferenceSchemas Condition=" '$(DefineCommonReferenceSchemas)' == '' ">true</DefineCommonReferenceSchemas>
<DefineCommonCapabilities Condition=" '$(DefineCommonCapabilities)' == '' ">true</DefineCommonCapabilities>
<SimpleResolution>true</SimpleResolution>
</PropertyGroup>

<ItemGroup Condition="'$(_DebugSymbolsProduced)' == 'true' and '$(PdbFile)' != ''">
Expand All @@ -39,7 +40,6 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
<TargetProfile Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' " >mscorlib</TargetProfile>
<TargetProfile Condition=" '$(TargetFrameworkIdentifier)' != '.NETFramework' " >netcore</TargetProfile>
<TargetProfile Condition=" '$(TargetFrameworkIdentifier)' == '.NETStandard' and '$(_TargetFrameworkVersionWithoutV)' >= '2.0' " >netstandard</TargetProfile>
<OtherFlags>$(OtherFlags) --simpleresolution</OtherFlags>
</PropertyGroup>

<Import Project="Microsoft.FSharp.Targets" />
Expand Down
8 changes: 7 additions & 1 deletion src/fsharp/FSharp.Build/Microsoft.FSharp.Targets
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,12 @@ this file.
<EmbeddedFiles Include="@(Embed)" KeepDuplicates="false" />
</ItemGroup>

<!-- Dotnet SDK requires SimpleResolution to be true Legacy project system build not -->
<PropertyGroup>
<FscOtherFlags Condition="'$(SimpleResolution)' == 'true'">--simpleresolution $(OtherFlags)</FscOtherFlags>
<FscOtherFlags Condition="'$(SimpleResolution)' != 'true'">$(OtherFlags)</FscOtherFlags>
</PropertyGroup>

<!-- Condition is to filter out the _CoreCompileResourceInputs so that it doesn't pass in culture resources to the compiler -->
<!-- NOTE: ManifestResourceWithNoCulture and ManifestNonResxWithNoCultureOnDisk are generated by Mono targets files -->
<Fsc Condition=" '%(_CoreCompileResourceInputs.WithCulture)' != 'true' "
Expand All @@ -286,7 +292,7 @@ this file.
LCID="$(LCID)"
NoFramework="true"
Optimize="$(Optimize)"
OtherFlags="$(OtherFlags)"
OtherFlags="$(FscOtherFlags)"
OutputAssembly="@(IntermediateAssembly)"
PdbFile="$(PdbFile)"
Platform="$(PlatformTarget)"
Expand Down
22 changes: 12 additions & 10 deletions vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type IntelliSenseOptions =
EnterKeySetting : EnterKeySetting }
static member Default =
{ ShowAfterCharIsTyped = true
ShowAfterCharIsDeleted = true
ShowAfterCharIsDeleted = false
IncludeSymbolsFromUnopenedNamespacesOrModules = false
EnterKeySetting = EnterKeySetting.NeverNewline}

Expand Down
16 changes: 8 additions & 8 deletions vsintegration/tests/UnitTests/CompletionProviderTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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() =
Expand Down