Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make remarks and returns visible in quick info #16417

Merged
merged 5 commits into from
Dec 11, 2023
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
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,12 @@ open CancellableTasks
module Logger = Microsoft.VisualStudio.FSharp.Editor.Logger

type internal FSharpCompletionProvider
(workspace: Workspace, serviceProvider: SVsServiceProvider, assemblyContentProvider: AssemblyContentProvider) =
(
workspace: Workspace,
serviceProvider: SVsServiceProvider,
assemblyContentProvider: AssemblyContentProvider,
editorOptions: EditorOptions
) =

inherit FSharpCompletionProviderBase()

Expand Down Expand Up @@ -380,7 +385,16 @@ type internal FSharpCompletionProvider
let documentation = List()
let collector = RoslynHelpers.CollectTaggedText documentation
// mix main description and xmldoc by using one collector
XmlDocumentation.BuildDataTipText(documentationBuilder, collector, collector, collector, collector, collector, description)
XmlDocumentation.BuildDataTipText(
documentationBuilder,
collector,
collector,
collector,
collector,
collector,
description,
editorOptions.QuickInfo.ShowRemarks
)

Task.FromResult(CompletionDescription.Create(documentation.ToImmutableArray()))
| _ ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type internal FSharpCompletionService

let builtInProviders =
ImmutableArray.Create<CompletionProvider>(
FSharpCompletionProvider(workspace, serviceProvider, assemblyContentProvider),
FSharpCompletionProvider(workspace, serviceProvider, assemblyContentProvider, settings),
FSharpCommonCompletionProvider.Create(HashDirectiveCompletionProvider.Create(workspace, projectInfoManager))
)

Expand Down
32 changes: 21 additions & 11 deletions vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ type SignatureHelpData =

[<Shared>]
[<Export(typeof<IFSharpSignatureHelpProvider>)>]
type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvider: SVsServiceProvider) =
type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvider: SVsServiceProvider, editorOptions: EditorOptions) =

let documentationBuilder =
XmlDocumentation.CreateDocumentationBuilder(serviceProvider.XMLMemberIndexService)
Expand All @@ -79,7 +79,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
documentationBuilder: IDocumentationBuilder,
sourceText: SourceText,
caretPosition: int,
triggerIsTypedChar: char option
triggerIsTypedChar: char option,
editorOptions: EditorOptions
) =
asyncMaybe {
let textLines = sourceText.Lines
Expand Down Expand Up @@ -206,7 +207,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
RoslynHelpers.CollectTaggedText mainDescription,
RoslynHelpers.CollectTaggedText documentation,
method.Description,
false
false,
editorOptions.QuickInfo.ShowRemarks
)

let parameters =
Expand All @@ -225,7 +227,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
documentationBuilder,
RoslynHelpers.CollectTaggedText doc,
method.XmlDoc,
p.ParameterName
p.ParameterName,
editorOptions.QuickInfo.ShowRemarks
)

p.Display |> Seq.iter (RoslynHelpers.CollectTaggedText parts)
Expand Down Expand Up @@ -292,7 +295,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
sourceText: SourceText,
caretPosition: int,
adjustedColumnInSource: int,
filePath: string
filePath: string,
editorOptions: EditorOptions
) =
asyncMaybe {
let textLine = sourceText.Lines.GetLineFromPosition(adjustedColumnInSource)
Expand Down Expand Up @@ -430,7 +434,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
typeParameterMap.Add,
usage.Add,
exceptions.Add,
tooltip
tooltip,
editorOptions.QuickInfo.ShowRemarks
)

