diff options
author | Jason Imison <nosami@users.noreply.github.com> | 2018-07-30 13:33:35 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-30 13:33:35 +0300 |
commit | 3f572451cf079a5a78a98eb78c026530f214e6c7 (patch) | |
tree | b127383e468f3db5bbb65a0daa003647b4b646a3 | |
parent | 2dc0c1e8ab5606c7d3b7a59f6987b47d9ea9f3a1 (diff) | |
parent | 8c5a9730e51bc04e2fac924326f3cd7ba2f1bf42 (diff) |
Merge pull request #5503 from mono/fix-600282monodevelop-7.7.0.768
Adjust the position of the completion window for F#...
-rw-r--r-- | main/external/fsharpbinding/MonoDevelop.FSharpBinding/FSharpTextEditorCompletion.fs | 52 | ||||
-rw-r--r-- | main/external/fsharpbinding/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.fsproj | 2 |
2 files changed, 52 insertions, 2 deletions
diff --git a/main/external/fsharpbinding/MonoDevelop.FSharpBinding/FSharpTextEditorCompletion.fs b/main/external/fsharpbinding/MonoDevelop.FSharpBinding/FSharpTextEditorCompletion.fs index 03424bc624..a04a5ac1ce 100644 --- a/main/external/fsharpbinding/MonoDevelop.FSharpBinding/FSharpTextEditorCompletion.fs +++ b/main/external/fsharpbinding/MonoDevelop.FSharpBinding/FSharpTextEditorCompletion.fs @@ -21,6 +21,54 @@ open MonoDevelop.Ide.Gui open MonoDevelop.Ide.TypeSystem open ExtCore.Control +type FSharpCompletionContext(editor:TextEditor, baseContext:CodeCompletionContext) = + inherit CodeCompletionContext() + + override x.GetCoordinatesAsync() = + let line = editor.GetLine editor.CaretLine + let marker = editor.GetLineMarkers line |> Seq.tryPick(Option.tryCast<SignatureHelpMarker>) + + let task = baseContext.GetCoordinatesAsync() + + match marker with + | Some m -> + let struct (x, y, lineHeight) = task.Result + // We need to add the height of the signature help marker to the Y coordinate + // The line height is the height of the text plus the height of the marker + Task.FromResult struct (x, y + (lineHeight / 2), lineHeight) + | None -> task + +type FSharpCompletionWidget(editor:TextEditor, completionWidget:ICompletionWidget) = + interface ICompletionWidget with + member x.CaretOffset + with get() = completionWidget.CaretOffset + and set(offset) = completionWidget.CaretOffset <- offset + member x.TextLength = completionWidget.TextLength + member x.SelectedLength = completionWidget.SelectedLength + member x.GetText(startOffset, endOffset) = + completionWidget.GetText(startOffset, endOffset) + member x.GetChar offset = completionWidget.GetChar offset + member x.Replace(offset, count, text) = completionWidget.Replace(offset, count, text) + member x.GtkStyle = completionWidget.GtkStyle + member x.ZoomLevel = completionWidget.ZoomLevel + member x.CreateCodeCompletionContext triggerOffset = + let context = completionWidget.CreateCodeCompletionContext triggerOffset + FSharpCompletionContext(editor, context, + TriggerOffset = triggerOffset, + TriggerLine = context.TriggerLine, + TriggerLineOffset = context.TriggerLineOffset, + TriggerWordLength = context.TriggerWordLength) :> _ + + member x.CurrentCodeCompletionContext + with get() = completionWidget.CurrentCodeCompletionContext + member x.GetCompletionText ctx = completionWidget.GetCompletionText ctx + member x.SetCompletionText (ctx, partialWord, completeWord) = + completionWidget.SetCompletionText (ctx, partialWord, completeWord) + member x.SetCompletionText (ctx, partialWord, completeWord, completeWordOffset) = + completionWidget.SetCompletionText (ctx, partialWord, completeWord, completeWordOffset) + [<CLIEvent>] + member x.CompletionContextChanged = completionWidget.CompletionContextChanged + type FSharpMemberCompletionData(name, icon, symbol:FSharpSymbolUse, overloads:FSharpSymbolUse list) = inherit CompletionData(CompletionText = PrettyNaming.QuoteIdentifierIfNeeded name, DisplayText = name, @@ -792,6 +840,7 @@ module ParameterHinting = return ParameterHintingResult.Empty } + // Returns the index of the parameter where the cursor is currently positioned. // -1 means the cursor is outside the method parameter list // 0 means no parameter entered @@ -833,7 +882,8 @@ type FSharpTextEditorCompletion() = override x.CompletionLanguage = "F#" override x.Initialize() = - do x.Editor.IndentationTracker <- FSharpIndentationTracker(x.Editor) + x.Editor.IndentationTracker <- FSharpIndentationTracker(x.Editor) + x.CompletionWidget <- FSharpCompletionWidget(x.Editor, x.Editor.GetContent<ICompletionWidget>()) base.Initialize() /// Provide parameter and method overload information when you type '(', '<' or ',' diff --git a/main/external/fsharpbinding/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.fsproj b/main/external/fsharpbinding/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.fsproj index a9f034e2ce..61310a92ed 100644 --- a/main/external/fsharpbinding/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.fsproj +++ b/main/external/fsharpbinding/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.fsproj @@ -95,6 +95,7 @@ <Compile Include="FSharpParser.fs" /> <Compile Include="FSharpOutlineTextEditorExtension.fs" /> <Compile Include="FSharpIndentationTracker.fs" /> + <Compile Include="TypeSignatureHelp.fs" /> <Compile Include="FSharpTextEditorCompletion.fs" /> <Compile Include="FSharpPathExtension.fs" /> <Compile Include="FSharpUnitTestTextEditorExtension.fs" /> @@ -122,7 +123,6 @@ <Compile Include="HighlightUnusedCode.fs" /> <Compile Include="ScriptDebugging.fs" /> <Compile Include="FSharpProjectCompilerOptions.fs" /> - <Compile Include="TypeSignatureHelp.fs" /> <Compile Include="FindReferenceUsages.fs" /> </ItemGroup> <ItemGroup> |