Показать документацию для функции в ФСИ - PullRequest
0 голосов
/ 18 декабря 2018

Есть ли способ заставить fsi напечатать документацию для функции?

Я могу получить тип, просто оценив функцию как значение, но я хотел бы знать, что говорят документы XML, еслиони существуют.

1 Ответ

0 голосов
/ 19 декабря 2018

Без варианта использования у меня есть 2 предложения.Если это просто помощь, используйте файл FSX.

Если вы действительно хотите распечатать документы в FSI, вы можете использовать следующий код для распечатки документов для участника.Поскольку xml-комментарии не хранятся в dll, этот код проверяет, существует ли xml-документ в расположении dll, и загружает его, если это так.

#r "packages/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll"

open System.IO
open System.Xml
open System.Reflection

let loadXml (path:string) =
  if (File.Exists(path)) then 
    let xml = new XmlDocument()
    xml.Load(path)
    Some xml
  else None

let xmlForMember (maybeXml:XmlDocument option) (mi:MemberInfo) =
  let path = sprintf "M:%s.%s" mi.DeclaringType.FullName mi.Name
  match maybeXml with
  | None -> None
  | Some xml -> xml.SelectSingleNode("//member[starts-with(@name, '" + path + "')]") |> Some

let docFrom (node:XmlNode option) =
  match node with
  | None -> "No docs available"
  | Some n -> n.InnerXml

Использование будет примерно таким, но вы могли быаккуратно и упакуйте его для своих нужд:

let t = typedefof<Newtonsoft.Json.JsonSerializer>
let assembly = t.Assembly
let dllPath = assembly.Location
printfn "Assembly location: %s" dllPath
let expectedXmlPath = Path.ChangeExtension(dllPath, ".xml")
printfn "Expected xml: %s" expectedXmlPath
let xmlDoc = expectedXmlPath |> loadXml
let mi = t.GetMember("Create").[0]

let docNode = mi |> xmlForMember xmlDoc

docNode |> docFrom |> printfn "%s"

Надеюсь, это поможет вам начать.

...