let fsharpDocs =
Expand Down Expand Up @@ -606,7 +611,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
documentationBuilder: IDocumentationBuilder,
caretPosition: int,
triggerTypedChar: char option,
possibleCurrentSignatureHelpSessionKind: CurrentSignatureHelpSessionKind option
possibleCurrentSignatureHelpSessionKind: CurrentSignatureHelpSessionKind option,
editorOptions: EditorOptions
) =
asyncMaybe {

Expand Down Expand Up @@ -655,7 +661,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
sourceText,
caretPosition,
adjustedColumnInSource,
document.FilePath
document.FilePath,
editorOptions
)
| _, Some FunctionApplication when
adjustedColumnChar <> ','
Expand All @@ -674,7 +681,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
sourceText,
caretPosition,
adjustedColumnInSource,
document.FilePath
document.FilePath,
editorOptions
)
| _ ->
let! paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn)
Expand All @@ -688,7 +696,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
documentationBuilder,
sourceText,
caretPosition,
triggerTypedChar
triggerTypedChar,
editorOptions
)
}

Expand Down Expand Up @@ -722,7 +731,8 @@ type internal FSharpSignatureHelpProvider [<ImportingConstructor>] (serviceProvi
documentationBuilder,
position,
triggerTypedChar,
possibleCurrentSignatureHelpSessionKind
possibleCurrentSignatureHelpSessionKind,
editorOptions
)

match signatureHelpDataOpt with
Expand Down
71 changes: 57 additions & 14 deletions vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ type internal IDocumentationBuilder =
processedXml: string *
showExceptions: bool *
showParameters: bool *
showRemarks: bool *
paramName: string option ->
unit

Expand All @@ -111,6 +112,7 @@ type internal IDocumentationBuilder =
signature: string *
showExceptions: bool *
showParameters: bool *
showRemarks: bool *
paramName: string option ->
unit

Expand Down Expand Up @@ -165,6 +167,7 @@ module internal XmlDocumentation =
| "typeref" ->
for attr in el.Attributes() do
WriteAttribute collector attr "name" (tagParameter >> collector.Add)
| "br" -> AppendHardLine collector
| _ -> WriteNodes collector (el.Nodes())
| _ -> ()

Expand Down Expand Up @@ -210,13 +213,34 @@ module internal XmlDocumentation =
with _ ->
None

member _.CollectSummary(collector: ITaggedTextCollector) =
member _.CollectSummary(collector: ITaggedTextCollector, showRemarks) =
match Seq.tryHead (doc.Descendants(XName.op_Implicit "summary")) with
| None -> ()
| Some el ->
EnsureHardLine collector
WriteElement collector el

match Seq.tryHead (doc.Descendants(XName.op_Implicit "returns")) with
| None -> ()
| Some el ->
AppendHardLine collector
AppendHardLine collector
AppendOnNewLine collector (SR.ReturnsHeader())
AppendHardLine collector
collector.Add(tagSpace " ")
WriteElement collector el

if showRemarks then
match Seq.tryHead (doc.Descendants(XName.op_Implicit "remarks")) with
psfinaki marked this conversation as resolved.
Show resolved Hide resolved
| None -> ()
| Some el ->
AppendHardLine collector
AppendHardLine collector
AppendOnNewLine collector (SR.RemarksHeader())
AppendHardLine collector
collector.Add(tagSpace " ")
WriteElement collector el

member this.CollectParameter(collector: ITaggedTextCollector, paramName: string) =
match tryFindParameter paramName with
| None -> ()
Expand Down Expand Up @@ -294,11 +318,12 @@ module internal XmlDocumentation =
exnCollector: ITaggedTextCollector,
xmlDocReader: XmlDocReader,
showExceptions,
showParameters
showParameters,
showRemarks
) =
AppendHardLine xmlCollector
xmlCollector.StartXMLDoc()
xmlDocReader.CollectSummary(xmlCollector)
xmlDocReader.CollectSummary(xmlCollector, showRemarks)

if (showParameters) then
xmlDocReader.CollectParameters xmlCollector
Expand All @@ -315,13 +340,14 @@ module internal XmlDocumentation =
processedXml,
showExceptions,
showParameters,
showRemarks,
paramName
) =
match XmlDocReader.TryCreate processedXml with
| Some xmlDocReader ->
match paramName with
| Some paramName -> xmlDocReader.CollectParameter(xmlCollector, paramName)
| None -> AppendMemberData(xmlCollector, exnCollector, xmlDocReader, showExceptions, showParameters)
| None -> AppendMemberData(xmlCollector, exnCollector, xmlDocReader, showExceptions, showParameters, showRemarks)
| None -> ()

