Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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