/// Append Xml documentation contents into the StringBuilder
Expand All @@ -333,14 +359,15 @@ module internal XmlDocumentation =
signature: string,
showExceptions: bool,
showParameters: bool,
showRemarks,
paramName: string option
) =
try
match GetMemberIndexOfAssembly(fileName) with
| Some(index) ->
let _, idx = index.ParseMemberSignature(signature)
let ok, idx = index.ParseMemberSignature(signature)

if idx <> 0u then
if Com.Succeeded(ok) then
let ok, xml = index.GetMemberXML(idx)

if Com.Succeeded(ok) then
Expand All @@ -351,6 +378,7 @@ module internal XmlDocumentation =
xml,
showExceptions,
showParameters,
showRemarks,
paramName
)
| None -> ()
Expand All @@ -367,6 +395,7 @@ module internal XmlDocumentation =
xml,
showExceptions,
showParameters,
showRemarks,
paramName
) =
match xml with
Expand All @@ -379,6 +408,7 @@ module internal XmlDocumentation =
signature,
showExceptions,
showParameters,
showRemarks,
paramName
)
| FSharpXmlDoc.FromXmlText(xmlDoc) ->
Expand All @@ -391,6 +421,7 @@ module internal XmlDocumentation =
processedXml,
showExceptions,
showParameters,
showRemarks,
paramName
)

Expand All @@ -417,7 +448,13 @@ module internal XmlDocumentation =
OverLoadsLimit = 5
}

let BuildSingleTipText (documentationProvider: IDocumentationBuilder, dataTipElement: ToolTipElement, limits: LineLimits) =
let BuildSingleTipText
(
documentationProvider: IDocumentationBuilder,
dataTipElement: ToolTipElement,
limits: LineLimits,
showRemarks: bool
) =

let {
LineLimit = lineLimit
Expand Down Expand Up @@ -481,7 +518,7 @@ module internal XmlDocumentation =
AppendHardLine usageCollector
r |> Seq.iter usageCollector.Add)

AppendXmlComment(documentationProvider, xmlCollector, exnCollector, item0.XmlDoc, true, false, item0.ParamName)
AppendXmlComment(documentationProvider, xmlCollector, exnCollector, item0.XmlDoc, true, false, showRemarks, item0.ParamName)

ProcessGenericParameters item0.TypeMapping

Expand All @@ -505,7 +542,8 @@ module internal XmlDocumentation =
exnCollector,
showText,
showExceptions,
showParameters
showParameters,
showRemarks
) =
let textCollector: ITaggedTextCollector =
TextSanitizingCollector(textCollector, lineLimit = 45) :> _
Expand Down Expand Up @@ -590,6 +628,7 @@ module internal XmlDocumentation =
item0.XmlDoc,
showExceptions,
showParameters,
showRemarks,
item0.ParamName
)

Expand All @@ -614,7 +653,8 @@ module internal XmlDocumentation =
typeParameterMapCollector,
usageCollector,
exnCollector,
ToolTipText(dataTipText)
ToolTipText(dataTipText),
showRemarks
) =
BuildTipText(
documentationProvider,
Expand All @@ -626,10 +666,11 @@ module internal XmlDocumentation =
exnCollector,
true,
true,
false
false,
showRemarks
)

let BuildMethodOverloadTipText (documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText), showParams) =
let BuildMethodOverloadTipText (documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText), showParams, showRemarks) =
BuildTipText(
documentationProvider,
dataTipText,
Expand All @@ -640,17 +681,19 @@ module internal XmlDocumentation =
ignore,
false,
false,
showParams
showParams,
showRemarks
)

let BuildMethodParamText (documentationProvider, xmlCollector, xml, paramName) =
let BuildMethodParamText (documentationProvider, xmlCollector, xml, paramName, showRemarks) =
AppendXmlComment(
documentationProvider,
TextSanitizingCollector(xmlCollector),
TextSanitizingCollector(xmlCollector),
xml,
false,
true,
showRemarks,
Some paramName
)

Expand Down
Loading