From a5157e353fbeee97e16014f49bfcccdfe9ae723e Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 12 Sep 2020 16:57:04 +0100 Subject: [PATCH 01/26] optionally check xml doc comments for xml validity --- src/fsharp/CompileOps.fs | 1 + src/fsharp/FSComp.txt | 1 + src/fsharp/FSharp.Core/FSharp.Core.fsproj | 2 +- src/fsharp/ParseHelpers.fs | 4 +- src/fsharp/XmlDoc.fs | 68 ++++++++++++++++------- src/fsharp/fsc.fs | 7 +-- src/fsharp/lex.fsl | 12 ++-- 7 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 5585ae6a6f9..63dba3fed83 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -404,6 +404,7 @@ let warningOn err level specificWarnOn = | 1182 -> false // chkUnusedValue - off by default | 3218 -> false // ArgumentsInSigAndImplMismatch - off by default | 3180 -> false // abImplicitHeapAllocation - off by default + | 3390 -> false // xmlDocBadlyFormed - off by default | _ -> level >= GetWarningLevel err let SplitRelatedDiagnostics(err: PhasedDiagnostic) : PhasedDiagnostic * PhasedDiagnostic list = diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index b5d1d9806ec..9387cfc888f 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1540,3 +1540,4 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3382,parsEmptyFillInInterpolatedString,"Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected." 3383,lexRBraceInInterpolatedString,"A '}}' character must be escaped (by doubling) in an interpolated string." #3501 "This construct is not supported by your version of the F# compiler" CompilerMessage(ExperimentalAttributeMessages.NotSupportedYet, 3501, IsError=true) +3390,xmlDocBadlyFormed,"This XML comment is invalid XML: '%s'" diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 8eb2bb01a74..28f398848e0 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -9,7 +9,7 @@ true $(DefineConstants);FSHARP_CORE BUILDING_WITH_LKG;$(DefineConstants) - $(OtherFlags) --warnon:1182 --compiling-fslib --compiling-fslib-40 --maxerrors:20 --extraoptimizationloops:1 --nowarn:57 + $(OtherFlags) --warnon:1182 --warnon:3390 --compiling-fslib --compiling-fslib-40 --maxerrors:20 --extraoptimizationloops:1 --nowarn:57 true true diff --git a/src/fsharp/ParseHelpers.fs b/src/fsharp/ParseHelpers.fs index 33e7872b186..6a94962108a 100644 --- a/src/fsharp/ParseHelpers.fs +++ b/src/fsharp/ParseHelpers.fs @@ -85,7 +85,7 @@ module LexbufLocalXmlDocStore = lexbuf.BufferLocalStore.[xmlDocKey] <- box (XmlDocCollector()) /// Called from the lexer to save a single line of XML doc comment. - let internal SaveXmlDocLine (lexbuf: Lexbuf, lineText, pos) = + let internal SaveXmlDocLine (lexbuf: Lexbuf, lineText, range: range) = let collector = match lexbuf.BufferLocalStore.TryGetValue xmlDocKey with | true, collector -> collector @@ -94,7 +94,7 @@ module LexbufLocalXmlDocStore = lexbuf.BufferLocalStore.[xmlDocKey] <- collector collector let collector = unbox(collector) - collector.AddXmlDocLine(lineText, pos) + collector.AddXmlDocLine(lineText, range) /// Called from the parser each time we parse a construct that marks the end of an XML doc comment range, /// e.g. a 'type' declaration. The markerRange is the range of the keyword that delimits the construct. diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index dc183affeb6..482f3688abe 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -2,12 +2,16 @@ module public FSharp.Compiler.XmlDoc +open System +open System.Xml.Linq +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Lib open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Range -/// Represents the final form of collected XmlDoc lines +/// Represents collected XmlDoc lines type XmlDoc = - | XmlDoc of string[] + | XmlDoc of (string * range)[] static member Empty = XmlDocStatics.Empty @@ -15,24 +19,39 @@ type XmlDoc = static member Merge (XmlDoc lines) (XmlDoc lines') = XmlDoc (Array.append lines lines') + member x.Range = + let (XmlDoc lines) = x + match lines with + | [| |] -> Range.range0 + | _ -> Array.reduce Range.unionRanges (Array.map snd lines) + /// This code runs for .XML generation and thus influences cross-project xmldoc tooltips; for within-project tooltips, /// see XmlDocumentation.fs in the language service static member Process (XmlDoc lines) = - let rec processLines (lines: string list) = + let rec processLines (lines: (string * range) list) = match lines with | [] -> [] - | (lineA :: rest) as lines -> + | ((lineA, m) :: rest) as lines -> let lineAT = lineA.TrimStart([|' '|]) if lineAT = "" then processLines rest else if lineAT.StartsWithOrdinal("<") then lines - else [""] @ - (lines |> List.map (fun line -> Microsoft.FSharp.Core.XmlAdapters.escape line)) @ - [""] + else [("", m)] @ + (lines |> List.map (map1Of2 Microsoft.FSharp.Core.XmlAdapters.escape)) @ + [("", m)] let lines = processLines (Array.toList lines) if isNil lines then XmlDoc.Empty else XmlDoc (Array.ofList lines) + member x.GetXml() = + match XmlDoc.Process x with + | XmlDoc [| |] -> "" + | XmlDoc strs -> + strs + |> Array.toList + |> List.map fst + |> String.concat Environment.NewLine + // Discriminated unions can't contain statics, so we use a separate type and XmlDocStatics() = @@ -42,14 +61,14 @@ and XmlDocStatics() = /// Used to collect XML documentation during lexing and parsing. type XmlDocCollector() = - let mutable savedLines = new ResizeArray<(string * pos)>() + let mutable savedLines = new ResizeArray<(string * range)>() let mutable savedGrabPoints = new ResizeArray() let posCompare p1 p2 = if posGeq p1 p2 then 1 else if posEq p1 p2 then 0 else -1 let savedGrabPointsAsArray = lazy (savedGrabPoints.ToArray() |> Array.sortWith posCompare) let savedLinesAsArray = - lazy (savedLines.ToArray() |> Array.sortWith (fun (_, p1) (_, p2) -> posCompare p1 p2)) + lazy (savedLines.ToArray() |> Array.sortWith (fun (_, p1) (_, p2) -> posCompare p1.End p2.End)) let check() = // can't add more XmlDoc elements to XmlDocCollector after extracting first XmlDoc from the overall results @@ -59,15 +78,15 @@ type XmlDocCollector() = check() savedGrabPoints.Add pos - member x.AddXmlDocLine(line, pos) = + member x.AddXmlDocLine(line, range) = check() - savedLines.Add(line, pos) + savedLines.Add(line, range) member x.LinesBefore grabPointPos = try let lines = savedLinesAsArray.Force() let grabPoints = savedGrabPointsAsArray.Force() - let firstLineIndexAfterGrabPoint = Array.findFirstIndexWhereTrue lines (fun (_, pos) -> posGeq pos grabPointPos) + let firstLineIndexAfterGrabPoint = Array.findFirstIndexWhereTrue lines (fun (_, m) -> posGeq m.End grabPointPos) let grabPointIndex = Array.findFirstIndexWhereTrue grabPoints (fun pos -> posGeq pos grabPointPos) assert (posEq grabPoints.[grabPointIndex] grabPointPos) let firstLineIndexAfterPrevGrabPoint = @@ -75,10 +94,10 @@ type XmlDocCollector() = 0 else let prevGrabPointPos = grabPoints.[grabPointIndex-1] - Array.findFirstIndexWhereTrue lines (fun (_, pos) -> posGeq pos prevGrabPointPos) + Array.findFirstIndexWhereTrue lines (fun (_, m) -> posGeq m.End prevGrabPointPos) let lines = lines.[firstLineIndexAfterPrevGrabPoint..firstLineIndexAfterGrabPoint-1] - lines |> Array.map fst + lines with e -> [| |] @@ -89,13 +108,20 @@ type PreXmlDoc = | PreXmlDocEmpty member x.ToXmlDoc() = - match x with - | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc()) (b.ToXmlDoc()) - | PreXmlDocEmpty -> XmlDoc.Empty - | PreXmlDoc (pos, collector) -> - let lines = collector.LinesBefore pos - if lines.Length = 0 then XmlDoc.Empty - else XmlDoc lines + let doc = + match x with + | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc()) (b.ToXmlDoc()) + | PreXmlDocEmpty -> XmlDoc.Empty + | PreXmlDoc (pos, collector) -> + let lines = collector.LinesBefore pos + if lines.Length = 0 then XmlDoc.Empty + else XmlDoc lines + if doc.NonEmpty then + try XDocument.Load(doc.GetXml()) |> ignore + with e -> + warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) + doc + static member CreateFromGrabPoint(collector: XmlDocCollector, grabPointPos) = collector.AddGrabPoint grabPointPos diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 68e768acbf6..959f825536d 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -328,11 +328,6 @@ module InterfaceFileWriter = module XmlDocWriter = - let getDoc xmlDoc = - match XmlDoc.Process xmlDoc with - | XmlDoc [| |] -> "" - | XmlDoc strs -> strs |> Array.toList |> String.concat Environment.NewLine - let hasDoc xmlDoc = // No need to process the xml doc - just need to know if there's anything there match xmlDoc with @@ -389,7 +384,7 @@ module XmlDocWriter = let mutable members = [] let addMember id xmlDoc = if hasDoc xmlDoc then - let doc = getDoc xmlDoc + let doc = xmlDoc.GetXml() members <- (id, doc) :: members let doVal (v: Val) = addMember v.XmlDocSig v.XmlDoc let doUnionCase (uc: UnionCase) = addMember uc.XmlDocSig uc.XmlDoc diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index 5322a3ddf48..da4e2b7be5b 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -166,15 +166,17 @@ let startString args (lexbuf: UnicodeLexing.Lexbuf) = // Utility functions for processing XML documentation -let trySaveXmlDoc lexbuf (buff:option) = +let trySaveXmlDoc lexbuf (buff: (range * StringBuilder) option) = match buff with | None -> () - | Some sb -> LexbufLocalXmlDocStore.SaveXmlDocLine (lexbuf, sb.ToString(), posOfLexPosition lexbuf.StartPos) + | Some (start, sb) -> + let xmlCommentLineRange = mkFileIndexRange start.FileIndex start.StartPos (posOfLexPosition lexbuf.StartPos) + LexbufLocalXmlDocStore.SaveXmlDocLine (lexbuf, sb.ToString(), xmlCommentLineRange) -let tryAppendXmlDoc (buff:option) (s:string) = +let tryAppendXmlDoc (buff: (range * StringBuilder) option) (s:string) = match buff with | None -> () - | Some sb -> ignore(sb.Append s) + | Some (_, sb) -> ignore(sb.Append s) // Utilities for parsing #if/#else/#endif @@ -660,7 +662,7 @@ rule token args skip = parse let doc = lexemeTrimLeft lexbuf 3 let sb = (new StringBuilder(100)).Append(doc) if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) - else singleLineComment (Some sb,1,m,args) skip lexbuf } + else singleLineComment (Some (m.StartPos, sb),1,m,args) skip lexbuf } | "//" op_char* { // Need to read all operator symbols too, otherwise it might be parsed by a rule below From 4b044caa71b9ff4f15516bf32d17f7cd158b21dd Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 12 Sep 2020 18:23:07 +0100 Subject: [PATCH 02/26] check xml docs --- src/fsharp/FSComp.txt | 4 +- src/fsharp/TypedTree.fs | 4 +- src/fsharp/TypedTreePickle.fs | 4 +- src/fsharp/XmlDoc.fs | 37 ++++++++++++-- src/fsharp/fsc.fs | 2 +- src/fsharp/infos.fs | 12 +++-- src/fsharp/lex.fsl | 6 +-- src/fsharp/service/ServiceXmlDocParser.fs | 8 ++- src/fsharp/symbols/SymbolHelpers.fs | 9 ++-- src/fsharp/symbols/Symbols.fs | 3 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.de.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.es.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.fr.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.it.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.ja.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.ko.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.pl.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.ru.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.tr.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 15 ++++++ src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 15 ++++++ .../FSharp.Compiler.ComponentTests.fsproj | 5 ++ .../Language/XmlComments.fs | 50 +++++++++++++++++++ tests/FSharp.Test.Utilities/Compiler.fs | 7 ++- 26 files changed, 318 insertions(+), 28 deletions(-) create mode 100644 tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 9387cfc888f..2ad9d2c35ba 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1540,4 +1540,6 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3382,parsEmptyFillInInterpolatedString,"Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected." 3383,lexRBraceInInterpolatedString,"A '}}' character must be escaped (by doubling) in an interpolated string." #3501 "This construct is not supported by your version of the F# compiler" CompilerMessage(ExperimentalAttributeMessages.NotSupportedYet, 3501, IsError=true) -3390,xmlDocBadlyFormed,"This XML comment is invalid XML: '%s'" +3390,xmlDocBadlyFormed,"This XML comment is invalid: '%s'" +3390,xmlDocMissingParameterName,"This XML comment is invalid: missing parameter name" +3390,xmlDocInvalidParameterName,"This XML comment is invalid: invalid parameter reference '%s'" diff --git a/src/fsharp/TypedTree.fs b/src/fsharp/TypedTree.fs index 46019fae45b..c0c82ded20e 100644 --- a/src/fsharp/TypedTree.fs +++ b/src/fsharp/TypedTree.fs @@ -745,7 +745,9 @@ type Entity = member x.XmlDoc = #if !NO_EXTENSIONTYPING match x.TypeReprInfo with - | TProvidedTypeExtensionPoint info -> XmlDoc (info.ProvidedType.PUntaintNoFailure(fun st -> (st :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(info.ProvidedType.TypeProvider.PUntaintNoFailure id))) + | TProvidedTypeExtensionPoint info -> + let lines = info.ProvidedType.PUntaintNoFailure(fun st -> (st :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(info.ProvidedType.TypeProvider.PUntaintNoFailure id)) + XmlDoc (lines |> Array.map (fun line -> line, x.DefinitionRange)) | _ -> #endif match x.entity_opt_data with diff --git a/src/fsharp/TypedTreePickle.fs b/src/fsharp/TypedTreePickle.fs index 837021b92e2..6a0deb51f4a 100644 --- a/src/fsharp/TypedTreePickle.fs +++ b/src/fsharp/TypedTreePickle.fs @@ -1345,7 +1345,7 @@ let p_range (x: range) st = let p_dummy_range : range pickler = fun _x _st -> () let p_ident (x: Ident) st = p_tup2 p_string p_range (x.idText, x.idRange) st -let p_xmldoc (XmlDoc x) st = p_array p_string x st +let p_xmldoc (XmlDoc lines) st = p_array p_string (Array.map fst lines) st let u_pos st = let a = u_int st in let b = u_int st in mkPos a b let u_range st = let a = u_string st in let b = u_pos st in let c = u_pos st in mkRange a b c @@ -1353,7 +1353,7 @@ let u_range st = let a = u_string st in let b = u_pos st in let c = u_pos st in // Most ranges (e.g. on optimization expressions) can be elided from stored data let u_dummy_range : range unpickler = fun _st -> range0 let u_ident st = let a = u_string st in let b = u_range st in ident(a, b) -let u_xmldoc st = XmlDoc (u_array u_string st) +let u_xmldoc st = XmlDoc (u_array u_string st |> Array.map (fun line -> line, range0)) let p_local_item_ref ctxt tab st = p_osgn_ref ctxt tab st diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 482f3688abe..951b1395b70 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -15,9 +15,14 @@ type XmlDoc = static member Empty = XmlDocStatics.Empty - member x.NonEmpty = (let (XmlDoc lines) = x in lines.Length <> 0) + member x.IsEmpty = + let (XmlDoc lines) = x + lines |> Array.forall (fst >> String.IsNullOrWhiteSpace) + + member x.NonEmpty = not x.IsEmpty - static member Merge (XmlDoc lines) (XmlDoc lines') = XmlDoc (Array.append lines lines') + static member Merge (XmlDoc lines) (XmlDoc lines') = + XmlDoc (Array.append lines lines') member x.Range = let (XmlDoc lines) = x @@ -43,7 +48,7 @@ type XmlDoc = if isNil lines then XmlDoc.Empty else XmlDoc (Array.ofList lines) - member x.GetXml() = + member x.GetXmlText() = match XmlDoc.Process x with | XmlDoc [| |] -> "" | XmlDoc strs -> @@ -117,9 +122,31 @@ type PreXmlDoc = if lines.Length = 0 then XmlDoc.Empty else XmlDoc lines if doc.NonEmpty then - try XDocument.Load(doc.GetXml()) |> ignore + try + // We must wrap with in order to have only one root element + let xml = XDocument.Parse("\n"+doc.GetXmlText()+"\n", LoadOptions.SetLineInfo) + + // Note, the parameter names are curently only checked for internal + // consistency, so parameter references must match an XML doc parameter name. + let paramNames = + [ for p in xml.Elements(XName.op_Implicit "param") do + match p.Attribute(XName.op_Implicit "name") with + | null -> + warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) + | nm -> + nm.Value ] + + for pref in xml.Descendants(XName.op_Implicit "paramref") do + match pref.Attribute(XName.op_Implicit "name") with + | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) + | attr -> + let nm = attr.Value + if not (paramNames |> List.contains nm) then + warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) + xml |> ignore + with e -> - warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) + warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) doc diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 959f825536d..46f82dbff6d 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -384,7 +384,7 @@ module XmlDocWriter = let mutable members = [] let addMember id xmlDoc = if hasDoc xmlDoc then - let doc = xmlDoc.GetXml() + let doc = xmlDoc.GetXmlText() members <- (id, doc) :: members let doVal (v: Val) = addMember v.XmlDocSig v.XmlDoc let doUnionCase (uc: UnionCase) = addMember uc.XmlDocSig uc.XmlDoc diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 8b909c41829..bf70d34431a 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -1064,7 +1064,9 @@ type MethInfo = | DefaultStructCtor _ -> XmlDoc.Empty #if !NO_EXTENSIONTYPING | ProvidedMeth(_, mi, _, m)-> - XmlDoc (mi.PUntaint((fun mix -> (mix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(mi.TypeProvider.PUntaintNoFailure id)), m)) + let lines = mi.PUntaint((fun mix -> (mix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(mi.TypeProvider.PUntaintNoFailure id)), m) + let lines = lines |> Array.map (fun line -> line, m) + XmlDoc lines #endif /// Try to get an arbitrary F# ValRef associated with the member. This is to determine if the member is virtual, amongst other things. @@ -2162,7 +2164,9 @@ type PropInfo = | FSProp(_, _, None, None) -> failwith "unreachable" #if !NO_EXTENSIONTYPING | ProvidedProp(_, pi, m) -> - XmlDoc (pi.PUntaint((fun pix -> (pix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(pi.TypeProvider.PUntaintNoFailure id)), m)) + let lines = pi.PUntaint((fun pix -> (pix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(pi.TypeProvider.PUntaintNoFailure id)), m) + let lines = lines |> Array.map (fun line -> line, m) + XmlDoc lines #endif /// Get the TcGlobals associated with the object @@ -2416,7 +2420,9 @@ type EventInfo = | FSEvent (_, p, _, _) -> p.XmlDoc #if !NO_EXTENSIONTYPING | ProvidedEvent (_, ei, m) -> - XmlDoc (ei.PUntaint((fun eix -> (eix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(ei.TypeProvider.PUntaintNoFailure id)), m)) + let lines = ei.PUntaint((fun eix -> (eix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(ei.TypeProvider.PUntaintNoFailure id)), m) + let lines = lines |> Array.map (fun line -> line, m) + XmlDoc lines #endif /// Get the logical name of the event. diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index da4e2b7be5b..e46718a3d1f 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -166,11 +166,11 @@ let startString args (lexbuf: UnicodeLexing.Lexbuf) = // Utility functions for processing XML documentation -let trySaveXmlDoc lexbuf (buff: (range * StringBuilder) option) = +let trySaveXmlDoc (lexbuf: LexBuffer) (buff: (range * StringBuilder) option) = match buff with | None -> () | Some (start, sb) -> - let xmlCommentLineRange = mkFileIndexRange start.FileIndex start.StartPos (posOfLexPosition lexbuf.StartPos) + let xmlCommentLineRange = mkFileIndexRange start.FileIndex start.Start (posOfLexPosition lexbuf.StartPos) LexbufLocalXmlDocStore.SaveXmlDocLine (lexbuf, sb.ToString(), xmlCommentLineRange) let tryAppendXmlDoc (buff: (range * StringBuilder) option) (s:string) = @@ -662,7 +662,7 @@ rule token args skip = parse let doc = lexemeTrimLeft lexbuf 3 let sb = (new StringBuilder(100)).Append(doc) if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) - else singleLineComment (Some (m.StartPos, sb),1,m,args) skip lexbuf } + else singleLineComment (Some (m, sb),1,m,args) skip lexbuf } | "//" op_char* { // Need to read all operator symbols too, otherwise it might be parsed by a rule below diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index 01073ec599a..a13edf537cf 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -49,12 +49,10 @@ module XmlDocParsing = i let isEmptyXmlDoc (preXmlDoc: PreXmlDoc) = - match preXmlDoc.ToXmlDoc() with - | XmlDoc [||] -> true - | XmlDoc [|x|] when x.Trim() = "" -> true - | _ -> false + preXmlDoc.ToXmlDoc().IsEmpty - let rec getXmlDocablesSynModuleDecl = function + let rec getXmlDocablesSynModuleDecl decl = + match decl with | SynModuleDecl.NestedModule(_, _, synModuleDecls, _, _) -> (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) | SynModuleDecl.Let(_, synBindingList, range) -> diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index bbe3e5b2de8..a9d147873d1 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -662,13 +662,14 @@ module internal SymbolHelpers = let GetXmlCommentForItemAux (xmlDoc: XmlDoc option) (infoReader: InfoReader) m d = let result = match xmlDoc with - | None | Some (XmlDoc [| |]) -> "" - | Some (XmlDoc l) -> + | None -> "" + | Some xmlDoc when xmlDoc.IsEmpty -> "" + | Some (XmlDoc lines) -> bufs (fun os -> bprintf os "\n" - l |> Array.iter (fun (s: string) -> + lines |> Array.iter (fun (line, _) -> // Note: this code runs for local/within-project xmldoc tooltips, but not for cross-project or .XML - bprintf os "\n%s" s)) + bprintf os "\n%s" line)) if String.IsNullOrEmpty result then GetXmlDocHelpSigOfItemForLookup infoReader m d diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 4fe8986ec97..d0bb6c2aa13 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -78,7 +78,8 @@ module Impl = let makeReadOnlyCollection (arr: seq<'T>) = System.Collections.ObjectModel.ReadOnlyCollection<_>(Seq.toArray arr) :> IList<_> - let makeXmlDoc (XmlDoc x) = makeReadOnlyCollection x + let makeXmlDoc (XmlDoc lines) = + makeReadOnlyCollection (Array.map fst lines) let rescopeEntity optViewedCcu (entity: Entity) = match optViewedCcu with diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index ee4520e2f46..3dc155020cc 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -522,6 +522,21 @@ Pro odkazy na rozhraní .NET používejte referenční sestavení, pokud jsou k dispozici (ve výchozím nastavení povolené). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Zvažte použití parametru yield! namísto yield. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 084d3c4031e..292f6c66669 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -522,6 +522,21 @@ Verweisassemblys für .NET Framework-Verweise verwenden, wenn verfügbar (standardmäßig aktiviert). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Verwenden Sie ggf. "yield!" anstelle von "yield". diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 83ba01bb5a5..c7e00ed68b6 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -522,6 +522,21 @@ Use ensamblados de referencia para las referencias de .NET Framework cuando estén disponibles (habilitado de forma predeterminada). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Considere la posibilidad de usar "yield!" en lugar de "yield". diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 5e2edeccf43..c64e4e544a8 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -522,6 +522,21 @@ Utilisez des assemblys de référence pour les références .NET Framework quand ils sont disponibles (activé par défaut). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Utilisez 'yield!' à la place de 'yield'. diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index d870e6feaac..dbd6a9eada2 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -522,6 +522,21 @@ Usa gli assembly di riferimento per i riferimenti a .NET Framework quando disponibili (abilitato per impostazione predefinita). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Provare a usare 'yield!' invece di 'yield'. diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 634025e3144..767dd75391e 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -522,6 +522,21 @@ 使用可能な場合は、.NET Framework リファレンスの参照アセンブリを使用します (既定で有効)。 + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. 'yield' の代わりに 'yield!' を使うことを検討してください。 diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 9684a8b6077..a7ba88f7d29 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -522,6 +522,21 @@ 기본적으로 활성화되는 참조 어셈블리를 .NET Framework 참조에 사용합니다(사용 가능한 경우). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. 'yield'가 아닌 'yield!'를 사용하세요. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 77b9a86179f..8b1a2b6cd59 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -522,6 +522,21 @@ Użyj zestawów odwołań dla odwołań do programu .NET Framework, gdy są dostępne (domyślnie włączone). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Rozważ użycie polecenia „yield!” zamiast „yield”. diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 2bb3ed9fff6..5648c5a32b7 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -522,6 +522,21 @@ Use assemblies de referência para referências do .NET Framework quando disponível (habilitado por padrão). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Considere usar 'yield!' em vez de 'yield'. diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 80477df0542..13b5b7cee10 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -522,6 +522,21 @@ Использовать базовые сборки для ссылок на платформу .NET, если базовые сборки доступны (включено по умолчанию). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. Рекомендуется использовать "yield!" вместо "yield". diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 86a7308ffbd..370df29dc88 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -522,6 +522,21 @@ Kullanılabilir olduğunda, .NET Framework başvuruları için başvuru bütünleştirilmiş kodlarını kullanın (Varsayılan olarak etkindir). + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. 'yield' yerine 'yield!' kullanmayı deneyin. diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 7b7b5e75ac9..a1a8e6f59f4 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -522,6 +522,21 @@ 如果可用,请对 .NET Framework 引用使用引用程序集(默认启用)。 + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. 考虑使用 "yield!",而非 "yield"。 diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 6db7230450c..8fd91081031 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -522,6 +522,21 @@ 請在可行的情況下使用適用於 .NET 架構參考的參考組件 (預設會啟用)。 + + This XML comment is invalid: '{0}' + This XML comment is invalid: '{0}' + + + + This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: invalid parameter reference '{0}' + + + + This XML comment is invalid: missing parameter name + This XML comment is invalid: missing parameter name + + Consider using 'yield!' instead of 'yield'. 請考慮使用 'yield!' 而不使用 'yield'。 diff --git a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj index f97a823591c..27f4cb4c6dd 100644 --- a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj +++ b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj @@ -40,6 +40,7 @@ + @@ -54,4 +55,8 @@ + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs new file mode 100644 index 00000000000..8881d1a4712 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.XmlComments + +open Xunit +open FSharp.Test.Utilities.Compiler + +module XmlCommentChecking = + + [] + let ``invalid XML is reported`` () = + Fsx""" +/// +let x = 1 + +/// +/// Yo +/// Yo +module M = + /// < + let y = 1 + + """ + |> withXmlCommentChecking + |> ignoreWarnings // means "don't treat warnings as errors" + |> compile + |> shouldSucceed + |> withDiagnostics + [ (Warning 3390, Line 2, Col 1, Line 2, Col 14, + "This XML comment is invalid: 'The 'summary' start tag on line 2 position 3 does not match the end tag of 'doc'. Line 3, position 3.'"); + (Warning 3390, Line 5, Col 1, Line 7, Col 21, + """This XML comment is invalid: 'The 'remark' start tag on line 3 position 3 does not match the end tag of 'rem'. Line 3, position 14.'"""); + (Warning 3390, Line 9, Col 5, Line 9, Col 20, + "This XML comment is invalid: 'Name cannot begin with the '\n' character, hexadecimal value 0x0A. Line 2, position 13.'") + ] + [] + let ``invalid parameter reference is reported`` () = + Fsx""" + /// Return + /// the parameter + let f a = a + """ + |> withXmlCommentChecking + |> ignoreWarnings // means "don't treat warnings as errors" + |> compile + |> shouldSucceed + |> withDiagnostics + [ (Warning 3390, Line 2, Col 5, Line 3, Col 48, + "This XML comment is invalid: invalid parameter reference 'b'"); + ] diff --git a/tests/FSharp.Test.Utilities/Compiler.fs b/tests/FSharp.Test.Utilities/Compiler.fs index f63bf89e32b..8080a23b599 100644 --- a/tests/FSharp.Test.Utilities/Compiler.fs +++ b/tests/FSharp.Test.Utilities/Compiler.fs @@ -178,7 +178,7 @@ module rec Compiler = | _ -> failwith message let withOptions (options: string list) (cUnit: CompilationUnit) : CompilationUnit = - withOptionsHelper options "withOptions is only supported n F#" cUnit + withOptionsHelper options "withOptions is only supported for F#" cUnit let withErrorRanges (cUnit: CompilationUnit) : CompilationUnit = withOptionsHelper [ "--test:ErrorRanges" ] "withErrorRanges is only supported on F#" cUnit @@ -195,6 +195,9 @@ module rec Compiler = let withLangVersionPreview (cUnit: CompilationUnit) : CompilationUnit = withOptionsHelper [ "--langversion:preview" ] "withLangVersionPreview is only supported on F#" cUnit + let withXmlCommentChecking (cUnit: CompilationUnit) : CompilationUnit = + withOptionsHelper [ "--warnon:3390" ] "withXmlCommentChecking is only supported for F#" cUnit + let asLibrary (cUnit: CompilationUnit) : CompilationUnit = match cUnit with | FS fs -> FS { fs with OutputType = CompileOutput.Library } @@ -573,7 +576,7 @@ module rec Compiler = let inline checkEqual k a b = if a <> b then - Assert.AreEqual(a, b, sprintf "%s: Mismatch in %s, expected '%A', got '%A'.\nAll errors:\n%A" what k a b errors) + Assert.AreEqual(a, b, sprintf "%s: Mismatch in %s, expected '%A', got '%A'.\nAll errors:\n%A\nExpected errors:\n%A" what k a b errors expected) // TODO: Check all "categories", collect all results and print alltogether. checkEqual "Errors count" expected.Length errors.Length From 02f5f285febb15c2770f4cab389a978b5a015037 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 12 Sep 2020 19:09:47 +0100 Subject: [PATCH 03/26] check xml docs --- src/fsharp/FSharp.Core/prim-types.fs | 2 +- src/fsharp/XmlDoc.fs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 29750a8cc50..307fd22c20a 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -370,7 +370,7 @@ namespace Microsoft.FSharp.Core [] type int16<[] 'Measure> = int16 [] type int64<[] 'Measure> = int64 - /// Represents a managed pointer in F# code. + /// Represents a managed pointer in F# code. type byref<'T> = (# "!0&" #) /// Represents a managed pointer in F# code. diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 951b1395b70..7560ac1804e 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -129,7 +129,7 @@ type PreXmlDoc = // Note, the parameter names are curently only checked for internal // consistency, so parameter references must match an XML doc parameter name. let paramNames = - [ for p in xml.Elements(XName.op_Implicit "param") do + [ for p in xml.Descendants(XName.op_Implicit "param") do match p.Attribute(XName.op_Implicit "name") with | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) From af11c5d658953e89597f37cba084ba92bfaf0beb Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 12:09:29 +0100 Subject: [PATCH 04/26] xml checks 2 --- src/fsharp/FSComp.txt | 4 +- src/fsharp/PostInferenceChecks.fs | 12 +- src/fsharp/TypeChecker.fs | 4 - src/fsharp/TypedTree.fs | 24 ++-- src/fsharp/TypedTreePickle.fs | 6 +- src/fsharp/XmlDoc.fs | 174 ++++++++++++++++------------ src/fsharp/fsc.fs | 6 +- src/fsharp/infos.fs | 9 +- src/fsharp/symbols/SymbolHelpers.fs | 4 +- src/fsharp/symbols/Symbols.fs | 4 +- 10 files changed, 134 insertions(+), 113 deletions(-) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 2ad9d2c35ba..99803a4d271 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1541,5 +1541,7 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3383,lexRBraceInInterpolatedString,"A '}}' character must be escaped (by doubling) in an interpolated string." #3501 "This construct is not supported by your version of the F# compiler" CompilerMessage(ExperimentalAttributeMessages.NotSupportedYet, 3501, IsError=true) 3390,xmlDocBadlyFormed,"This XML comment is invalid: '%s'" -3390,xmlDocMissingParameterName,"This XML comment is invalid: missing parameter name" +3390,xmlDocMissingParameterName,"This XML comment is invalid: missing 'name' attribute for parameter or parameter reference" +3390,xmlDocMissingCrossReference,"This XML comment is invalid: missing 'cref' attribute for cross-reference" 3390,xmlDocInvalidParameterName,"This XML comment is invalid: invalid parameter reference '%s'" +3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" \ No newline at end of file diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 1bd7e324dfd..75eefa04b34 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -2224,9 +2224,19 @@ let CheckEntityDefn cenv env (tycon: Entity) = for (argty, _) in argtys do CheckTypeNoInnerByrefs cenv env vref.Range argty CheckTypeNoInnerByrefs cenv env vref.Range rty - + let paramNames = [ for argtys in argtysl do for (_, arginfo) in argtys do match arginfo.Name with None -> () | Some nm -> nm ] + vref.XmlDoc.Elaborate(paramNames) | None -> () + tycon.XmlDoc.Elaborate([]) + for ucase in tycon.UnionCasesArray do + let names = ucase.RecdFields |> List.map (fun f -> f.Name) + ucase.XmlDoc.Elaborate(names) + for fld in tycon.TrueFieldsAsList do + fld.XmlDoc.Elaborate([]) + for gp in tycon.Typars(tycon.DefinitionRange) do + gp.XmlDoc.Elaborate([]) + // Supported interface may not have byrefs tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (CheckTypeNoByrefs cenv env m) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 0d57eba641a..a140a201954 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -14132,9 +14132,6 @@ module IncrClassChecking = ctorBody, cctorBodyOpt, methodBinds, reps - - - // Checking of mutually recursive types, members and 'let' bindings in classes // // Technique: multiple passes. @@ -14929,7 +14926,6 @@ module MutRecBindingChecking = // Phase2B: type check pass, convert from ast to tast and collects type assertions, and generalize let defnsBs, generalizedRecBinds, tpenv = TcMutRecBindings_Phase2B_TypeCheckAndIncrementalGeneralization cenv tpenv envInitial (envMutRec, defnsAs, uncheckedRecBinds, scopem) - let generalizedTyparsForRecursiveBlock = generalizedRecBinds |> List.map (fun pgrbind -> pgrbind.GeneralizedTypars) diff --git a/src/fsharp/TypedTree.fs b/src/fsharp/TypedTree.fs index c0c82ded20e..a9ec4066669 100644 --- a/src/fsharp/TypedTree.fs +++ b/src/fsharp/TypedTree.fs @@ -747,7 +747,7 @@ type Entity = match x.TypeReprInfo with | TProvidedTypeExtensionPoint info -> let lines = info.ProvidedType.PUntaintNoFailure(fun st -> (st :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(info.ProvidedType.TypeProvider.PUntaintNoFailure id)) - XmlDoc (lines |> Array.map (fun line -> line, x.DefinitionRange)) + XmlDoc (lines, x.DefinitionRange) | _ -> #endif match x.entity_opt_data with @@ -2143,7 +2143,7 @@ type Typar = member x.SetAttribs attribs = match attribs, x.typar_opt_data with | [], None -> () - | [], Some { typar_il_name = None; typar_xmldoc = XmlDoc [||]; typar_constraints = [] } -> + | [], Some { typar_il_name = None; typar_xmldoc = doc; typar_constraints = [] } when doc.IsEmpty -> x.typar_opt_data <- None | _, Some optData -> optData.typar_attribs <- attribs | _ -> x.typar_opt_data <- Some { typar_il_name = None; typar_xmldoc = XmlDoc.Empty; typar_constraints = []; typar_attribs = attribs } @@ -2173,7 +2173,7 @@ type Typar = member x.SetConstraints cs = match cs, x.typar_opt_data with | [], None -> () - | [], Some { typar_il_name = None; typar_xmldoc = XmlDoc [||]; typar_attribs = [] } -> + | [], Some { typar_il_name = None; typar_xmldoc = doc; typar_attribs = [] } when doc.IsEmpty -> x.typar_opt_data <- None | _, Some optData -> optData.typar_constraints <- cs | _ -> x.typar_opt_data <- Some { typar_il_name = None; typar_xmldoc = XmlDoc.Empty; typar_constraints = cs; typar_attribs = [] } @@ -5439,7 +5439,7 @@ type Construct() = entity_il_repr_cache = newCache() entity_opt_data = match xml, access with - | XmlDoc [||], TAccess [] -> None + | doc, TAccess [] when doc.IsEmpty -> None | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = xml entity_tycon_repr_accessibility = access @@ -5492,7 +5492,7 @@ type Construct() = OtherRangeOpt = None } /// Create a new TAST Entity node for an F# exception definition - static member NewExn cpath (id: Ident) access repr attribs doc = + static member NewExn cpath (id: Ident) access repr attribs (doc: XmlDoc) = Tycon.New "exnc" { entity_stamp=newStamp() entity_attribs=attribs @@ -5508,7 +5508,7 @@ type Construct() = entity_il_repr_cache= newCache() entity_opt_data = match doc, access, repr with - | XmlDoc [||], TAccess [], TExnNone -> None + | doc, TAccess [], TExnNone when doc.IsEmpty -> None | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = doc; entity_accessibility = access; entity_tycon_repr_accessibility = access; entity_exn_info = repr } } /// Create a new TAST RecdField node for an F# class, struct or record field @@ -5530,7 +5530,7 @@ type Construct() = /// Create a new type definition node - static member NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPrefixDisplay, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, mtyp) = + static member NewTycon (cpath, nm, m, access, reprAccess, kind, typars, doc: XmlDoc, usesPrefixDisplay, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, mtyp) = let stamp = newStamp() Tycon.New "tycon" { entity_stamp=stamp @@ -5546,9 +5546,9 @@ type Construct() = entity_cpath = cpath entity_il_repr_cache = newCache() entity_opt_data = - match kind, docOption, reprAccess, access with - | TyparKind.Type, XmlDoc [||], TAccess [], TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_xmldoc = docOption; entity_tycon_repr_accessibility = reprAccess; entity_accessibility=access } } + match kind, doc, reprAccess, access with + | TyparKind.Type, doc, TAccess [], TAccess [] when doc.IsEmpty -> None + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_xmldoc = doc; entity_tycon_repr_accessibility = reprAccess; entity_accessibility=access } } /// Create a new type definition node for a .NET type definition static member NewILTycon nlpath (nm, m) tps (scoref: ILScopeRef, enc, tdef: ILTypeDef) mtyp = @@ -5561,7 +5561,7 @@ type Construct() = /// Create a new Val node static member NewVal (logicalName: string, m: range, compiledName, ty, isMutable, isCompGen, arity, access, - recValInfo, specialRepr, baseOrThis, attribs, inlineInfo, doc, isModuleOrMemberBinding, + recValInfo, specialRepr, baseOrThis, attribs, inlineInfo, doc: XmlDoc, isModuleOrMemberBinding, isExtensionMember, isIncrClassSpecialMember, isTyFunc, allowTypeInst, isGeneratedEventVal, konst, actualParent) : Val = @@ -5574,7 +5574,7 @@ type Construct() = val_type = ty val_opt_data = match compiledName, arity, konst, access, doc, specialRepr, actualParent, attribs with - | None, None, None, TAccess [], XmlDoc [||], None, ParentNone, [] -> None + | None, None, None, TAccess [], doc, None, ParentNone, [] when doc.IsEmpty -> None | _ -> Some { Val.NewEmptyValOptData() with val_compiled_name = (match compiledName with Some v when v <> logicalName -> compiledName | _ -> None) diff --git a/src/fsharp/TypedTreePickle.fs b/src/fsharp/TypedTreePickle.fs index 6a0deb51f4a..c21adb89e38 100644 --- a/src/fsharp/TypedTreePickle.fs +++ b/src/fsharp/TypedTreePickle.fs @@ -1345,7 +1345,7 @@ let p_range (x: range) st = let p_dummy_range : range pickler = fun _x _st -> () let p_ident (x: Ident) st = p_tup2 p_string p_range (x.idText, x.idRange) st -let p_xmldoc (XmlDoc lines) st = p_array p_string (Array.map fst lines) st +let p_xmldoc (doc: XmlDoc) st = p_array p_string doc.Lines st let u_pos st = let a = u_int st in let b = u_int st in mkPos a b let u_range st = let a = u_string st in let b = u_pos st in let c = u_pos st in mkRange a b c @@ -1353,7 +1353,7 @@ let u_range st = let a = u_string st in let b = u_pos st in let c = u_pos st in // Most ranges (e.g. on optimization expressions) can be elided from stored data let u_dummy_range : range unpickler = fun _st -> range0 let u_ident st = let a = u_string st in let b = u_range st in ident(a, b) -let u_xmldoc st = XmlDoc (u_array u_string st |> Array.map (fun line -> line, range0)) +let u_xmldoc st = XmlDoc (u_array u_string st, range0) let p_local_item_ref ctxt tab st = p_osgn_ref ctxt tab st @@ -1681,7 +1681,7 @@ let u_tyar_spec_data st = typar_astype= Unchecked.defaultof<_> typar_opt_data= match g, e, c with - | XmlDoc [||], [], [] -> None + | doc, [], [] when doc.IsEmpty -> None | _ -> Some { typar_il_name = None; typar_xmldoc = g; typar_constraints = e; typar_attribs = c } } let u_tyar_spec st = diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 7560ac1804e..8b43f125d70 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -10,57 +10,104 @@ open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Range /// Represents collected XmlDoc lines -type XmlDoc = - | XmlDoc of (string * range)[] - +[] +type XmlDoc(unprocessedLines: string[], range: range) = + let rec processLines (lines: string list) = + match lines with + | [] -> [] + | (lineA :: rest) as lines -> + let lineAT = lineA.TrimStart([|' '|]) + if lineAT = "" then processLines rest + elif lineAT.StartsWithOrdinal("<") then lines + else + [""] @ + (lines |> List.map Microsoft.FSharp.Core.XmlAdapters.escape) @ + [""] + + let processedLines = processLines (Array.toList unprocessedLines) + + let lines = Array.ofList processedLines + + member _.Lines = lines + + member _.Range = range + static member Empty = XmlDocStatics.Empty - member x.IsEmpty = - let (XmlDoc lines) = x - lines |> Array.forall (fst >> String.IsNullOrWhiteSpace) + member _.IsEmpty = + lines |> Array.forall String.IsNullOrWhiteSpace - member x.NonEmpty = not x.IsEmpty + member doc.NonEmpty = not doc.IsEmpty - static member Merge (XmlDoc lines) (XmlDoc lines') = - XmlDoc (Array.append lines lines') + static member Merge (doc1: XmlDoc) (doc2: XmlDoc) = + XmlDoc(Array.append doc1.Lines doc2.Lines, + unionRanges doc1.Range doc2.Range) - member x.Range = - let (XmlDoc lines) = x - match lines with - | [| |] -> Range.range0 - | _ -> Array.reduce Range.unionRanges (Array.map snd lines) - - /// This code runs for .XML generation and thus influences cross-project xmldoc tooltips; for within-project tooltips, - /// see XmlDocumentation.fs in the language service - static member Process (XmlDoc lines) = - let rec processLines (lines: (string * range) list) = - match lines with - | [] -> [] - | ((lineA, m) :: rest) as lines -> - let lineAT = lineA.TrimStart([|' '|]) - if lineAT = "" then processLines rest - else if lineAT.StartsWithOrdinal("<") then lines - else [("", m)] @ - (lines |> List.map (map1Of2 Microsoft.FSharp.Core.XmlAdapters.escape)) @ - [("", m)] - - let lines = processLines (Array.toList lines) - if isNil lines then XmlDoc.Empty - else XmlDoc (Array.ofList lines) - - member x.GetXmlText() = - match XmlDoc.Process x with - | XmlDoc [| |] -> "" - | XmlDoc strs -> - strs - |> Array.toList - |> List.map fst + member doc.Elaborate (paramNames) = + if doc.NonEmpty then + try + // We must wrap with in order to have only one root element + let xml = + XDocument.Parse("\n"+doc.GetXmlText()+"\n", + LoadOptions.SetLineInfo ||| LoadOptions.PreserveWhitespace) + + // Note, the parameter names are curently only checked for internal + // consistency, so parameter references must match an XML doc parameter name. + for p in xml.Descendants(XName.op_Implicit "param") do + match p.Attribute(XName.op_Implicit "name") with + | null -> + warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) + | attr -> + let nm = attr.Value + if not (paramNames |> List.contains nm) then + warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) + + for pref in xml.Descendants(XName.op_Implicit "paramref") do + match pref.Attribute(XName.op_Implicit "name") with + | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) + | attr -> + let nm = attr.Value + if not (paramNames |> List.contains nm) then + warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) + +#if CREF_ELABORATION + for see in seq { yield! xml.Descendants(XName.op_Implicit "see") + yield! xml.Descendants(XName.op_Implicit "seealso") + yield! xml.Descendants(XName.op_Implicit "exception") } do + match see.Attribute(XName.op_Implicit "cref") with + | null -> warning (Error (FSComp.SR.xmlDocMissingCrossReference(), doc.Range)) + | attr -> + let cref = attr.Value + if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || + cref.StartsWith("E:") || cref.StartsWith("F:") then + () + else + match crefResolver cref with + | None -> + warning (Error (FSComp.SR.xmlDocUnresolvedCrossReference(nm), doc.Range)) + | Some text -> + attr.Value <- text + modified <- true + if modified then + let m = doc.Range + let newLines = + [| for e in xml.Elements() do + yield! e.ToString().Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries) |] + lines <- newLines +#endif + with e -> + warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) + + member doc.GetXmlText() = + if doc.IsEmpty then "" + else + doc.Lines |> String.concat Environment.NewLine // Discriminated unions can't contain statics, so we use a separate type and XmlDocStatics() = - static let empty = XmlDoc[| |] + static let empty = XmlDoc ([| |], range0) static member Empty = empty @@ -113,42 +160,15 @@ type PreXmlDoc = | PreXmlDocEmpty member x.ToXmlDoc() = - let doc = - match x with - | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc()) (b.ToXmlDoc()) - | PreXmlDocEmpty -> XmlDoc.Empty - | PreXmlDoc (pos, collector) -> - let lines = collector.LinesBefore pos - if lines.Length = 0 then XmlDoc.Empty - else XmlDoc lines - if doc.NonEmpty then - try - // We must wrap with in order to have only one root element - let xml = XDocument.Parse("\n"+doc.GetXmlText()+"\n", LoadOptions.SetLineInfo) - - // Note, the parameter names are curently only checked for internal - // consistency, so parameter references must match an XML doc parameter name. - let paramNames = - [ for p in xml.Descendants(XName.op_Implicit "param") do - match p.Attribute(XName.op_Implicit "name") with - | null -> - warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | nm -> - nm.Value ] - - for pref in xml.Descendants(XName.op_Implicit "paramref") do - match pref.Attribute(XName.op_Implicit "name") with - | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> - let nm = attr.Value - if not (paramNames |> List.contains nm) then - warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - xml |> ignore - - with e -> - warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) - doc - + match x with + | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc()) (b.ToXmlDoc()) + | PreXmlDocEmpty -> XmlDoc.Empty + | PreXmlDoc (pos, collector) -> + let lines = collector.LinesBefore pos + if lines.Length = 0 then + XmlDoc.Empty + else + XmlDoc (Array.map fst lines, Array.reduce Range.unionRanges (Array.map snd lines)) static member CreateFromGrabPoint(collector: XmlDocCollector, grabPointPos) = collector.AddGrabPoint grabPointPos diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 46f82dbff6d..f2fbbbc921d 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -328,11 +328,7 @@ module InterfaceFileWriter = module XmlDocWriter = - let hasDoc xmlDoc = - // No need to process the xml doc - just need to know if there's anything there - match xmlDoc with - | XmlDoc [| |] -> false - | _ -> true + let hasDoc (doc: XmlDoc) = not doc.IsEmpty let computeXmlDocSigs (tcGlobals, generatedCcu: CcuThunk) = (* the xmlDocSigOf* functions encode type into string to be used in "id" *) diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index bf70d34431a..a314acbd673 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -1065,8 +1065,7 @@ type MethInfo = #if !NO_EXTENSIONTYPING | ProvidedMeth(_, mi, _, m)-> let lines = mi.PUntaint((fun mix -> (mix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(mi.TypeProvider.PUntaintNoFailure id)), m) - let lines = lines |> Array.map (fun line -> line, m) - XmlDoc lines + XmlDoc (lines, m) #endif /// Try to get an arbitrary F# ValRef associated with the member. This is to determine if the member is virtual, amongst other things. @@ -2165,8 +2164,7 @@ type PropInfo = #if !NO_EXTENSIONTYPING | ProvidedProp(_, pi, m) -> let lines = pi.PUntaint((fun pix -> (pix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(pi.TypeProvider.PUntaintNoFailure id)), m) - let lines = lines |> Array.map (fun line -> line, m) - XmlDoc lines + XmlDoc (lines, m) #endif /// Get the TcGlobals associated with the object @@ -2421,8 +2419,7 @@ type EventInfo = #if !NO_EXTENSIONTYPING | ProvidedEvent (_, ei, m) -> let lines = ei.PUntaint((fun eix -> (eix :> IProvidedCustomAttributeProvider).GetXmlDocAttributes(ei.TypeProvider.PUntaintNoFailure id)), m) - let lines = lines |> Array.map (fun line -> line, m) - XmlDoc lines + XmlDoc (lines, m) #endif /// Get the logical name of the event. diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index a9d147873d1..097933f470b 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -664,10 +664,10 @@ module internal SymbolHelpers = match xmlDoc with | None -> "" | Some xmlDoc when xmlDoc.IsEmpty -> "" - | Some (XmlDoc lines) -> + | Some xmlDoc -> bufs (fun os -> bprintf os "\n" - lines |> Array.iter (fun (line, _) -> + xmlDoc.Lines |> Array.iter (fun line -> // Note: this code runs for local/within-project xmldoc tooltips, but not for cross-project or .XML bprintf os "\n%s" line)) diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index d0bb6c2aa13..80fb59462f8 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -78,8 +78,8 @@ module Impl = let makeReadOnlyCollection (arr: seq<'T>) = System.Collections.ObjectModel.ReadOnlyCollection<_>(Seq.toArray arr) :> IList<_> - let makeXmlDoc (XmlDoc lines) = - makeReadOnlyCollection (Array.map fst lines) + let makeXmlDoc (doc: XmlDoc) = + makeReadOnlyCollection doc.Lines let rescopeEntity optViewedCcu (entity: Entity) = match optViewedCcu with From 590780c99ba7b602486a4f07f4009956c3823585 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 12:19:09 +0100 Subject: [PATCH 05/26] fix baselines --- eng/Versions.props | 2 +- .../FSharp.Compiler.Service.fsproj | 2 +- .../SurfaceArea.net472.fs | 18 ++++++++++-------- .../SurfaceArea.netstandard.fs | 14 ++++++++------ 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 7cc27ede99b..513cc29e98b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -23,7 +23,7 @@ $(FSMajorVersion)-$(FSMinorVersion)-$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion).$(FSRevisionVersion) - 38 + 39 $(FSMinorVersion) $(FSBuildVersion) $(FSRevisionVersion) diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index c83d93afc3f..b00fd69c9ce 100644 --- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -21,7 +21,7 @@ FSharp.Compiler.Service.nuspec true The F# Compiler Services package For F# $(FSLanguageVersion) exposes additional functionality for implementing F# language bindings, additional tools based on the compiler or refactoring tools. The package also includes F# interactive service that can be used for embedding F# scripting into your applications. Contains code from the F# Software Foundation. - /blob/main/release-notes.md#FSharp-Compilere-Service-$(FSharpCompilerServiceReleaseNotesVersion) + /blob/main/release-notes.md#FSharp-Compiler-Service-$(FSharpCompilerServiceReleaseNotesVersion) F#, fsharp, interactive, compiler, editor diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs index 0cacf6073ee..55dd7b6127e 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs @@ -41930,25 +41930,27 @@ FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(System.Object, System.Collections. FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: Boolean NonEmpty FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_NonEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: Int32 CompareTo(System.Object) -FSharp.Compiler.XmlDoc+XmlDoc: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.XmlDoc+XmlDoc: Int32 CompareTo(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode() FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.XmlDoc+XmlDoc: Int32 Tag FSharp.Compiler.XmlDoc+XmlDoc: Int32 get_Tag() FSharp.Compiler.XmlDoc+XmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] Item -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] get_Item() FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Merge(XmlDoc, XmlDoc) -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.String[]) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Process(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc get_Empty() -FSharp.Compiler.XmlDoc+XmlDocCollector: System.String[] LinesBefore(pos) +FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty +FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() +FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() +FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] Item +FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] get_Item() +FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.Tuple`2[System.String,FSharp.Compiler.Range+range][]) +FSharp.Compiler.XmlDoc+XmlDoc: range Range +FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() +FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) +FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) -FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, pos) FSharp.Compiler.XmlDoc+XmlDocStatics: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc get_Empty() diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs index 9cd1423c6e3..e29d5d5eb9e 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs @@ -41875,21 +41875,23 @@ FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(System.Object, System.Collections. FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: Boolean NonEmpty FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_NonEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: Int32 CompareTo(System.Object) -FSharp.Compiler.XmlDoc+XmlDoc: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.XmlDoc+XmlDoc: Int32 CompareTo(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode() FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.XmlDoc+XmlDoc: Int32 Tag FSharp.Compiler.XmlDoc+XmlDoc: Int32 get_Tag() FSharp.Compiler.XmlDoc+XmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] Item -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] get_Item() FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Merge(XmlDoc, XmlDoc) -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.String[]) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Process(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc get_Empty() +FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty +FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() +FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() +FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] Item +FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] get_Item() +FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.Tuple`2[System.String,FSharp.Compiler.Range+range][]) +FSharp.Compiler.XmlDoc+XmlDoc: range Range +FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() FSharp.Compiler.XmlDoc+XmlDocCollector: System.String[] LinesBefore(pos) FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) From 06eafe83136754aad87467b13985eabb404c3021 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 13:39:30 +0100 Subject: [PATCH 06/26] check parameter names --- src/fsharp/FSComp.txt | 1 + src/fsharp/PostInferenceChecks.fs | 11 --- src/fsharp/SyntaxTree.fs | 15 +++- src/fsharp/TypeChecker.fs | 54 ++++++++++---- src/fsharp/XmlDoc.fs | 89 ++++++++++++++--------- src/fsharp/service/ServiceXmlDocParser.fs | 9 ++- src/fsharp/xlf/FSComp.txt.cs.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.de.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.es.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.fr.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.it.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.ja.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.ko.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.pl.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.ru.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.tr.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 19 ++++- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 19 ++++- 19 files changed, 334 insertions(+), 92 deletions(-) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 99803a4d271..db440ea9c7f 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1544,4 +1544,5 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3390,xmlDocMissingParameterName,"This XML comment is invalid: missing 'name' attribute for parameter or parameter reference" 3390,xmlDocMissingCrossReference,"This XML comment is invalid: missing 'cref' attribute for cross-reference" 3390,xmlDocInvalidParameterName,"This XML comment is invalid: invalid parameter reference '%s'" +3390,xmlDocMissingParameterDoc,"This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '%s'" 3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" \ No newline at end of file diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 75eefa04b34..fcaeb06d11b 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -2224,19 +2224,8 @@ let CheckEntityDefn cenv env (tycon: Entity) = for (argty, _) in argtys do CheckTypeNoInnerByrefs cenv env vref.Range argty CheckTypeNoInnerByrefs cenv env vref.Range rty - let paramNames = [ for argtys in argtysl do for (_, arginfo) in argtys do match arginfo.Name with None -> () | Some nm -> nm ] - vref.XmlDoc.Elaborate(paramNames) | None -> () - tycon.XmlDoc.Elaborate([]) - for ucase in tycon.UnionCasesArray do - let names = ucase.RecdFields |> List.map (fun f -> f.Name) - ucase.XmlDoc.Elaborate(names) - for fld in tycon.TrueFieldsAsList do - fld.XmlDoc.Elaborate([]) - for gp in tycon.Typars(tycon.DefinitionRange) do - gp.XmlDoc.Elaborate([]) - // Supported interface may not have byrefs tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (CheckTypeNoByrefs cenv env m) diff --git a/src/fsharp/SyntaxTree.fs b/src/fsharp/SyntaxTree.fs index 4e9229b8df2..83b007100b1 100644 --- a/src/fsharp/SyntaxTree.fs +++ b/src/fsharp/SyntaxTree.fs @@ -1434,6 +1434,8 @@ type SynAttributes = SynAttributeList list type SynValData = | SynValData of MemberFlags option * SynValInfo * Ident option + member x.SynValInfo = (let (SynValData(_flags, synValInfo, _)) = x in synValInfo) + /// Represents a binding for a 'let' or 'member' declaration [] type SynBinding = @@ -1764,9 +1766,16 @@ type SynValSig = type SynValInfo = /// SynValInfo(curriedArgInfos, returnInfo) - | SynValInfo of SynArgInfo list list * SynArgInfo + | SynValInfo of curriedArgInfos: SynArgInfo list list * returnInfo: SynArgInfo + + member x.CurriedArgInfos = (let (SynValInfo(args, _)) = x in args) - member x.ArgInfos = (let (SynValInfo(args, _)) = x in args) + member x.ArgNames = + x.CurriedArgInfos + |> List.concat + |> List.map (fun info -> info.Ident) + |> List.choose id + |> List.map (fun id -> id.idText) /// Represents the argument names and other metadata for a parameter for a member or function [] @@ -1777,6 +1786,8 @@ type SynArgInfo = optional: bool * ident: Ident option + member x.Ident : Ident option = let (SynArgInfo(_,_,id)) = x in id + /// Represents the names and other metadata for the type parameters for a member or function [] type SynValTyparDecls = diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index a140a201954..483caa9c69b 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -1257,6 +1257,8 @@ type ValScheme = member x.GeneralizedTypars = let (ValScheme(_, TypeScheme(gtps, _), _, _, _, _, _, _, _, _, _, _)) = x in gtps member x.TypeScheme = let (ValScheme(_, ts, _, _, _, _, _, _, _, _, _, _)) = x in ts + + member x.ValReprInfo = let (ValScheme(_, _, topValInfo, _, _, _, _, _, _, _, _, _)) = x in topValInfo /// Translation of patterns is split into three phases. The first collects names. /// The second is run after val_specs have been created for those names and inference @@ -2604,7 +2606,9 @@ module BindingNormalization = | Binding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, rhsExpr, mBinding, spBind) -> let (NormalizedBindingPat(pat, rhsExpr, valSynData, typars)) = NormalizeBindingPattern cenv cenv.nameResolver isObjExprBinding env valSynData p (NormalizedBindingRhs ([], retInfo, rhsExpr)) - NormalizedBinding(vis, bkind, isInline, isMutable, attrs, doc.ToXmlDoc(), typars, valSynData, pat, rhsExpr, mBinding, spBind) + let paramNames = Some valSynData.SynValInfo.ArgNames + let doc = doc.ToXmlDoc(true, paramNames) + NormalizedBinding(vis, bkind, isInline, isMutable, attrs, doc, typars, valSynData, pat, rhsExpr, mBinding, spBind) //------------------------------------------------------------------------- // input is: @@ -4544,7 +4548,7 @@ and TcValSpec cenv env declKind newOk containerInfo memFlagsOpt thisTyOpt tpenv if SynInfo.HasOptionalArgs valSynInfo then let curriedArgTys, returnTy = GetTopTauTypeInFSharpForm cenv.g argsData ty' m let curriedArgTys = - (List.zip (List.mapSquared fst curriedArgTys) valSynInfo.ArgInfos) + (List.zip (List.mapSquared fst curriedArgTys) valSynInfo.CurriedArgInfos) |> List.map (fun (argTys, argInfos) -> (List.zip argTys argInfos) |> List.map (fun (argty, argInfo) -> @@ -13037,7 +13041,14 @@ let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memF errorR(Error(FSComp.SR.tcValueInSignatureRequiresLiteralAttribute(), e.Range)) konst - let vspec = MakeAndPublishVal cenv env (altActualParent, true, declKind, ValNotInRecScope, valscheme, attrs, doc.ToXmlDoc(), konst, false) + let paramNames = + match valscheme.ValReprInfo with + | None -> None + | Some topValInfo -> + Some [ for argtys in topValInfo.ArgInfos do for arginfo in argtys do match arginfo.Name with None -> () | Some nm -> nm.idText ] + + let doc = doc.ToXmlDoc(true, paramNames) + let vspec = MakeAndPublishVal cenv env (altActualParent, true, declKind, ValNotInRecScope, valscheme, attrs, doc, konst, false) assert(vspec.InlineInfo = inlineFlag) vspec, tpenv) @@ -13106,12 +13117,15 @@ module TcRecdUnionAndEnumDeclarations = begin let TcAnonFieldDecl cenv env parent tpenv nm (Field(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m)) = let id = (match idOpt with None -> mkSynId m nm | Some id -> id) - TcFieldDecl cenv env parent false tpenv (isStatic, attribs, id, idOpt.IsNone, ty, isMutable, xmldoc.ToXmlDoc(), vis, m) + let doc = xmldoc.ToXmlDoc(true, Some []) + TcFieldDecl cenv env parent false tpenv (isStatic, attribs, id, idOpt.IsNone, ty, isMutable, doc, vis, m) let TcNamedFieldDecl cenv env parent isIncrClass tpenv (Field(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m)) = match id with | None -> error (Error(FSComp.SR.tcFieldRequiresName(), m)) - | Some id -> TcFieldDecl cenv env parent isIncrClass tpenv (isStatic, attribs, id, false, ty, isMutable, xmldoc.ToXmlDoc(), vis, m) + | Some id -> + let doc = xmldoc.ToXmlDoc(true, Some []) + TcFieldDecl cenv env parent isIncrClass tpenv (isStatic, attribs, id, false, ty, isMutable, doc, vis, m) let TcNamedFieldDecls cenv env parent isIncrClass tpenv fields = fields |> List.map (TcNamedFieldDecl cenv env parent isIncrClass tpenv) @@ -13181,7 +13195,9 @@ module TcRecdUnionAndEnumDeclarations = begin if not (typeEquiv cenv.g recordTy thisTy) then error(Error(FSComp.SR.tcReturnTypesForUnionMustBeSameAsType(), m)) rfields, recordTy - Construct.NewUnionCase id rfields recordTy attrs (xmldoc.ToXmlDoc()) vis + let names = rfields |> List.map (fun f -> f.Name) + let doc = xmldoc.ToXmlDoc(true, Some names) + Construct.NewUnionCase id rfields recordTy attrs doc vis let TcUnionCaseDecls cenv env parent (thisTy: TType) thisTyInst tpenv unionCases = let unionCases' = unionCases |> List.map (TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv) @@ -13198,7 +13214,8 @@ module TcRecdUnionAndEnumDeclarations = begin let vis, _ = ComputeAccessAndCompPath env None m None None parent let vis = CombineReprAccess parent vis if id.idText = "value__" then errorR(Error(FSComp.SR.tcNotValidEnumCaseName(), id.idRange)) - Construct.NewRecdField true (Some v) id false thisTy false false [] attrs (xmldoc.ToXmlDoc()) vis false + let doc = xmldoc.ToXmlDoc(true, Some []) + Construct.NewRecdField true (Some v) id false thisTy false false [] attrs doc vis false let TcEnumDecls cenv env parent thisTy enumCases = let fieldTy = NewInferenceType () @@ -15550,7 +15567,8 @@ module TcExceptionDeclarations = CheckForDuplicateConcreteType env (id.idText + "Exception") id.idRange CheckForDuplicateConcreteType env id.idText id.idRange let repr = TExnFresh (Construct.MakeRecdFieldsTable []) - Construct.NewExn cpath id vis repr attrs (doc.ToXmlDoc()) + let doc = doc.ToXmlDoc(true, Some []) + Construct.NewExn cpath id vis repr attrs doc let TcExnDefnCore_Phase1G_EstablishRepresentation cenv env parent (exnc: Entity) (SynExceptionDefnRepr(_, UnionCase(_, _, args, _, _, _), reprIdOpt, _, _, m)) = let g = cenv.g @@ -15836,7 +15854,8 @@ module EstablishTypeDefinitionCores = let envForDecls, mtypeAcc = MakeInnerEnv envInitial id modKind let mty = Construct.NewEmptyModuleOrNamespaceType modKind - let mspec = Construct.NewModuleOrNamespace (Some envInitial.eCompPath) vis id (xml.ToXmlDoc()) modAttrs (MaybeLazy.Strict mty) + let doc = xml.ToXmlDoc(true, Some []) + let mspec = Construct.NewModuleOrNamespace (Some envInitial.eCompPath) vis id doc modAttrs (MaybeLazy.Strict mty) let innerParent = Parent (mkLocalModRef mspec) let innerTypeNames = TypeNamesInMutRecDecls cenv envForDecls decls MutRecDefnsPhase2DataForModule (mtypeAcc, mspec), (innerParent, innerTypeNames, envForDecls) @@ -15879,9 +15898,10 @@ module EstablishTypeDefinitionCores = // If we supported nested types and modules then additions would be needed here let lmtyp = MaybeLazy.Strict (Construct.NewEmptyModuleOrNamespaceType ModuleOrType) + let doc = doc.ToXmlDoc(true, Some [] ) Construct.NewTycon (cpath, id.idText, id.idRange, vis, visOfRepr, TyparKind.Type, LazyWithContext.NotLazy checkedTypars, - doc.ToXmlDoc(), preferPostfix, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, lmtyp) + doc, preferPostfix, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, lmtyp) //------------------------------------------------------------------------- /// Establishing type definitions: early phase: work out the basic kind of the type definition @@ -17520,7 +17540,7 @@ module TcDeclarations = | SynMemberSig.Member (valSpfn, memberFlags, _) -> memberFlags.MemberKind=MemberKind.Constructor && // REVIEW: This is a syntactic approximation - (match valSpfn.SynType, valSpfn.SynInfo.ArgInfos with + (match valSpfn.SynType, valSpfn.SynInfo.CurriedArgInfos with | StripParenTypes (SynType.Fun (StripParenTypes (SynType.LongIdent (LongIdentWithDots([id], _))), _, _)), [[_]] when id.idText = "unit" -> true | _ -> false) | _ -> false) @@ -17660,7 +17680,8 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS let id = ident (modName, id.idRange) let mty = Construct.NewEmptyModuleOrNamespaceType modKind - let mspec = Construct.NewModuleOrNamespace (Some env.eCompPath) vis id (xml.ToXmlDoc()) attribs (MaybeLazy.Strict mty) + let doc = xml.ToXmlDoc(true, Some []) + let mspec = Construct.NewModuleOrNamespace (Some env.eCompPath) vis id doc attribs (MaybeLazy.Strict mty) let! (mtyp, _) = TcModuleOrNamespaceSignatureElementsNonMutRec cenv (Parent (mkLocalModRef mspec)) env (id, modKind, mdefs, m, xml) @@ -17764,7 +17785,8 @@ and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs = eventually { // Ensure the .Deref call in UpdateAccModuleOrNamespaceType succeeds if cenv.compilingCanonicalFslibModuleType then - ensureCcuHasModuleOrNamespaceAtPath cenv.topCcu env.ePath env.eCompPath (xml.ToXmlDoc()) + let doc = xml.ToXmlDoc(true, Some []) + ensureCcuHasModuleOrNamespaceAtPath cenv.topCcu env.ePath env.eCompPath doc let typeNames = EstablishTypeDefinitionCores.TypeNamesInNonMutRecSigDecls defs match mutRecNSInfo with @@ -17979,7 +18001,8 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem // Create the new module specification to hold the accumulated results of the type of the module // Also record this in the environment as the accumulator let mty = Construct.NewEmptyModuleOrNamespaceType modKind - let mspec = Construct.NewModuleOrNamespace (Some env.eCompPath) vis id (xml.ToXmlDoc()) modAttrs (MaybeLazy.Strict mty) + let doc = xml.ToXmlDoc(true, Some []) + let mspec = Construct.NewModuleOrNamespace (Some env.eCompPath) vis id doc modAttrs (MaybeLazy.Strict mty) // Now typecheck. let! mexpr, topAttrsNew, envAtEnd = TcModuleOrNamespaceElements cenv (Parent (mkLocalModRef mspec)) endm envForModule xml None mdefs @@ -18185,7 +18208,8 @@ and TcModuleOrNamespaceElements cenv parent endm env xml mutRecNSInfo defs = eventually { // Ensure the deref_nlpath call in UpdateAccModuleOrNamespaceType succeeds if cenv.compilingCanonicalFslibModuleType then - ensureCcuHasModuleOrNamespaceAtPath cenv.topCcu env.ePath env.eCompPath (xml.ToXmlDoc()) + let doc = xml.ToXmlDoc(true, Some []) + ensureCcuHasModuleOrNamespaceAtPath cenv.topCcu env.ePath env.eCompPath doc // Collect the type names so we can implicitly add the compilation suffix to module names let typeNames = EstablishTypeDefinitionCores.TypeNamesInNonMutRecDecls defs diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 8b43f125d70..1c95d60cf5c 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -43,34 +43,8 @@ type XmlDoc(unprocessedLines: string[], range: range) = XmlDoc(Array.append doc1.Lines doc2.Lines, unionRanges doc1.Range doc2.Range) - member doc.Elaborate (paramNames) = - if doc.NonEmpty then - try - // We must wrap with in order to have only one root element - let xml = - XDocument.Parse("\n"+doc.GetXmlText()+"\n", - LoadOptions.SetLineInfo ||| LoadOptions.PreserveWhitespace) - - // Note, the parameter names are curently only checked for internal - // consistency, so parameter references must match an XML doc parameter name. - for p in xml.Descendants(XName.op_Implicit "param") do - match p.Attribute(XName.op_Implicit "name") with - | null -> - warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> - let nm = attr.Value - if not (paramNames |> List.contains nm) then - warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - - for pref in xml.Descendants(XName.op_Implicit "paramref") do - match pref.Attribute(XName.op_Implicit "name") with - | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> - let nm = attr.Value - if not (paramNames |> List.contains nm) then - warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - #if CREF_ELABORATION + member doc.Elaborate (paramNames) = for see in seq { yield! xml.Descendants(XName.op_Implicit "see") yield! xml.Descendants(XName.op_Implicit "seealso") yield! xml.Descendants(XName.op_Implicit "exception") } do @@ -95,8 +69,6 @@ type XmlDoc(unprocessedLines: string[], range: range) = yield! e.ToString().Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries) |] lines <- newLines #endif - with e -> - warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) member doc.GetXmlText() = if doc.IsEmpty then "" @@ -104,6 +76,50 @@ type XmlDoc(unprocessedLines: string[], range: range) = doc.Lines |> String.concat Environment.NewLine + member doc.Check(paramNamesOpt: string list option) = + try + // We must wrap with in order to have only one root element + let xml = + XDocument.Parse("\n"+doc.GetXmlText()+"\n", + LoadOptions.SetLineInfo ||| LoadOptions.PreserveWhitespace) + + // The parameter names are checked for consistency, so parameter references and + // parameter documentation must match an actual parameter. In addition, if any parameters + // have documentation then all parameters must have documentation + match paramNamesOpt with + | None -> () + | Some paramNames -> + for p in xml.Descendants(XName.op_Implicit "param") do + match p.Attribute(XName.op_Implicit "name") with + | null -> + warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) + | attr -> + let nm = attr.Value + if not (paramNames |> List.contains nm) then + warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) + + let paramsWithDocs = + [ for p in xml.Descendants(XName.op_Implicit "param") do + match p.Attribute(XName.op_Implicit "name") with + | null -> () + | attr -> attr.Value ] + + if paramsWithDocs.Length > 0 then + for p in paramNames do + if not (paramsWithDocs |> List.contains p) then + warning (Error (FSComp.SR.xmlDocMissingParameterDoc(nm), doc.Range)) + + for pref in xml.Descendants(XName.op_Implicit "paramref") do + match pref.Attribute(XName.op_Implicit "name") with + | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) + | attr -> + let nm = attr.Value + if not (paramNames |> List.contains nm) then + warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) + + with e -> + warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) + // Discriminated unions can't contain statics, so we use a separate type and XmlDocStatics() = @@ -159,16 +175,21 @@ type PreXmlDoc = | PreXmlDoc of pos * XmlDocCollector | PreXmlDocEmpty - member x.ToXmlDoc() = + member x.ToXmlDoc(check, paramNamesOpt: string list option) = match x with - | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc()) (b.ToXmlDoc()) + | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc(check, paramNamesOpt)) (b.ToXmlDoc(check, paramNamesOpt)) | PreXmlDocEmpty -> XmlDoc.Empty | PreXmlDoc (pos, collector) -> - let lines = collector.LinesBefore pos - if lines.Length = 0 then + let preLines = collector.LinesBefore pos + if preLines.Length = 0 then XmlDoc.Empty else - XmlDoc (Array.map fst lines, Array.reduce Range.unionRanges (Array.map snd lines)) + let lines = Array.map fst preLines + let m = Array.reduce Range.unionRanges (Array.map snd preLines) + let doc = XmlDoc (lines, m) + if check then + doc.Check(paramNamesOpt) + doc static member CreateFromGrabPoint(collector: XmlDocCollector, grabPointPos) = collector.AddGrabPoint grabPointPos diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index a13edf537cf..5cd1347a7df 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -18,7 +18,8 @@ module XmlDocParsing = | Pats ps -> ps | NamePatPairs(xs, _) -> List.map snd xs - let rec digNamesFrom = function + let rec digNamesFrom pat = + match pat with | SynPat.Named(_innerPat,id,_isTheThisVar,_access,_range) -> [id.idText] | SynPat.Typed(pat,_type,_range) -> digNamesFrom pat | SynPat.Attrib(pat,_attrs,_range) -> digNamesFrom pat @@ -49,7 +50,7 @@ module XmlDocParsing = i let isEmptyXmlDoc (preXmlDoc: PreXmlDoc) = - preXmlDoc.ToXmlDoc().IsEmpty + preXmlDoc.ToXmlDoc(false, None).IsEmpty let rec getXmlDocablesSynModuleDecl decl = match decl with @@ -119,12 +120,12 @@ module XmlDocParsing = let paramNames = digNamesFrom synPat [XmlDocable(line,indent,paramNames)] else [] - | SynMemberDefn.AbstractSlot(ValSpfn(synAttributes, _, _, _, SynValInfo(args, _), _, _, preXmlDoc, _, _, _), _, range) -> + | SynMemberDefn.AbstractSlot(ValSpfn(synAttributes, _, _, _, synValInfo, _, _, preXmlDoc, _, _, _), _, range) -> if isEmptyXmlDoc preXmlDoc then let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine let indent = indentOf line - let paramNames = args |> List.collect (fun az -> az |> List.choose (fun (SynArgInfo(_synAttributes, _, idOpt)) -> match idOpt with | Some id -> Some(id.idText) | _ -> None)) + let paramNames = synValInfo.ArgNames [XmlDocable(line,indent,paramNames)] else [] | SynMemberDefn.Interface(_synType, synMemberDefnsOption, _range) -> diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 3dc155020cc..edabc8dea0c 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 292f6c66669..a98a83fc0b9 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index c7e00ed68b6..8cdb2317155 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index c64e4e544a8..37c596bfbda 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index dbd6a9eada2..ab2480f330c 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 767dd75391e..0bde15a3300 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index a7ba88f7d29..86793752ae5 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 8b1a2b6cd59..4083260ab1c 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 5648c5a32b7..ddda811c071 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 13b5b7cee10..b5b0e5a1658 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 370df29dc88..c018d0e4c5d 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index a1a8e6f59f4..43efdff1ac3 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 8fd91081031..6098d76d98b 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -532,9 +532,24 @@ This XML comment is invalid: invalid parameter reference '{0}' + + This XML comment is invalid: missing 'cref' attribute for cross-reference + This XML comment is invalid: missing 'cref' attribute for cross-reference + + + + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + + - This XML comment is invalid: missing parameter name - This XML comment is invalid: missing parameter name + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + + + This XML comment is invalid: unresolved cross-reference '{0}' + This XML comment is invalid: unresolved cross-reference '{0}' From 7f04aff19279dfe9cb942583d4dbceb1becc8585 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 13:49:20 +0100 Subject: [PATCH 07/26] fix baseline --- .../FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs index e29d5d5eb9e..25e45e1d9ee 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs @@ -41892,10 +41892,10 @@ FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Rang FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.Tuple`2[System.String,FSharp.Compiler.Range+range][]) FSharp.Compiler.XmlDoc+XmlDoc: range Range FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() -FSharp.Compiler.XmlDoc+XmlDocCollector: System.String[] LinesBefore(pos) FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) -FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, pos) +FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) +FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) FSharp.Compiler.XmlDoc+XmlDocStatics: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc get_Empty() From 9771ca313b767a05361d8c46d71bff8abdd5c475 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 15:13:05 +0100 Subject: [PATCH 08/26] check parameters names --- src/fsharp/FSComp.txt | 4 +- src/fsharp/SyntaxTree.fs | 1 + src/fsharp/TypeChecker.fs | 23 ++-- src/fsharp/TypedTree.fs | 3 + src/fsharp/XmlDoc.fs | 2 +- src/fsharp/pars.fsy | 4 +- src/fsharp/service/ServiceAssemblyContent.fs | 5 +- src/fsharp/service/ServiceParseTreeWalk.fs | 2 +- src/fsharp/service/ServiceUntypedParse.fs | 4 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 8 +- src/fsharp/xlf/FSComp.txt.de.xlf | 8 +- src/fsharp/xlf/FSComp.txt.es.xlf | 8 +- src/fsharp/xlf/FSComp.txt.fr.xlf | 8 +- src/fsharp/xlf/FSComp.txt.it.xlf | 8 +- src/fsharp/xlf/FSComp.txt.ja.xlf | 8 +- src/fsharp/xlf/FSComp.txt.ko.xlf | 8 +- src/fsharp/xlf/FSComp.txt.pl.xlf | 8 +- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 8 +- src/fsharp/xlf/FSComp.txt.ru.xlf | 8 +- src/fsharp/xlf/FSComp.txt.tr.xlf | 8 +- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 8 +- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 8 +- .../EmittedIL/Operators.fs | 2 +- .../EmittedIL/TailCalls.fs | 3 +- .../Language/CompilerDirectiveTests.fs | 5 +- .../Language/XmlComments.fs | 105 +++++++++++++++++- tests/FSharp.Test.Utilities/Compiler.fs | 24 ++-- tests/FSharp.Test.Utilities/CompilerAssert.fs | 10 +- .../Xunit/Attributes/DirectoryAttribute.fs | 2 +- .../Language/OpenTypeDeclarationTests.fs | 30 ++--- .../fsharp/Compiler/Language/WitnessTests.fs | 2 +- 31 files changed, 220 insertions(+), 115 deletions(-) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index db440ea9c7f..7ec2a7fd3c4 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1543,6 +1543,6 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3390,xmlDocBadlyFormed,"This XML comment is invalid: '%s'" 3390,xmlDocMissingParameterName,"This XML comment is invalid: missing 'name' attribute for parameter or parameter reference" 3390,xmlDocMissingCrossReference,"This XML comment is invalid: missing 'cref' attribute for cross-reference" -3390,xmlDocInvalidParameterName,"This XML comment is invalid: invalid parameter reference '%s'" -3390,xmlDocMissingParameterDoc,"This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '%s'" +3390,xmlDocInvalidParameterName,"This XML comment is invalid: unknown parameter '%s'" +3390,xmlDocMissingParameterDoc,"This XML comment is incomplete: no documentation for parameter '%s'" 3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" \ No newline at end of file diff --git a/src/fsharp/SyntaxTree.fs b/src/fsharp/SyntaxTree.fs index 83b007100b1..df5d2b7726b 100644 --- a/src/fsharp/SyntaxTree.fs +++ b/src/fsharp/SyntaxTree.fs @@ -1893,6 +1893,7 @@ type SynMemberDefn = attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * + doc: PreXmlDoc * range: range /// An implicit inherit definition, 'inherit (args...) as base' diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 483caa9c69b..02a9f97528b 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -13044,8 +13044,7 @@ let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memF let paramNames = match valscheme.ValReprInfo with | None -> None - | Some topValInfo -> - Some [ for argtys in topValInfo.ArgInfos do for arginfo in argtys do match arginfo.Name with None -> () | Some nm -> nm.idText ] + | Some topValInfo -> topValInfo.ArgNames let doc = doc.ToXmlDoc(true, paramNames) let vspec = MakeAndPublishVal cenv env (altActualParent, true, declKind, ValNotInRecScope, valscheme, attrs, doc, konst, false) @@ -13404,7 +13403,7 @@ module IncrClassChecking = /// Check and elaborate the "left hand side" of the implicit class construction /// syntax. - let TcImplicitCtorLhs_Phase2A(cenv, env, tpenv, tcref: TyconRef, vis, attrs, spats, thisIdOpt, baseValOpt: Val option, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) = + let TcImplicitCtorLhs_Phase2A(cenv, env, tpenv, tcref: TyconRef, vis, attrs, spats, thisIdOpt, baseValOpt: Val option, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy, doc: PreXmlDoc) = let baseValOpt = match GetSuperTypeOfType cenv.g cenv.amap m objTy with @@ -13449,7 +13448,9 @@ module IncrClassChecking = let isComplete = ComputeIsComplete copyOfTyconTypars [] ctorTy let topValInfo = InferGenericArityFromTyScheme prelimTyschemeG partialValReprInfo let ctorValScheme = ValScheme(id, prelimTyschemeG, Some topValInfo, Some memberInfo, false, ValInline.Never, NormalVal, vis, false, true, false, false) - let ctorVal = MakeAndPublishVal cenv env (Parent tcref, false, ModuleOrMemberBinding, ValInRecScope isComplete, ctorValScheme, attribs, XmlDoc.Empty, None, false) + let paramNames = topValInfo.ArgNames + let doc = doc.ToXmlDoc(true, paramNames) + let ctorVal = MakeAndPublishVal cenv env (Parent tcref, false, ModuleOrMemberBinding, ValInRecScope isComplete, ctorValScheme, attribs, doc, None, false) ctorValScheme, ctorVal // We only generate the cctor on demand, because we don't need it if there are no cctor actions. @@ -14292,12 +14293,12 @@ module MutRecBindingChecking = error(Error(FSComp.SR.tcEnumerationsMayNotHaveMembers(), (trimRangeToLine m))) match classMemberDef, containerInfo with - | SynMemberDefn.ImplicitCtor (vis, Attributes attrs, SynSimplePats.SimplePats(spats, _), thisIdOpt, m), ContainerInfo(_, Some(MemberOrValContainerInfo(tcref, _, baseValOpt, safeInitInfo, _))) -> + | SynMemberDefn.ImplicitCtor (vis, Attributes attrs, SynSimplePats.SimplePats(spats, _), thisIdOpt, doc, m), ContainerInfo(_, Some(MemberOrValContainerInfo(tcref, _, baseValOpt, safeInitInfo, _))) -> if tcref.TypeOrMeasureKind = TyparKind.Measure then error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembers(), m)) // Phase2A: make incrClassCtorLhs - ctorv, thisVal etc, type depends on argty(s) - let incrClassCtorLhs = TcImplicitCtorLhs_Phase2A(cenv, envForTycon, tpenv, tcref, vis, attrs, spats, thisIdOpt, baseValOpt, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) + let incrClassCtorLhs = TcImplicitCtorLhs_Phase2A(cenv, envForTycon, tpenv, tcref, vis, attrs, spats, thisIdOpt, baseValOpt, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy, doc) // Phase2A: Add copyOfTyconTypars from incrClassCtorLhs - or from tcref let envForTycon = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envForTycon let innerState = (Some incrClassCtorLhs, envForTycon, tpenv, recBindIdx, uncheckedBindsRev) @@ -17236,7 +17237,7 @@ module TcDeclarations = | SynMemberDefn.Member (_, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have binding", m)) | SynMemberDefn.AbstractSlot (_, _, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have slotsig", m)) | SynMemberDefn.Interface (_, _, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have interface", m)) - | SynMemberDefn.ImplicitCtor (_, _, _, _, m) :: _ -> errorR(InternalError("implicit class construction with two implicit constructions", m)) + | SynMemberDefn.ImplicitCtor (_, _, _, _, _, m) :: _ -> errorR(InternalError("implicit class construction with two implicit constructions", m)) | SynMemberDefn.AutoProperty (_, _, _, _, _, _, _, _, _, _, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have auto property", m)) | SynMemberDefn.ImplicitInherit (_, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit(), m)) | SynMemberDefn.LetBindings (_, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers(), m)) @@ -17248,7 +17249,7 @@ module TcDeclarations = let _, ds = List.takeUntil (allFalse [isMember;isAbstractSlot;isInterface;isInherit;isField;isTycon]) ds match ds with | SynMemberDefn.Member (_, m) :: _ -> errorR(InternalError("CheckMembersForm: List.takeUntil is wrong", m)) - | SynMemberDefn.ImplicitCtor (_, _, _, _, m) :: _ -> errorR(InternalError("CheckMembersForm: implicit ctor line should be first", m)) + | SynMemberDefn.ImplicitCtor (_, _, _, _, _, m) :: _ -> errorR(InternalError("CheckMembersForm: implicit ctor line should be first", m)) | SynMemberDefn.ImplicitInherit (_, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcInheritConstructionCallNotPartOfImplicitSequence(), m)) | SynMemberDefn.AutoProperty(_, _, _, _, _, _, _, _, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcAutoPropertyRequiresImplicitConstructionSequence(), m)) | SynMemberDefn.LetBindings (_, false, _, m) :: _ -> errorR(Error(FSComp.SR.tcLetAndDoRequiresImplicitConstructionSequence(), m)) @@ -17396,13 +17397,13 @@ module TcDeclarations = let hasSelfReferentialCtor = members |> List.exists (function - | SynMemberDefn.ImplicitCtor (_, _, _, thisIdOpt, _) + | SynMemberDefn.ImplicitCtor (_, _, _, thisIdOpt, _, _) | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(_, _, thisIdOpt), _, _, _, _, _), _) -> thisIdOpt.IsSome | _ -> false) let implicitCtorSynPats = members |> List.tryPick (function - | SynMemberDefn.ImplicitCtor (_, _, (SynSimplePats.SimplePats _ as spats), _, _) -> Some spats + | SynMemberDefn.ImplicitCtor (_, _, (SynSimplePats.SimplePats _ as spats), _, _, _) -> Some spats | _ -> None) // An ugly bit of code to pre-determine if a type has a nullary constructor, prior to establishing the @@ -17411,7 +17412,7 @@ module TcDeclarations = members |> List.exists (function | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), SynPatForConstructorDecl SynPatForNullaryArgs, _, _, _, _), _) -> memberFlags.MemberKind=MemberKind.Constructor - | SynMemberDefn.ImplicitCtor (_, _, SynSimplePats.SimplePats(spats, _), _, _) -> isNil spats + | SynMemberDefn.ImplicitCtor (_, _, SynSimplePats.SimplePats(spats, _), _, _, _) -> isNil spats | _ -> false) let repr = SynTypeDefnSimpleRepr.General(kind, inherits, slotsigs, fields, isConcrete, isIncrClass, implicitCtorSynPats, m) let isAtOriginalTyconDefn = not (isAugmentationTyconDefnRepr repr) diff --git a/src/fsharp/TypedTree.fs b/src/fsharp/TypedTree.fs index a9ec4066669..2c9a2b2e8ce 100644 --- a/src/fsharp/TypedTree.fs +++ b/src/fsharp/TypedTree.fs @@ -4370,6 +4370,9 @@ type ValReprInfo = | (_ :: _ :: h) :: t -> loop t (acc + h.Length + 2) loop args 0 + member x.ArgNames = + Some [ for argtys in x.ArgInfos do for arginfo in argtys do match arginfo.Name with None -> () | Some nm -> nm.idText ] + [] member x.DebugText = x.ToString() diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 1c95d60cf5c..6888e9574e0 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -107,7 +107,7 @@ type XmlDoc(unprocessedLines: string[], range: range) = if paramsWithDocs.Length > 0 then for p in paramNames do if not (paramsWithDocs |> List.contains p) then - warning (Error (FSComp.SR.xmlDocMissingParameterDoc(nm), doc.Range)) + warning (Error (FSComp.SR.xmlDocMissingParameterDoc(p), doc.Range)) for pref in xml.Descendants(XName.op_Implicit "paramref") do match pref.Attribute(XName.op_Implicit "name") with diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index 88a334e927e..2f1bcf56641 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -1512,7 +1512,9 @@ tyconDefn: let nameRange = rhs parseState 1 let (tcDefRepr, members) = $8 nameRange let (ComponentInfo(_, _, _, lid, _, _, _, _)) = $1 - let memberCtorPattern = SynMemberDefn.ImplicitCtor (vis, $2, spats, az, rangeOfLid lid) + // Gets the XML doc comments prior to the implicit constructor + let xmlDoc = grabXmlDoc(parseState, 5) + let memberCtorPattern = SynMemberDefn.ImplicitCtor (vis, $2, spats, az, xmlDoc, rangeOfLid lid) let tcDefRepr = match tcDefRepr with | SynTypeDefnRepr.ObjectModel (k, cspec, m) -> SynTypeDefnRepr.ObjectModel (k, memberCtorPattern :: cspec, m) diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index 49a50e38180..b1406baadae 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -767,10 +767,11 @@ module ParsedInput = walkTypeDefnSigRepr repr List.iter walkMemberSig memberSigs - and walkMember = function + and walkMember memb = + match memb with | SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig | SynMemberDefn.Member (binding, _) -> walkBinding binding - | SynMemberDefn.ImplicitCtor (_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _) -> + | SynMemberDefn.ImplicitCtor (_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _, _) -> List.iter walkAttribute attrs List.iter walkSimplePat simplePats | SynMemberDefn.ImplicitInherit (t, e, _, _) -> walkType t; walkExpr e diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs index 500b93c22ab..7c2db37b98f 100755 --- a/src/fsharp/service/ServiceParseTreeWalk.fs +++ b/src/fsharp/service/ServiceParseTreeWalk.fs @@ -682,7 +682,7 @@ module public AstTraversal = match m with | SynMemberDefn.Open(_longIdent, _range) -> None | SynMemberDefn.Member(synBinding, _range) -> traverseSynBinding path synBinding - | SynMemberDefn.ImplicitCtor(_synAccessOption, _synAttributes, simplePats, _identOption, _range) -> + | SynMemberDefn.ImplicitCtor(_synAccessOption, _synAttributes, simplePats, _identOption, _doc, _range) -> match simplePats with | SynSimplePats.SimplePats(simplePats, _) -> visitor.VisitSimplePats(simplePats) | _ -> None diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceUntypedParse.fs index c8d14e6af18..3342650b5ae 100755 --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -359,7 +359,7 @@ type FSharpParseFileResults(errors: FSharpErrorInfo[], input: ParsedInput option [ match memb with | SynMemberDefn.LetBindings(binds, _, _, _) -> yield! walkBinds binds | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> yield! walkExpr true synExpr - | SynMemberDefn.ImplicitCtor(_, _, _, _, m) -> yield! checkRange m + | SynMemberDefn.ImplicitCtor(_, _, _, _, _, m) -> yield! checkRange m | SynMemberDefn.Member(bind, _) -> yield! walkBind bind | SynMemberDefn.Interface(_, Some membs, _) -> for m in membs do yield! walkMember m | SynMemberDefn.Inherit(_, _, m) -> @@ -933,7 +933,7 @@ module UntypedParseImpl = and walkMember = function | SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig | SynMemberDefn.Member(binding, _) -> walkBinding binding - | SynMemberDefn.ImplicitCtor(_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _) -> + | SynMemberDefn.ImplicitCtor(_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _, _) -> List.tryPick walkAttribute attrs |> Option.orElse (List.tryPick walkSimplePat simplePats) | SynMemberDefn.ImplicitInherit(t, e, _, _) -> walkType t |> Option.orElse (walkExpr e) | SynMemberDefn.LetBindings(bindings, _, _, _) -> List.tryPick walkBinding bindings diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index edabc8dea0c..a6fb91ccb46 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index a98a83fc0b9..546491d566d 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 8cdb2317155..c529a1455fe 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 37c596bfbda..39443716399 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index ab2480f330c..eebbcb63e3e 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 0bde15a3300..b1c64209c19 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 86793752ae5..aa8d435171e 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 4083260ab1c..1ce91bb0720 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index ddda811c071..c9363b328b6 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index b5b0e5a1658..13ddd64ed71 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index c018d0e4c5d..2d3dfc401e5 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 43efdff1ac3..cdb5999c03a 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 6098d76d98b..4d4bea516ab 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -528,8 +528,8 @@ - This XML comment is invalid: invalid parameter reference '{0}' - This XML comment is invalid: invalid parameter reference '{0}' + This XML comment is invalid: unknown parameter '{0}' + This XML comment is invalid: unknown parameter '{0}' @@ -538,8 +538,8 @@ - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' - This XML comment is invalid: some parameters have documentation, but no documentation has been given for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' + This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs index d642f5e8566..2a262a90fa6 100644 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs @@ -10,6 +10,6 @@ module Operators = [] let ``Validate that non generic (fast) code is emmitted for comparison involving decimals`` compilation = compilation - |> ignoreWarnings + |> warningsDoNotCauseFailure |> verifyBaseline |> verifyILBaseline \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs index 175a2a8b1fc..aadaa6f597b 100644 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs @@ -8,7 +8,8 @@ open FSharp.Test.Utilities.Compiler module ``Tail Calls`` = // Regression test for DevDiv:72571 - let private compileWithTailCalls = ignoreWarnings >> withOptions ["-g"; "--optimize-"; "--tailcalls+"] >> compile + let private compileWithTailCalls opts = + opts |> warningsDoNotCauseFailure |> withOptions ["-g"; "--optimize-"; "--tailcalls+"] |> compile [] let ``TailCall 01``() = diff --git a/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs index 0237a6d4d83..aa9e9fa0ef3 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs @@ -11,7 +11,7 @@ module ``Test Compiler Directives`` = let ``r# "" is invalid`` () = Fsx""" #r "" - """ |> ignoreWarnings + """ |> warningsDoNotCauseFailure |> compile |> shouldSucceed |> withSingleDiagnostic (Warning 213, Line 2, Col 1, Line 2, Col 6, "'' is not a valid assembly name") @@ -29,7 +29,6 @@ module ``Test compiler directives in FSI`` = let ``r# "" is invalid`` () = Fsx""" #r "" - """ |> ignoreWarnings - |> eval + """ |> eval |> shouldFail |> withSingleDiagnostic (Error 2301, Line 2, Col 1, Line 2, Col 6, "'' is not a valid assembly name") \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs index 8881d1a4712..dcb87e8d42e 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs @@ -22,7 +22,7 @@ module M = """ |> withXmlCommentChecking - |> ignoreWarnings // means "don't treat warnings as errors" + |> warningsDoNotCauseFailure |> compile |> shouldSucceed |> withDiagnostics @@ -34,17 +34,114 @@ module M = "This XML comment is invalid: 'Name cannot begin with the '\n' character, hexadecimal value 0x0A. Line 2, position 13.'") ] [] - let ``invalid parameter reference is reported`` () = + let ``unknown parameter is reported`` () = Fsx""" /// Return /// the parameter let f a = a """ |> withXmlCommentChecking - |> ignoreWarnings // means "don't treat warnings as errors" + |> warningsDoNotCauseFailure |> compile |> shouldSucceed |> withDiagnostics [ (Warning 3390, Line 2, Col 5, Line 3, Col 48, - "This XML comment is invalid: invalid parameter reference 'b'"); + "This XML comment is invalid: unknown parameter 'b'"); ] + + [] + let ``invalid parameter name is reported`` () = + Fsx""" + /// Return + /// the parameter + let f a = a + """ + |> withXmlCommentChecking + |> warningsDoNotCauseFailure + |> compile + |> shouldSucceed + |> withDiagnostics + [ (Warning 3390, Line 2, Col 5, Line 3, Col 48, + "This XML comment is invalid: unknown parameter 'b'"); + (Warning 3390, Line 2, Col 5, Line 3, Col 48, + "This XML comment is incomplete: no documentation for parameter 'a'"); + ] + + [] + let ``missing parameter name is reported`` () = + Fsx""" + /// Return + /// the parameter + let f a = a + """ + |> withXmlCommentChecking + |> warningsDoNotCauseFailure + |> compile + |> shouldSucceed + |> withDiagnostics + [ (Warning 3390, Line 2, Col 5, Line 3, Col 39, + "This XML comment is invalid: missing 'name' attribute for parameter or parameter reference"); + ] + + [] + let ``valid parameter names are not reported`` () = + Fsx""" + /// Return + /// the parameter + let f a = a + + /// The type + type C(x1: string, x2: string) = + let _unused = (x1, x2) + /// The instance method + /// the parameter + /// the other parameter + member x.M(p1: string, p2: string) = (p1, p2) + + /// The instance method + /// the other parameter + member x.OtherM((a,b): (string * string), p2: string) = ((a,b), p2) + """ + |> withXmlCommentChecking + |> warningsDoNotCauseFailure + |> compile + |> shouldSucceed + |> withDiagnostics [ ] + + [] + let ``valid parameter names are not reported for documented implicit constructor`` () = + Fsx""" + /// The type with an implicit constructor + type C + /// The constructor + /// the parameter + /// the other parameter + (x1: string, x2: string) = + let _unused = (x1, x2) + + member x.M(p1: string, p2: string) = (p1, p2) + """ + |> withXmlCommentChecking + |> warningsDoNotCauseFailure + |> compile + |> shouldSucceed + |> withDiagnostics [ ] + + [] + let ``valid parameter names are not reported for documented implicit constructor with visibility`` () = + Fsx""" + /// The type with an implicit constructor with visibility + type C + /// The constructor + /// the parameter + /// the other parameter + public (x1: string, x2: string) = + let _unused = (x1, x2) + + member x.M(p1: string, p2: string) = (p1, p2) + """ + |> withXmlCommentChecking + |> warningsDoNotCauseFailure + |> compile + |> shouldSucceed + |> withDiagnostics [ ] diff --git a/tests/FSharp.Test.Utilities/Compiler.fs b/tests/FSharp.Test.Utilities/Compiler.fs index 8080a23b599..ede50dca1bf 100644 --- a/tests/FSharp.Test.Utilities/Compiler.fs +++ b/tests/FSharp.Test.Utilities/Compiler.fs @@ -39,7 +39,7 @@ module rec Compiler = OutputType: CompileOutput SourceKind: SourceKind Name: string option - IgnoreWarnings: bool + WarningsCauseFailure: bool References: CompilationUnit list } override this.ToString() = match this.Name with | Some n -> n | _ -> (sprintf "%A" this) @@ -109,7 +109,7 @@ module rec Compiler = OutputType = Library SourceKind = kind Name = None - IgnoreWarnings = false + WarningsCauseFailure = true References = [] } let private csFromString (source: string) : CSharpCompilationSource = @@ -208,9 +208,9 @@ module rec Compiler = | FS fs -> FS { fs with OutputType = CompileOutput.Exe } | _ -> failwith "TODO: Implement where applicable." - let ignoreWarnings (cUnit: CompilationUnit) : CompilationUnit = + let warningsDoNotCauseFailure (cUnit: CompilationUnit) : CompilationUnit = match cUnit with - | FS fs -> FS { fs with IgnoreWarnings = true } + | FS fs -> FS { fs with WarningsCauseFailure = false } | _ -> failwith "TODO: Implement ignorewarnings for the rest." let rec private asMetadataReference reference = @@ -249,9 +249,9 @@ module rec Compiler = | IL _ -> failwith "TODO: Process references for IL" loop [] references - let private compileFSharpCompilation compilation ignoreWarnings : TestResult = + let private compileFSharpCompilation compilation warningsCauseFailure : TestResult = - let ((err: FSharpErrorInfo[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, ignoreWarnings) + let ((err: FSharpErrorInfo[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, warningsCauseFailure) let diagnostics = err |> fromFSharpErrorInfo @@ -264,8 +264,8 @@ module rec Compiler = let (errors, warnings) = partitionErrors diagnostics - // Treat warnings as errors if "IgnoreWarnings" is false - if errors.Length > 0 || (warnings.Length > 0 && not ignoreWarnings) then + // Treat warnings as errors if "warningsCauseFailure" is true + if errors.Length > 0 || (warnings.Length > 0 && warningsCauseFailure) then Failure result else Success { result with OutputPath = Some outputFilePath } @@ -281,7 +281,7 @@ module rec Compiler = let compilation = Compilation.Create(source, sourceKind, output, options, references) - compileFSharpCompilation compilation fsSource.IgnoreWarnings + compileFSharpCompilation compilation fsSource.WarningsCauseFailure let private compileCSharpCompilation (compilation: CSharpCompilation) : TestResult = @@ -388,8 +388,8 @@ module rec Compiler = let (errors, warnings) = partitionErrors diagnostics - // Treat warnings as errors if "IgnoreWarnings" is false; - if errors.Length > 0 || (warnings.Length > 0 && not fsSource.IgnoreWarnings) then + // Treat warnings as errors if "WarningsCauseFailure" is false; + if errors.Length > 0 || (warnings.Length > 0 && not fsSource.WarningsCauseFailure) then Failure result else Success result @@ -440,7 +440,7 @@ module rec Compiler = let evalError = match evalresult with Ok _ -> false | _ -> true - if evalError || errors.Length > 0 || (warnings.Length > 0 && not fs.IgnoreWarnings) then + if evalError || errors.Length > 0 || (warnings.Length > 0 && not fs.WarningsCauseFailure) then Failure result else Success result diff --git a/tests/FSharp.Test.Utilities/CompilerAssert.fs b/tests/FSharp.Test.Utilities/CompilerAssert.fs index 843d6d58399..0f4ec0eaf72 100644 --- a/tests/FSharp.Test.Utilities/CompilerAssert.fs +++ b/tests/FSharp.Test.Utilities/CompilerAssert.fs @@ -263,10 +263,10 @@ let main argv = 0""" o.Dispose() reraise() - static let assertErrors libAdjust ignoreWarnings (errors: FSharpErrorInfo []) expectedErrors = + static let assertErrors libAdjust warningsDoNotCauseFailure (errors: FSharpErrorInfo []) expectedErrors = let errors = errors - |> Array.filter (fun error -> if ignoreWarnings then error.Severity <> FSharpErrorSeverity.Warning else true) + |> Array.filter (fun error -> if warningsDoNotCauseFailure then error.Severity <> FSharpErrorSeverity.Warning else true) |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) |> Array.map (fun info -> (info.Severity, info.ErrorNumber, (info.StartLineAlternate - libAdjust, info.StartColumn + 1, info.EndLineAlternate - libAdjust, info.EndColumn + 1), info.Message)) @@ -293,7 +293,7 @@ let main argv = 0""" static let compile isExe options source f = lock gate (fun _ -> compileAux isExe options source f) - static let rec compileCompilationAux outputPath (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = + static let rec compileCompilationAux outputPath (disposals: ResizeArray) warningsDoNotCauseFailure (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = let compilationRefs, deps = match cmpl with | Compilation(_, _, _, _, cmpls, _) -> @@ -302,7 +302,7 @@ let main argv = 0""" |> List.map (fun cmpl -> match cmpl with | CompilationReference (cmpl, staticLink) -> - compileCompilationAux outputPath disposals ignoreWarnings cmpl, staticLink + compileCompilationAux outputPath disposals warningsDoNotCauseFailure cmpl, staticLink | TestCompilationReference (cmpl) -> let filename = match cmpl with @@ -318,7 +318,7 @@ let main argv = 0""" let compilationRefs = compiledRefs |> List.map (fun (((errors, outputFilePath), _), staticLink) -> - assertErrors 0 ignoreWarnings errors [||] + assertErrors 0 warningsDoNotCauseFailure errors [||] let rOption = "-r:" + outputFilePath if staticLink then [rOption;"--staticlink:" + Path.GetFileNameWithoutExtension outputFilePath] diff --git a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs index f3e6ffb7931..d3a607ab1d7 100644 --- a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs +++ b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs @@ -47,7 +47,7 @@ type DirectoryAttribute(dir: string) = OutputType = Library SourceKind = SourceKind.Fsx Name = Some fs - IgnoreWarnings = false + WarningsCauseFailure = true References = [] } |> FS override _.GetData(_: MethodInfo) = diff --git a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs index e265a16a8ae..6bc8ef03ed5 100644 --- a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs +++ b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs @@ -2264,7 +2264,7 @@ let main _ = #load @"%s" """ (dir ++ "provider.fsx")) |> withName "provider" - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let provided = @@ -2272,7 +2272,7 @@ let main _ = #load @"%s" """ (dir ++ "provided.fs")) |> withName "provided" - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let test = @@ -2290,7 +2290,7 @@ if StaticProperty1 <> "You got a static property" then failwith "failed" """ |> asExe - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview |> withReferences [provider;provided] @@ -2306,7 +2306,7 @@ if StaticProperty1 <> "You got a static property" then #load @"%s" """ (dir ++ "provider.fsx")) |> withName "provider" - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let provided = @@ -2314,7 +2314,7 @@ if StaticProperty1 <> "You got a static property" then #load @"%s" """ (dir ++ "provided.fs")) |> withName "provided" - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let test = @@ -2330,7 +2330,7 @@ if StaticProperty1 <> "You got a static property" then failwith "failed" """ |> asExe - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview |> withReferences [provider;provided] @@ -2347,7 +2347,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provider.fsx")) |> withName "provider" |> withLangVersionPreview - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let provided = @@ -2356,7 +2356,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provided.fs")) |> withName "provided" |> withLangVersionPreview - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let test = @@ -2367,7 +2367,7 @@ if StaticProperty1 <> "You got a static property" then failwith "failed" """ |> asExe - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview |> withReferences [provider;provided] @@ -2384,7 +2384,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provider.fsx")) |> withName "provider" |> withLangVersionPreview - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let provided = @@ -2393,7 +2393,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provided.fs")) |> withName "provided" |> withLangVersionPreview - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let test = @@ -2407,7 +2407,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> |> asExe |> withLangVersionPreview |> withReferences [provider;provided] - |> ignoreWarnings + |> warningsDoNotCauseFailure compileAndRun test |> ignore @@ -2422,7 +2422,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> """ (dir ++ "provider.fsx")) |> withName "provider" |> withLangVersionPreview - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let provided = @@ -2431,7 +2431,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> """ (dir ++ "provided.fs")) |> withName "provided" |> withLangVersionPreview - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview let test = @@ -2443,7 +2443,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> |> asExe |> withLangVersionPreview |> withReferences [provider;provided] - |> ignoreWarnings + |> warningsDoNotCauseFailure compile test |> withDiagnostics diff --git a/tests/fsharp/Compiler/Language/WitnessTests.fs b/tests/fsharp/Compiler/Language/WitnessTests.fs index 4b7f7521220..75608df8237 100644 --- a/tests/fsharp/Compiler/Language/WitnessTests.fs +++ b/tests/fsharp/Compiler/Language/WitnessTests.fs @@ -18,7 +18,7 @@ module WitnessTests = #load @"%s" """ (dir ++ "provider.fsx")) |> asExe - |> ignoreWarnings + |> warningsDoNotCauseFailure |> withLangVersionPreview |> compile |> shouldSucceed From 77e22e0f43bb1541938757cacb9576a895a82f3a Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 16:29:08 +0100 Subject: [PATCH 09/26] allow delegate param doc --- src/fsharp/TypeChecker.fs | 7 ++++++- .../Language/XmlComments.fs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 02a9f97528b..50dfa1b36f5 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -15899,7 +15899,12 @@ module EstablishTypeDefinitionCores = // If we supported nested types and modules then additions would be needed here let lmtyp = MaybeLazy.Strict (Construct.NewEmptyModuleOrNamespaceType ModuleOrType) - let doc = doc.ToXmlDoc(true, Some [] ) + // '' documentation is allowed for delegates + let paramNames = + match synTyconRepr with + | SynTypeDefnSimpleRepr.General (TyconDelegate (_ty, arity), _, _, _, _, _, _, _) -> arity.ArgNames + | _ -> [] + let doc = doc.ToXmlDoc(true, Some paramNames ) Construct.NewTycon (cpath, id.idText, id.idRange, vis, visOfRepr, TyparKind.Type, LazyWithContext.NotLazy checkedTypars, doc, preferPostfix, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, lmtyp) diff --git a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs index dcb87e8d42e..fa9321a6dbf 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs @@ -145,3 +145,17 @@ module M = |> compile |> shouldSucceed |> withDiagnostics [ ] + + [] + let ``delegates can have param docs`` () = + Fsx""" + /// The type with an implicit constructor with visibility + /// The sender + /// The args + type C = delegate of sender: obj * args: int -> C + """ + |> withXmlCommentChecking + |> warningsDoNotCauseFailure + |> compile + |> shouldSucceed + |> withDiagnostics [ ] From 7cd0ea3f9f13d5c168de77056dc55c28886eadc7 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 16:29:48 +0100 Subject: [PATCH 10/26] fix FSHarp.Core doc problems --- src/fsharp/FSharp.Core/FSharp.Core.fsproj | 2 +- src/fsharp/FSharp.Core/array.fsi | 4 +- src/fsharp/FSharp.Core/async.fsi | 1 + src/fsharp/FSharp.Core/eventmodule.fsi | 2 +- src/fsharp/FSharp.Core/list.fsi | 2 +- src/fsharp/FSharp.Core/map.fsi | 3 +- src/fsharp/FSharp.Core/nativeptr.fsi | 6 +- src/fsharp/FSharp.Core/observable.fsi | 2 +- src/fsharp/FSharp.Core/option.fsi | 50 ++++++++-------- src/fsharp/FSharp.Core/prim-types.fsi | 70 ++++++++++++----------- src/fsharp/FSharp.Core/seq.fsi | 4 +- 11 files changed, 76 insertions(+), 70 deletions(-) diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 28f398848e0..9aa06a0a61e 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -9,7 +9,7 @@ true $(DefineConstants);FSHARP_CORE BUILDING_WITH_LKG;$(DefineConstants) - $(OtherFlags) --warnon:1182 --warnon:3390 --compiling-fslib --compiling-fslib-40 --maxerrors:20 --extraoptimizationloops:1 --nowarn:57 + $(OtherFlags) --warnon:1182 --warnon:3390 --compiling-fslib --compiling-fslib-40 --maxerrors:100 --extraoptimizationloops:1 --nowarn:57 true true diff --git a/src/fsharp/FSharp.Core/array.fsi b/src/fsharp/FSharp.Core/array.fsi index f47baa49e2b..1d0ef4210f1 100644 --- a/src/fsharp/FSharp.Core/array.fsi +++ b/src/fsharp/FSharp.Core/array.fsi @@ -1010,7 +1010,7 @@ namespace Microsoft.FSharp.Collections /// the remaining elements in a new array. /// /// A function that evaluates an element of the array to a boolean value. - /// The input array. + /// The input array. /// /// The created sub array. /// @@ -1293,7 +1293,7 @@ namespace Microsoft.FSharp.Collections /// Returns None if index is negative or the input array does not contain enough elements. /// /// The index of element to retrieve. - /// The input array. + /// The input array. /// /// The nth element of the array or None. /// diff --git a/src/fsharp/FSharp.Core/async.fsi b/src/fsharp/FSharp.Core/async.fsi index 5fea2c1a81d..0d2a1867fa5 100644 --- a/src/fsharp/FSharp.Core/async.fsi +++ b/src/fsharp/FSharp.Core/async.fsi @@ -229,6 +229,7 @@ namespace Microsoft.FSharp.Control /// for the other child computations to complete. /// /// A sequence of distinct computations to be parallelized. + /// The maximum degree of parallelism in the parallel execution. /// /// A computation that returns an array of values from the sequence of input computations. /// diff --git a/src/fsharp/FSharp.Core/eventmodule.fsi b/src/fsharp/FSharp.Core/eventmodule.fsi index b4ea1078fe4..4e520b559f6 100644 --- a/src/fsharp/FSharp.Core/eventmodule.fsi +++ b/src/fsharp/FSharp.Core/eventmodule.fsi @@ -22,7 +22,7 @@ namespace Microsoft.FSharp.Control /// Returns a new event that passes values transformed by the given function. /// - /// The function to transform event values. + /// The function to transform event values. /// The input event. /// /// An event that passes the transformed values. diff --git a/src/fsharp/FSharp.Core/list.fsi b/src/fsharp/FSharp.Core/list.fsi index c4c560fb858..bbab64c1c80 100644 --- a/src/fsharp/FSharp.Core/list.fsi +++ b/src/fsharp/FSharp.Core/list.fsi @@ -956,7 +956,7 @@ namespace Microsoft.FSharp.Collections /// Returns at most N elements in a new list. /// /// The maximum number of items to return. - /// The input list. + /// The input list. /// /// The result list. [] diff --git a/src/fsharp/FSharp.Core/map.fsi b/src/fsharp/FSharp.Core/map.fsi index 2f0360bf4cb..ebadc8f1a33 100644 --- a/src/fsharp/FSharp.Core/map.fsi +++ b/src/fsharp/FSharp.Core/map.fsi @@ -18,7 +18,8 @@ namespace Microsoft.FSharp.Collections type Map<[]'Key,[]'Value when 'Key : comparison> = /// Returns a new map with the binding added to the given map. /// If a binding with the given key already exists in the input map, the existing binding is replaced by the new binding in the result map. - /// The input key. + /// The key to add. + /// The value to add. /// /// The resulting map. member Add: key:'Key * value:'Value -> Map<'Key,'Value> diff --git a/src/fsharp/FSharp.Core/nativeptr.fsi b/src/fsharp/FSharp.Core/nativeptr.fsi index a90abcdbfba..10ed7c3bd1f 100644 --- a/src/fsharp/FSharp.Core/nativeptr.fsi +++ b/src/fsharp/FSharp.Core/nativeptr.fsi @@ -41,7 +41,7 @@ namespace Microsoft.FSharp.NativeInterop /// The untyped pointer. /// /// A typed pointer. - val inline ofVoidPtr : voidptr -> nativeptr<'T> + val inline ofVoidPtr : address: voidptr -> nativeptr<'T> [] [] @@ -109,7 +109,7 @@ namespace Microsoft.FSharp.NativeInterop /// A typed pointer to the allocated memory. [] [] - val inline stackalloc : count:int -> nativeptr<'T> + val inline stackalloc: count:int -> nativeptr<'T> /// Converts a given typed native pointer to a managed pointer. /// @@ -118,4 +118,4 @@ namespace Microsoft.FSharp.NativeInterop /// The managed pointer. [] [] - val inline toByRef : nativeptr<'T> -> byref<'T> + val inline toByRef: address: nativeptr<'T> -> byref<'T> diff --git a/src/fsharp/FSharp.Core/observable.fsi b/src/fsharp/FSharp.Core/observable.fsi index 5a8ee380b76..bf3c218de57 100644 --- a/src/fsharp/FSharp.Core/observable.fsi +++ b/src/fsharp/FSharp.Core/observable.fsi @@ -43,7 +43,7 @@ namespace Microsoft.FSharp.Control /// each subscribed observer. The returned object also propagates error /// observations arising from the source and completes when the source completes. /// - /// The function to apply to observations to determine if it should + /// The function to apply to observations to determine if it should /// be kept. /// The input Observable. /// diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index cff21e535b6..ffbba93bcc2 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -161,7 +161,7 @@ module Option = /// /// An option of the input values after applying the mapping function, or None if either input is None. [] - val map2: mapping:('T1 -> 'T2 -> 'U) -> 'T1 option -> 'T2 option -> 'U option + val map2: mapping:('T1 -> 'T2 -> 'U) -> option1: 'T1 option -> option2: 'T2 option -> 'U option /// map f option1 option2 option3 evaluates to match option1, option2, option3 with Some x, Some y, Some z -> Some (f x y z) | _ -> None. /// @@ -172,7 +172,7 @@ module Option = /// /// An option of the input values after applying the mapping function, or None if any input is None. [] - val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> 'T1 option -> 'T2 option -> 'T3 option -> 'U option + val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> option1: 'T1 option -> option2: 'T2 option -> option3: 'T3 option -> 'U option /// bind f inp evaluates to match inp with None -> None | Some x -> f x /// @@ -260,7 +260,7 @@ module ValueOption = /// /// True if the value option is not ValueNone. [] - val inline isSome: voption:'T voption -> bool + val inline isSome: voption: 'T voption -> bool /// Returns true if the value option is ValueNone. /// @@ -268,7 +268,7 @@ module ValueOption = /// /// True if the voption is ValueNone. [] - val inline isNone: voption:'T voption -> bool + val inline isNone: voption: 'T voption -> bool /// Gets the value of the value option if the option is ValueSome, otherwise returns the specified default value. /// @@ -278,7 +278,7 @@ module ValueOption = /// The voption if the voption is ValueSome, else the default value. /// Identical to the built-in operator, except with the arguments swapped. [] - val defaultValue: value:'T -> voption:'T voption -> 'T + val defaultValue: value:'T -> voption: 'T voption -> 'T /// Gets the value of the voption if the voption is ValueSome, otherwise evaluates and returns the result. /// @@ -288,16 +288,16 @@ module ValueOption = /// The voption if the voption is ValueSome, else the result of evaluating . /// is not evaluated unless is ValueNone. [] - val defaultWith: defThunk:(unit -> 'T) -> voption:'T voption -> 'T + val defaultWith: defThunk:(unit -> 'T) -> voption: 'T voption -> 'T /// Returns if it is Some, otherwise returns . /// /// The value to use if is None. - /// The input option. + /// The input option. /// /// The option if the option is Some, else the alternate option. [] - val orElse: ifNone:'T voption -> voption:'T voption -> 'T voption + val orElse: ifNone:'T voption -> voption: 'T voption -> 'T voption /// Returns if it is Some, otherwise evaluates and returns the result. /// @@ -307,7 +307,7 @@ module ValueOption = /// The voption if the voption is ValueSome, else the result of evaluating . /// is not evaluated unless is ValueNone. [] - val orElseWith: ifNoneThunk:(unit -> 'T voption) -> voption:'T voption -> 'T voption + val orElseWith: ifNoneThunk:(unit -> 'T voption) -> voption: 'T voption -> 'T voption /// Gets the value associated with the option. /// @@ -316,7 +316,7 @@ module ValueOption = /// The value within the option. /// Thrown when the option is ValueNone. [] - val get: voption:'T voption -> 'T + val get: voption: 'T voption -> 'T /// count inp evaluates to match inp with ValueNone -> 0 | ValueSome _ -> 1. /// @@ -324,7 +324,7 @@ module ValueOption = /// /// A zero if the option is ValueNone, a one otherwise. [] - val count: voption:'T voption -> int + val count: voption: 'T voption -> int /// fold f s inp evaluates to match inp with ValueNone -> s | ValueSome x -> f s x. /// @@ -335,7 +335,7 @@ module ValueOption = /// The original state if the option is ValueNone, otherwise it returns the updated state with the folder /// and the voption value. [] - val fold<'T,'State> : folder:('State -> 'T -> 'State) -> state:'State -> voption:'T voption -> 'State + val fold<'T,'State> : folder:('State -> 'T -> 'State) -> state:'State -> voption: 'T voption -> 'State /// fold f inp s evaluates to match inp with ValueNone -> s | ValueSome x -> f x s. /// @@ -346,7 +346,7 @@ module ValueOption = /// The original state if the option is ValueNone, otherwise it returns the updated state with the folder /// and the voption value. [] - val foldBack<'T,'State> : folder:('T -> 'State -> 'State) -> voption:'T voption -> state:'State -> 'State + val foldBack<'T,'State> : folder:('T -> 'State -> 'State) -> voption: 'T voption -> state:'State -> 'State /// exists p inp evaluates to match inp with ValueNone -> false | ValueSome x -> p x. /// @@ -356,7 +356,7 @@ module ValueOption = /// False if the option is ValueNone, otherwise it returns the result of applying the predicate /// to the option value. [] - val exists: predicate:('T -> bool) -> voption:'T voption -> bool + val exists: predicate:('T -> bool) -> voption: 'T voption -> bool /// forall p inp evaluates to match inp with ValueNone -> true | ValueSome x -> p x. /// @@ -366,7 +366,7 @@ module ValueOption = /// True if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] - val forall: predicate:('T -> bool) -> voption:'T voption -> bool + val forall: predicate:('T -> bool) -> voption: 'T voption -> bool /// Evaluates to true if is ValueSome and its value is equal to . /// @@ -375,7 +375,7 @@ module ValueOption = /// /// True if the option is ValueSome and contains a value equal to , otherwise false. [] - val inline contains: value:'T -> voption:'T voption -> bool when 'T : equality + val inline contains: value:'T -> voption: 'T voption -> bool when 'T : equality /// iter f inp executes match inp with ValueNone -> () | ValueSome x -> f x. /// @@ -385,7 +385,7 @@ module ValueOption = /// Unit if the option is ValueNone, otherwise it returns the result of applying the predicate /// to the voption value. [] - val iter: action:('T -> unit) -> voption:'T voption -> unit + val iter: action:('T -> unit) -> voption: 'T voption -> unit /// map f inp evaluates to match inp with ValueNone -> ValueNone | ValueSome x -> ValueSome (f x). /// @@ -394,7 +394,7 @@ module ValueOption = /// /// A value option of the input value after applying the mapping function, or ValueNone if the input is ValueNone. [] - val map: mapping:('T -> 'U) -> voption:'T voption -> 'U voption + val map: mapping:('T -> 'U) -> voption: 'T voption -> 'U voption /// map f voption1 voption2 evaluates to match voption1, voption2 with ValueSome x, ValueSome y -> ValueSome (f x y) | _ -> ValueNone. /// @@ -415,7 +415,7 @@ module ValueOption = /// /// A value option of the input values after applying the mapping function, or ValueNone if any input is ValueNone. [] - val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> 'T1 voption -> 'T2 voption -> 'T3 voption -> 'U voption + val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> voption1: 'T1 voption -> voption2: 'T2 voption -> voption3: 'T3 voption -> 'U voption /// bind f inp evaluates to match inp with ValueNone -> ValueNone | ValueSome x -> f x /// @@ -425,7 +425,7 @@ module ValueOption = /// /// An option of the output type of the binder. [] - val bind: binder:('T -> 'U voption) -> voption:'T voption -> 'U voption + val bind: binder:('T -> 'U voption) -> voption: 'T voption -> 'U voption /// flatten inp evaluates to match inp with ValueNone -> ValueNone | ValueSome x -> x /// @@ -434,7 +434,7 @@ module ValueOption = /// A value option of the output type of the binder. /// flatten is equivalent to bind id. [] - val flatten: voption:'T voption voption -> 'T voption + val flatten: voption: 'T voption voption -> 'T voption /// filter f inp evaluates to match inp with ValueNone -> ValueNone | ValueSome x -> if f x then ValueSome x else ValueNone. /// @@ -443,7 +443,7 @@ module ValueOption = /// /// The input if the predicate evaluates to true; otherwise, ValueNone. [] - val filter: predicate:('T -> bool) -> voption:'T voption -> 'T voption + val filter: predicate:('T -> bool) -> voption: 'T voption -> 'T voption /// Convert the value option to an array of length 0 or 1. /// @@ -451,7 +451,7 @@ module ValueOption = /// /// The result array. [] - val toArray: voption:'T voption -> 'T[] + val toArray: voption: 'T voption -> 'T[] /// Convert the value option to a list of length 0 or 1. /// @@ -459,7 +459,7 @@ module ValueOption = /// /// The result list. [] - val toList: voption:'T voption -> 'T list + val toList: voption: 'T voption -> 'T list /// Convert the value option to a Nullable value. /// @@ -467,7 +467,7 @@ module ValueOption = /// /// The result value. [] - val toNullable: voption:'T voption -> Nullable<'T> + val toNullable: voption: 'T voption -> Nullable<'T> /// Convert a Nullable value to a value option. /// diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index c886299fc0a..95092137fc5 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -667,6 +667,7 @@ namespace Microsoft.FSharp.Core /// Creates an instance of the attribute /// /// Indicates the type of source construct. + /// Indicates the index in the sequence of constructs. /// /// CompilationMappingAttribute new : sourceConstructFlags:SourceConstructFlags * sequenceNumber: int -> CompilationMappingAttribute @@ -674,6 +675,8 @@ namespace Microsoft.FSharp.Core /// Creates an instance of the attribute /// /// Indicates the type of source construct. + /// Indicates the index in the sequence of variants. + /// Indicates the index in the sequence of constructs. /// /// CompilationMappingAttribute new : sourceConstructFlags:SourceConstructFlags * variantNumber : int * sequenceNumber : int -> CompilationMappingAttribute @@ -681,6 +684,7 @@ namespace Microsoft.FSharp.Core /// Creates an instance of the attribute /// /// Indicates the type definitions needed to resolve the source construct. + /// The name of the resource needed to resolve the source construct. /// /// CompilationMappingAttribute new : resourceName:string * typeDefinitions:System.Type[] -> CompilationMappingAttribute @@ -1227,59 +1231,59 @@ namespace Microsoft.FSharp.Core /// Creates a float value with units-of-measure /// - /// The input float. + /// The input float. /// /// The float with units-of-measure. - val inline FloatWithMeasure : float -> float<'Measure> + val inline FloatWithMeasure : input: float -> float<'Measure> /// Creates a float32 value with units-of-measure /// - /// The input float. + /// The input float. /// /// The float with units-of-measure. - val inline Float32WithMeasure : float32 -> float32<'Measure> + val inline Float32WithMeasure : input: float32 -> float32<'Measure> /// Creates a decimal value with units-of-measure /// - /// The input decimal. + /// The input decimal. /// /// The decimal with units of measure. - val inline DecimalWithMeasure : decimal -> decimal<'Measure> + val inline DecimalWithMeasure : input: decimal -> decimal<'Measure> /// Creates an int32 value with units-of-measure /// - /// The input int. + /// The input int. /// /// The int with units of measure. - val inline Int32WithMeasure : int -> int<'Measure> + val inline Int32WithMeasure : input: int -> int<'Measure> /// Creates an int64 value with units-of-measure /// - /// The input int64. + /// The input int64. /// /// The int64 with units of measure. - val inline Int64WithMeasure : int64 -> int64<'Measure> + val inline Int64WithMeasure : input: int64 -> int64<'Measure> /// Creates an int16 value with units-of-measure /// - /// The input int16. + /// The input int16. /// /// The int16 with units-of-measure. - val inline Int16WithMeasure : int16 -> int16<'Measure> + val inline Int16WithMeasure : input: int16 -> int16<'Measure> /// Creates an sbyte value with units-of-measure /// - /// The input sbyte. + /// The input sbyte. /// /// The sbyte with units-of-measure. - val inline SByteWithMeasure : sbyte -> sbyte<'Measure> + val inline SByteWithMeasure : input: sbyte -> sbyte<'Measure> /// Parse an int32 according to the rules used by the overloaded 'int32' conversion operator when applied to strings /// /// The input string. /// /// The parsed value. - val ParseInt32 : s:string -> int32 + val ParseInt32 : s: string -> int32 /// Parse an uint32 according to the rules used by the overloaded 'uint32' conversion operator when applied to strings /// @@ -1946,42 +1950,42 @@ namespace Microsoft.FSharp.Core /// Convert the given Action delegate object to an F# function value /// - /// The input Action delegate. + /// The input Action delegate. /// /// The F# function. static member inline FromAction : action:Action -> (unit -> unit) /// Convert the given Action delegate object to an F# function value /// - /// The input Action delegate. + /// The input Action delegate. /// /// The F# function. static member inline FromAction : action:Action<'T> -> ('T -> unit) /// Convert the given Action delegate object to an F# function value /// - /// The input Action delegate. + /// The input Action delegate. /// /// The F#funcfunction. static member inline FromAction : action:Action<'T1,'T2> -> ('T1 -> 'T2 -> unit) /// Convert the given Action delegate object to an F# function value /// - /// The input Action delegate. + /// The input Action delegate. /// /// The F# function. static member inline FromAction : action:Action<'T1,'T2,'T3> -> ('T1 -> 'T2 -> 'T3 -> unit) /// Convert the given Action delegate object to an F# function value /// - /// The input Action delegate. + /// The input Action delegate. /// /// The F# function. static member inline FromAction : action:Action<'T1,'T2,'T3,'T4> -> ('T1 -> 'T2 -> 'T3 -> 'T4 -> unit) /// Convert the given Action delegate object to an F# function value /// - /// The input Action delegate. + /// The input Action delegate. /// /// The F# function. static member inline FromAction : action:Action<'T1,'T2,'T3,'T4,'T5> -> ('T1 -> 'T2 -> 'T3 -> 'T4 -> 'T5 -> unit) @@ -2292,7 +2296,7 @@ namespace Microsoft.FSharp.Core /// The representation of "Value of type 'T" /// - /// The input value. + /// The input value. /// /// An option representing the value. | ValueSome: 'T -> 'T voption @@ -3724,11 +3728,11 @@ namespace Microsoft.FSharp.Core /// Sets a 1D slice of a 3D array. /// - /// The source array. - /// The start index of the first dimension. - /// The end index of the first dimension. + /// The target array. + /// The fixed index of the first dimension. /// The fixed index of the second dimension. - /// The fixed index of the third dimension. + /// The start index of the third dimension. + /// The end index of the third dimension. /// The source array. /// /// The one dimensional sub array from the given indices. @@ -3737,7 +3741,7 @@ namespace Microsoft.FSharp.Core /// Sets a 1D slice of a 3D array. /// - /// The source array. + /// The target array. /// The fixed index of the first dimension. /// The start index of the second dimension. /// The end index of the second dimension. @@ -3750,7 +3754,7 @@ namespace Microsoft.FSharp.Core /// Sets a 1D slice of a 3D array. /// - /// The source array. + /// The target array. /// The start index of the first dimension. /// The end index of the first dimension. /// The fixed index of the second dimension. @@ -3958,9 +3962,9 @@ namespace Microsoft.FSharp.Core /// The one dimensional sub array from the given indices. val inline GetArraySlice4DFixedTriple1 : source:'T[,,,] -> start1:int option -> finish1:int option -> index2:int -> index3:int -> index4:int -> 'T[] - /// Gets a 3D slice of a 4D array + /// Sets a 3D slice of a 4D array /// - /// The source array. + /// The target array. /// The fixed index of the first dimension. /// The start index of the second dimension. /// The end index of the second dimension. @@ -4358,7 +4362,7 @@ namespace Microsoft.FSharp.Core /// /// The unboxed result. [] - val inline unbox<'T> : obj -> 'T + val inline unbox<'T> : value: obj -> 'T /// Generate a default value for any type. This is null for reference types, /// For structs, this is struct value where all fields have the default value. @@ -4466,7 +4470,7 @@ namespace Microsoft.FSharp.Core /// Calls GetHashCode() on the value /// - /// The value. + /// The value. /// /// The hash code. [] @@ -4718,7 +4722,7 @@ namespace Microsoft.FSharp.Control /// A delegate type associated with the F# event type IEvent<_> /// - /// The object that fired the event. + /// The object that fired the event. /// The event arguments. /// /// Events and Observables diff --git a/src/fsharp/FSharp.Core/seq.fsi b/src/fsharp/FSharp.Core/seq.fsi index d8f983de4b4..a8683b350a8 100644 --- a/src/fsharp/FSharp.Core/seq.fsi +++ b/src/fsharp/FSharp.Core/seq.fsi @@ -752,7 +752,7 @@ namespace Microsoft.FSharp.Collections /// /// The function to transform elements from the input collection and accumulate the final value. /// The initial state. - /// The input collection. + /// The input collection. /// /// Thrown when the input collection is null. /// @@ -767,7 +767,7 @@ namespace Microsoft.FSharp.Collections /// not be used with large or infinite sequences. /// /// The function to transform elements from the input collection and accumulate the final value. - /// The input collection. + /// The input collection. /// The initial state. /// /// Thrown when the input collection is null. From 04a8516569c7d53aaaad64ea87f8092b6d9a5b11 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 16:35:19 +0100 Subject: [PATCH 11/26] fix docs --- src/fsharp/FSharp.Core/option.fsi | 2 +- src/fsharp/FSharp.Core/seq.fsi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index ffbba93bcc2..8ef70b991df 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -292,7 +292,7 @@ module ValueOption = /// Returns if it is Some, otherwise returns . /// - /// The value to use if is None. + /// The value to use if is None. /// The input option. /// /// The option if the option is Some, else the alternate option. diff --git a/src/fsharp/FSharp.Core/seq.fsi b/src/fsharp/FSharp.Core/seq.fsi index a8683b350a8..e357da420f4 100644 --- a/src/fsharp/FSharp.Core/seq.fsi +++ b/src/fsharp/FSharp.Core/seq.fsi @@ -1092,7 +1092,7 @@ namespace Microsoft.FSharp.Collections /// sequence and uses a stable sort, that is the original order of equal elements is preserved. /// /// The function to compare the collection elements. - /// The input sequence. + /// The input sequence. /// /// The result sequence. [] From 276a3e6f2c575b538b9c391ddaac94c7513f30a5 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 16:38:02 +0100 Subject: [PATCH 12/26] fix docs --- src/fsharp/FSharp.Core/option.fsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index 8ef70b991df..0bb89c1468f 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -290,7 +290,7 @@ module ValueOption = [] val defaultWith: defThunk:(unit -> 'T) -> voption: 'T voption -> 'T - /// Returns if it is Some, otherwise returns . + /// Returns if it is Some, otherwise returns . /// /// The value to use if is None. /// The input option. From bc90b6e9d05c2aa9461fc7069be7e132ef04d8a7 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 17:05:12 +0100 Subject: [PATCH 13/26] fix diagnostics --- .../EmittedIL/Operators.fs | 2 +- .../EmittedIL/TailCalls.fs | 2 +- .../Language/CompilerDirectiveTests.fs | 5 +-- .../Language/XmlComments.fs | 16 +++++----- tests/FSharp.Test.Utilities/Compiler.fs | 31 ++++++++++++------- tests/FSharp.Test.Utilities/CompilerAssert.fs | 10 +++--- .../Xunit/Attributes/DirectoryAttribute.fs | 2 +- .../Language/OpenTypeDeclarationTests.fs | 30 +++++++++--------- .../fsharp/Compiler/Language/WitnessTests.fs | 2 +- 9 files changed, 54 insertions(+), 46 deletions(-) diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs index 2a262a90fa6..d642f5e8566 100644 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Operators.fs @@ -10,6 +10,6 @@ module Operators = [] let ``Validate that non generic (fast) code is emmitted for comparison involving decimals`` compilation = compilation - |> warningsDoNotCauseFailure + |> ignoreWarnings |> verifyBaseline |> verifyILBaseline \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs index aadaa6f597b..e52d32d4ad5 100644 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TailCalls.fs @@ -9,7 +9,7 @@ module ``Tail Calls`` = // Regression test for DevDiv:72571 let private compileWithTailCalls opts = - opts |> warningsDoNotCauseFailure |> withOptions ["-g"; "--optimize-"; "--tailcalls+"] |> compile + opts |> ignoreWarnings |> withOptions ["-g"; "--optimize-"; "--tailcalls+"] |> compile [] let ``TailCall 01``() = diff --git a/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs index aa9e9fa0ef3..0237a6d4d83 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/CompilerDirectiveTests.fs @@ -11,7 +11,7 @@ module ``Test Compiler Directives`` = let ``r# "" is invalid`` () = Fsx""" #r "" - """ |> warningsDoNotCauseFailure + """ |> ignoreWarnings |> compile |> shouldSucceed |> withSingleDiagnostic (Warning 213, Line 2, Col 1, Line 2, Col 6, "'' is not a valid assembly name") @@ -29,6 +29,7 @@ module ``Test compiler directives in FSI`` = let ``r# "" is invalid`` () = Fsx""" #r "" - """ |> eval + """ |> ignoreWarnings + |> eval |> shouldFail |> withSingleDiagnostic (Error 2301, Line 2, Col 1, Line 2, Col 6, "'' is not a valid assembly name") \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs index fa9321a6dbf..2bd486b5643 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs @@ -22,7 +22,7 @@ module M = """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics @@ -41,7 +41,7 @@ module M = let f a = a """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics @@ -57,7 +57,7 @@ module M = let f a = a """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics @@ -75,7 +75,7 @@ module M = let f a = a """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics @@ -103,7 +103,7 @@ module M = member x.OtherM((a,b): (string * string), p2: string) = ((a,b), p2) """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics [ ] @@ -122,7 +122,7 @@ module M = member x.M(p1: string, p2: string) = (p1, p2) """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics [ ] @@ -141,7 +141,7 @@ module M = member x.M(p1: string, p2: string) = (p1, p2) """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics [ ] @@ -155,7 +155,7 @@ module M = type C = delegate of sender: obj * args: int -> C """ |> withXmlCommentChecking - |> warningsDoNotCauseFailure + |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics [ ] diff --git a/tests/FSharp.Test.Utilities/Compiler.fs b/tests/FSharp.Test.Utilities/Compiler.fs index ede50dca1bf..b86dfaf344c 100644 --- a/tests/FSharp.Test.Utilities/Compiler.fs +++ b/tests/FSharp.Test.Utilities/Compiler.fs @@ -39,7 +39,7 @@ module rec Compiler = OutputType: CompileOutput SourceKind: SourceKind Name: string option - WarningsCauseFailure: bool + IgnoreWarnings: bool References: CompilationUnit list } override this.ToString() = match this.Name with | Some n -> n | _ -> (sprintf "%A" this) @@ -99,6 +99,7 @@ module rec Compiler = match src with | Text t -> t | Path p -> System.IO.File.ReadAllText p + let private fsFromString (source: string) (kind: SourceKind) : FSharpCompilationSource = match source with | null -> failwith "Source cannot be null" @@ -109,7 +110,7 @@ module rec Compiler = OutputType = Library SourceKind = kind Name = None - WarningsCauseFailure = true + IgnoreWarnings = true References = [] } let private csFromString (source: string) : CSharpCompilationSource = @@ -143,8 +144,11 @@ module rec Compiler = |> List.map toErrorInfo let private partitionErrors diagnostics = diagnostics |> List.partition (fun e -> match e.Error with Error _ -> true | _ -> false) + let private getErrors diagnostics = diagnostics |> List.filter (fun e -> match e.Error with Error _ -> true | _ -> false) + let private getWarnings diagnostics = diagnostics |> List.filter (fun e -> match e.Error with Warning _ -> true | _ -> false) + let private adjustRange (range: Range) (adjust: int) : Range = { range with StartLine = range.StartLine - adjust @@ -157,6 +161,7 @@ module rec Compiler = let FSharp (source: string) : CompilationUnit = fsFromString source SourceKind.Fs |> FS + let CSharp (source: string) : CompilationUnit = csFromString source |> CS @@ -208,9 +213,9 @@ module rec Compiler = | FS fs -> FS { fs with OutputType = CompileOutput.Exe } | _ -> failwith "TODO: Implement where applicable." - let warningsDoNotCauseFailure (cUnit: CompilationUnit) : CompilationUnit = + let ignoreWarnings (cUnit: CompilationUnit) : CompilationUnit = match cUnit with - | FS fs -> FS { fs with WarningsCauseFailure = false } + | FS fs -> FS { fs with IgnoreWarnings = true } | _ -> failwith "TODO: Implement ignorewarnings for the rest." let rec private asMetadataReference reference = @@ -249,9 +254,9 @@ module rec Compiler = | IL _ -> failwith "TODO: Process references for IL" loop [] references - let private compileFSharpCompilation compilation warningsCauseFailure : TestResult = + let private compileFSharpCompilation compilation ignoreWarnings : TestResult = - let ((err: FSharpErrorInfo[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, warningsCauseFailure) + let ((err: FSharpErrorInfo[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, ignoreWarnings) let diagnostics = err |> fromFSharpErrorInfo @@ -264,8 +269,8 @@ module rec Compiler = let (errors, warnings) = partitionErrors diagnostics - // Treat warnings as errors if "warningsCauseFailure" is true - if errors.Length > 0 || (warnings.Length > 0 && warningsCauseFailure) then + // Treat warnings as errors if "ignoreWarnings" is true + if errors.Length > 0 || (warnings.Length > 0 && not ignoreWarnings) then Failure result else Success { result with OutputPath = Some outputFilePath } @@ -281,7 +286,7 @@ module rec Compiler = let compilation = Compilation.Create(source, sourceKind, output, options, references) - compileFSharpCompilation compilation fsSource.WarningsCauseFailure + compileFSharpCompilation compilation fsSource.IgnoreWarnings let private compileCSharpCompilation (compilation: CSharpCompilation) : TestResult = @@ -388,8 +393,8 @@ module rec Compiler = let (errors, warnings) = partitionErrors diagnostics - // Treat warnings as errors if "WarningsCauseFailure" is false; - if errors.Length > 0 || (warnings.Length > 0 && not fsSource.WarningsCauseFailure) then + // Treat warnings as errors if "ignoreWarnings" is false; + if errors.Length > 0 || (warnings.Length > 0 && not fsSource.IgnoreWarnings) then Failure result else Success result @@ -418,7 +423,9 @@ module rec Compiler = Failure executionResult let compileAndRun = compile >> run + let compileExeAndRun = asExe >> compileAndRun + let private evalFSharp (fs: FSharpCompilationSource) : TestResult = let source = getSource fs.Source let options = fs.Options |> Array.ofList @@ -440,7 +447,7 @@ module rec Compiler = let evalError = match evalresult with Ok _ -> false | _ -> true - if evalError || errors.Length > 0 || (warnings.Length > 0 && not fs.WarningsCauseFailure) then + if evalError || errors.Length > 0 || (warnings.Length > 0 && not fs.IgnoreWarnings) then Failure result else Success result diff --git a/tests/FSharp.Test.Utilities/CompilerAssert.fs b/tests/FSharp.Test.Utilities/CompilerAssert.fs index 0f4ec0eaf72..843d6d58399 100644 --- a/tests/FSharp.Test.Utilities/CompilerAssert.fs +++ b/tests/FSharp.Test.Utilities/CompilerAssert.fs @@ -263,10 +263,10 @@ let main argv = 0""" o.Dispose() reraise() - static let assertErrors libAdjust warningsDoNotCauseFailure (errors: FSharpErrorInfo []) expectedErrors = + static let assertErrors libAdjust ignoreWarnings (errors: FSharpErrorInfo []) expectedErrors = let errors = errors - |> Array.filter (fun error -> if warningsDoNotCauseFailure then error.Severity <> FSharpErrorSeverity.Warning else true) + |> Array.filter (fun error -> if ignoreWarnings then error.Severity <> FSharpErrorSeverity.Warning else true) |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) |> Array.map (fun info -> (info.Severity, info.ErrorNumber, (info.StartLineAlternate - libAdjust, info.StartColumn + 1, info.EndLineAlternate - libAdjust, info.EndColumn + 1), info.Message)) @@ -293,7 +293,7 @@ let main argv = 0""" static let compile isExe options source f = lock gate (fun _ -> compileAux isExe options source f) - static let rec compileCompilationAux outputPath (disposals: ResizeArray) warningsDoNotCauseFailure (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = + static let rec compileCompilationAux outputPath (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = let compilationRefs, deps = match cmpl with | Compilation(_, _, _, _, cmpls, _) -> @@ -302,7 +302,7 @@ let main argv = 0""" |> List.map (fun cmpl -> match cmpl with | CompilationReference (cmpl, staticLink) -> - compileCompilationAux outputPath disposals warningsDoNotCauseFailure cmpl, staticLink + compileCompilationAux outputPath disposals ignoreWarnings cmpl, staticLink | TestCompilationReference (cmpl) -> let filename = match cmpl with @@ -318,7 +318,7 @@ let main argv = 0""" let compilationRefs = compiledRefs |> List.map (fun (((errors, outputFilePath), _), staticLink) -> - assertErrors 0 warningsDoNotCauseFailure errors [||] + assertErrors 0 ignoreWarnings errors [||] let rOption = "-r:" + outputFilePath if staticLink then [rOption;"--staticlink:" + Path.GetFileNameWithoutExtension outputFilePath] diff --git a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs index d3a607ab1d7..f3e6ffb7931 100644 --- a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs +++ b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs @@ -47,7 +47,7 @@ type DirectoryAttribute(dir: string) = OutputType = Library SourceKind = SourceKind.Fsx Name = Some fs - WarningsCauseFailure = true + IgnoreWarnings = false References = [] } |> FS override _.GetData(_: MethodInfo) = diff --git a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs index 6bc8ef03ed5..e265a16a8ae 100644 --- a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs +++ b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs @@ -2264,7 +2264,7 @@ let main _ = #load @"%s" """ (dir ++ "provider.fsx")) |> withName "provider" - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let provided = @@ -2272,7 +2272,7 @@ let main _ = #load @"%s" """ (dir ++ "provided.fs")) |> withName "provided" - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let test = @@ -2290,7 +2290,7 @@ if StaticProperty1 <> "You got a static property" then failwith "failed" """ |> asExe - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview |> withReferences [provider;provided] @@ -2306,7 +2306,7 @@ if StaticProperty1 <> "You got a static property" then #load @"%s" """ (dir ++ "provider.fsx")) |> withName "provider" - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let provided = @@ -2314,7 +2314,7 @@ if StaticProperty1 <> "You got a static property" then #load @"%s" """ (dir ++ "provided.fs")) |> withName "provided" - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let test = @@ -2330,7 +2330,7 @@ if StaticProperty1 <> "You got a static property" then failwith "failed" """ |> asExe - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview |> withReferences [provider;provided] @@ -2347,7 +2347,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provider.fsx")) |> withName "provider" |> withLangVersionPreview - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let provided = @@ -2356,7 +2356,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provided.fs")) |> withName "provided" |> withLangVersionPreview - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let test = @@ -2367,7 +2367,7 @@ if StaticProperty1 <> "You got a static property" then failwith "failed" """ |> asExe - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview |> withReferences [provider;provided] @@ -2384,7 +2384,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provider.fsx")) |> withName "provider" |> withLangVersionPreview - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let provided = @@ -2393,7 +2393,7 @@ if StaticProperty1 <> "You got a static property" then """ (dir ++ "provided.fs")) |> withName "provided" |> withLangVersionPreview - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let test = @@ -2407,7 +2407,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> |> asExe |> withLangVersionPreview |> withReferences [provider;provided] - |> warningsDoNotCauseFailure + |> ignoreWarnings compileAndRun test |> ignore @@ -2422,7 +2422,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> """ (dir ++ "provider.fsx")) |> withName "provider" |> withLangVersionPreview - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let provided = @@ -2431,7 +2431,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> """ (dir ++ "provided.fs")) |> withName "provided" |> withLangVersionPreview - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview let test = @@ -2443,7 +2443,7 @@ let _ : TheNestedGeneratedType = Unchecked.defaultof<_> |> asExe |> withLangVersionPreview |> withReferences [provider;provided] - |> warningsDoNotCauseFailure + |> ignoreWarnings compile test |> withDiagnostics diff --git a/tests/fsharp/Compiler/Language/WitnessTests.fs b/tests/fsharp/Compiler/Language/WitnessTests.fs index 75608df8237..4b7f7521220 100644 --- a/tests/fsharp/Compiler/Language/WitnessTests.fs +++ b/tests/fsharp/Compiler/Language/WitnessTests.fs @@ -18,7 +18,7 @@ module WitnessTests = #load @"%s" """ (dir ++ "provider.fsx")) |> asExe - |> warningsDoNotCauseFailure + |> ignoreWarnings |> withLangVersionPreview |> compile |> shouldSucceed From 57d77dfd74cdd57edf8053beadc33275d629ae7a Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 17:19:38 +0100 Subject: [PATCH 14/26] fix diagnostics --- tests/FSharp.Test.Utilities/Compiler.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/FSharp.Test.Utilities/Compiler.fs b/tests/FSharp.Test.Utilities/Compiler.fs index b86dfaf344c..b891299058b 100644 --- a/tests/FSharp.Test.Utilities/Compiler.fs +++ b/tests/FSharp.Test.Utilities/Compiler.fs @@ -110,7 +110,7 @@ module rec Compiler = OutputType = Library SourceKind = kind Name = None - IgnoreWarnings = true + IgnoreWarnings = false References = [] } let private csFromString (source: string) : CSharpCompilationSource = @@ -269,7 +269,7 @@ module rec Compiler = let (errors, warnings) = partitionErrors diagnostics - // Treat warnings as errors if "ignoreWarnings" is true + // Treat warnings as errors if "IgnoreWarnings" is false if errors.Length > 0 || (warnings.Length > 0 && not ignoreWarnings) then Failure result else @@ -393,7 +393,7 @@ module rec Compiler = let (errors, warnings) = partitionErrors diagnostics - // Treat warnings as errors if "ignoreWarnings" is false; + // Treat warnings as errors if "IgnoreWarnings" is false; if errors.Length > 0 || (warnings.Length > 0 && not fsSource.IgnoreWarnings) then Failure result else From f943b3e6bfab9911c2f97dfafc75f4ea3db03da2 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 18:05:49 +0100 Subject: [PATCH 15/26] update baselines --- src/fsharp/TypedTreePickle.fs | 2 +- src/fsharp/XmlDoc.fs | 71 ++++++++++--------- src/fsharp/symbols/SymbolHelpers.fs | 5 +- src/fsharp/symbols/Symbols.fs | 36 +++++++++- src/fsharp/symbols/Symbols.fsi | 24 +++++++ .../SurfaceArea.net472.fs | 36 ++++++++-- .../SurfaceArea.netstandard.fs | 35 +++++++-- tests/service/MultiProjectAnalysisTests.fs | 2 + tests/service/ProjectAnalysisTests.fs | 3 + .../FSharp.Editor/xlf/FSharp.Editor.cs.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.de.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.es.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.fr.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.it.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.ja.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.ko.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.pl.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.ru.xlf | 15 ++-- .../FSharp.Editor/xlf/FSharp.Editor.tr.xlf | 15 ++-- .../xlf/FSharp.Editor.zh-Hans.xlf | 15 ++-- .../xlf/FSharp.Editor.zh-Hant.xlf | 15 ++-- 22 files changed, 294 insertions(+), 115 deletions(-) diff --git a/src/fsharp/TypedTreePickle.fs b/src/fsharp/TypedTreePickle.fs index c21adb89e38..4d16db5e9b0 100644 --- a/src/fsharp/TypedTreePickle.fs +++ b/src/fsharp/TypedTreePickle.fs @@ -1345,7 +1345,7 @@ let p_range (x: range) st = let p_dummy_range : range pickler = fun _x _st -> () let p_ident (x: Ident) st = p_tup2 p_string p_range (x.idText, x.idRange) st -let p_xmldoc (doc: XmlDoc) st = p_array p_string doc.Lines st +let p_xmldoc (doc: XmlDoc) st = p_array p_string doc.UnprocessedLines st let u_pos st = let a = u_int st in let b = u_int st in mkPos a b let u_range st = let a = u_string st in let b = u_pos st in let c = u_pos st in mkRange a b c diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 6888e9574e0..cee213554b6 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -24,56 +24,34 @@ type XmlDoc(unprocessedLines: string[], range: range) = (lines |> List.map Microsoft.FSharp.Core.XmlAdapters.escape) @ [""] - let processedLines = processLines (Array.toList unprocessedLines) + /// Get the lines before insertion of implicit summary tags and encoding + member _.UnprocessedLines = unprocessedLines - let lines = Array.ofList processedLines + /// Get the lines after insertion of implicit summary tags and encoding + member _.GetXmlLines() = + let processedLines = processLines (Array.toList unprocessedLines) - member _.Lines = lines + let lines = Array.ofList processedLines + + lines member _.Range = range static member Empty = XmlDocStatics.Empty member _.IsEmpty = - lines |> Array.forall String.IsNullOrWhiteSpace + unprocessedLines |> Array.forall String.IsNullOrWhiteSpace member doc.NonEmpty = not doc.IsEmpty static member Merge (doc1: XmlDoc) (doc2: XmlDoc) = - XmlDoc(Array.append doc1.Lines doc2.Lines, + XmlDoc(Array.append doc1.UnprocessedLines doc2.UnprocessedLines, unionRanges doc1.Range doc2.Range) -#if CREF_ELABORATION - member doc.Elaborate (paramNames) = - for see in seq { yield! xml.Descendants(XName.op_Implicit "see") - yield! xml.Descendants(XName.op_Implicit "seealso") - yield! xml.Descendants(XName.op_Implicit "exception") } do - match see.Attribute(XName.op_Implicit "cref") with - | null -> warning (Error (FSComp.SR.xmlDocMissingCrossReference(), doc.Range)) - | attr -> - let cref = attr.Value - if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || - cref.StartsWith("E:") || cref.StartsWith("F:") then - () - else - match crefResolver cref with - | None -> - warning (Error (FSComp.SR.xmlDocUnresolvedCrossReference(nm), doc.Range)) - | Some text -> - attr.Value <- text - modified <- true - if modified then - let m = doc.Range - let newLines = - [| for e in xml.Elements() do - yield! e.ToString().Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries) |] - lines <- newLines -#endif - member doc.GetXmlText() = if doc.IsEmpty then "" else - doc.Lines + doc.GetXmlLines() |> String.concat Environment.NewLine member doc.Check(paramNamesOpt: string list option) = @@ -120,6 +98,33 @@ type XmlDoc(unprocessedLines: string[], range: range) = with e -> warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) +#if CREF_ELABORATION + member doc.Elaborate (paramNames) = + for see in seq { yield! xml.Descendants(XName.op_Implicit "see") + yield! xml.Descendants(XName.op_Implicit "seealso") + yield! xml.Descendants(XName.op_Implicit "exception") } do + match see.Attribute(XName.op_Implicit "cref") with + | null -> warning (Error (FSComp.SR.xmlDocMissingCrossReference(), doc.Range)) + | attr -> + let cref = attr.Value + if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || + cref.StartsWith("E:") || cref.StartsWith("F:") then + () + else + match crefResolver cref with + | None -> + warning (Error (FSComp.SR.xmlDocUnresolvedCrossReference(nm), doc.Range)) + | Some text -> + attr.Value <- text + modified <- true + if modified then + let m = doc.Range + let newLines = + [| for e in xml.Elements() do + yield! e.ToString().Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries) |] + lines <- newLines +#endif + // Discriminated unions can't contain statics, so we use a separate type and XmlDocStatics() = diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index 097933f470b..ecc77219c1c 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -667,8 +667,9 @@ module internal SymbolHelpers = | Some xmlDoc -> bufs (fun os -> bprintf os "\n" - xmlDoc.Lines |> Array.iter (fun line -> - // Note: this code runs for local/within-project xmldoc tooltips, but not for cross-project or .XML + // Note: this code uses the unprocessed lines for the XML comnment. In the future we should properly + // crack and display the XML here. + xmlDoc.UnprocessedLines |> Array.iter (fun line -> bprintf os "\n%s" line)) if String.IsNullOrEmpty result then diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 80fb59462f8..0ccaa425ed5 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -79,7 +79,10 @@ module Impl = System.Collections.ObjectModel.ReadOnlyCollection<_>(Seq.toArray arr) :> IList<_> let makeXmlDoc (doc: XmlDoc) = - makeReadOnlyCollection doc.Lines + makeReadOnlyCollection doc.UnprocessedLines + + let makeElaboratedXmlDoc (doc: XmlDoc) = + makeReadOnlyCollection (doc.GetProcessedLines()) let rescopeEntity optViewedCcu (entity: Entity) = match optViewedCcu with @@ -647,6 +650,10 @@ and FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = if isUnresolved() then XmlDoc.Empty |> makeXmlDoc else entity.XmlDoc |> makeXmlDoc + member __.ElaboratedXmlDoc = + if isUnresolved() then XmlDoc.Empty |> makeElaboratedXmlDoc else + entity.XmlDoc |> makeElaboratedXmlDoc + member x.StaticParameters = match entity.TypeReprInfo with #if !NO_EXTENSIONTYPING @@ -816,6 +823,10 @@ and FSharpUnionCase(cenv, v: UnionCaseRef) = if isUnresolved() then XmlDoc.Empty |> makeXmlDoc else v.UnionCase.XmlDoc |> makeXmlDoc + member __.ElaboratedXmlDoc = + if isUnresolved() then XmlDoc.Empty |> makeElaboratedXmlDoc else + v.UnionCase.XmlDoc |> makeElaboratedXmlDoc + member __.Attributes = if isUnresolved() then makeReadOnlyCollection [] else v.Attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection @@ -998,6 +1009,14 @@ and FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = | Choice3Of3 _ -> XmlDoc.Empty |> makeXmlDoc + member __.ElaboratedXmlDoc = + if isUnresolved() then XmlDoc.Empty |> makeElaboratedXmlDoc else + match d.TryRecdField with + | Choice1Of3 r -> r.XmlDoc + | Choice2Of3 _ -> XmlDoc.Empty + | Choice3Of3 _ -> XmlDoc.Empty + |> makeElaboratedXmlDoc + member __.FieldType = checkIsResolved() let fty = @@ -1108,6 +1127,10 @@ and FSharpActivePatternCase(cenv, apinfo: PrettyNaming.ActivePatternInfo, ty, n, defaultArg (valOpt |> Option.map (fun vref -> vref.XmlDoc)) XmlDoc.Empty |> makeXmlDoc + member __.ElaboratedXmlDoc = + defaultArg (valOpt |> Option.map (fun vref -> vref.XmlDoc)) XmlDoc.Empty + |> makeElaboratedXmlDoc + member __.XmlDocSig = let xmlsig = match valOpt with @@ -1147,8 +1170,11 @@ and FSharpGenericParameter(cenv, v:Typar) = member __.IsCompilerGenerated = v.IsCompilerGenerated member __.IsMeasure = (v.Kind = TyparKind.Measure) + member __.XmlDoc = v.XmlDoc |> makeXmlDoc + member __.ElaboratedXmlDoc = v.XmlDoc |> makeElaboratedXmlDoc + member __.IsSolveAtCompileTime = (v.StaticReq = TyparStaticReq.HeadTypeStaticReq) member __.Attributes = @@ -1829,6 +1855,14 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | M m | C m -> m.XmlDoc |> makeXmlDoc | V v -> v.XmlDoc |> makeXmlDoc + member __.ElaboratedXmlDoc = + if isUnresolved() then XmlDoc.Empty |> makeElaboratedXmlDoc else + match d with + | E e -> e.XmlDoc |> makeElaboratedXmlDoc + | P p -> p.XmlDoc |> makeElaboratedXmlDoc + | M m | C m -> m.XmlDoc |> makeElaboratedXmlDoc + | V v -> v.XmlDoc |> makeElaboratedXmlDoc + member x.CurriedParameterGroups = checkIsResolved() match d with diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index 1e088f3994d..bf994ea7c44 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -259,6 +259,10 @@ and [] public FSharpEntity = /// Get the in-memory XML documentation for the entity, used when code is checked in-memory member XmlDoc: IList + /// Get the elaborated XML documentation for the entity, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList + /// Get the XML documentation signature for the entity, used for .xml file lookup for compiled code member XmlDocSig: string @@ -399,6 +403,10 @@ and [] public FSharpUnionCase = /// Get the in-memory XML documentation for the union case, used when code is checked in-memory member XmlDoc: IList + /// Get the elaborated XML documentation for the union case, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList + /// Get the XML documentation signature for .xml file lookup for the union case, used for .xml file lookup for compiled code member XmlDocSig: string @@ -473,6 +481,10 @@ and [] public FSharpField = /// Get the in-memory XML documentation for the field, used when code is checked in-memory member XmlDoc: IList + /// Get the elaborated XML documentation for the field, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList + /// Get the XML documentation signature for .xml file lookup for the field, used for .xml file lookup for compiled code member XmlDocSig: string @@ -523,6 +535,10 @@ and [] public FSharpGenericParameter = /// Get the in-memory XML documentation for the type parameter, used when code is checked in-memory member XmlDoc : IList + /// Get the elaborated XML documentation for the type parameter, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList + /// Indicates if this is a statically resolved type variable member IsSolveAtCompileTime : bool @@ -834,6 +850,10 @@ and [] public FSharpMemberOrFunctionOrValue = /// Get the in-memory XML documentation for the value, used when code is checked in-memory member XmlDoc: IList + /// Get the elaborated XML documentation for the value, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList + /// XML documentation signature for the value, used for .xml file lookup for compiled code member XmlDocSig: string @@ -915,6 +935,10 @@ and [] public FSharpActivePatternCase = /// Get the in-memory XML documentation for the active pattern case, used when code is checked in-memory member XmlDoc: IList + /// Get the elaborated XML documentation for the active pattern case, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList + /// XML documentation signature for the active pattern case, used for .xml file lookup for compiled code member XmlDocSig: string diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs index 0cacf6073ee..1cdda4273f1 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs @@ -21335,7 +21335,9 @@ FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Cor FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String Name @@ -21739,7 +21741,9 @@ FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.ILis FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] UnionCases FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_UnionCases() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String AccessPath FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String DisplayName @@ -21861,7 +21865,9 @@ FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_FieldAttributes() FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_PropertyAttributes() FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpField: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpField: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpField: System.String Name @@ -22071,6 +22077,8 @@ FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Ge FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] Constraints FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] get_Constraints() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String FullName @@ -22502,7 +22510,9 @@ FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collect FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] CurriedParameterGroups FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] get_CurriedParameterGroups() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String FullName @@ -22534,6 +22544,7 @@ FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.Source FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_Description() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout StructuredReturnTypeText FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout get_StructuredReturnTypeText() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String ReturnTypeText @@ -23249,7 +23260,9 @@ FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.I FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] UnionCaseFields FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_UnionCaseFields() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String FullName @@ -37629,7 +37642,7 @@ FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 Tag FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 get_Tag() FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAbstractSlot(SynValSig, MemberFlags, range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType], MemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList1[Microsof FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitInherit(SynType, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInherit(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInterface(SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]], range) @@ -41577,12 +41590,21 @@ FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_Item2() FSharp.Compiler.SyntaxTree+SynValData: System.String ToString() FSharp.Compiler.SyntaxTree+SynValInfo: Int32 Tag FSharp.Compiler.SyntaxTree+SynValInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] ArgInfos -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] Item1 -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_ArgInfos() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_Item1() -FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo Item2 -FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_Item2() +2020-09-14T16:29:08.6223054Z FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident +2020-09-14T16:29:08.6223839Z FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() +2020-09-14T16:29:08.6224499Z FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc +2020-09-14T16:29:08.6225102Z FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() +2020-09-14T16:29:08.6226056Z FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) +2020-09-14T16:29:08.6227024Z FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo +2020-09-14T16:29:08.6227593Z FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() +2020-09-14T16:29:08.6228357Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos +2020-09-14T16:29:08.6229253Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos +2020-09-14T16:29:08.6230143Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() +2020-09-14T16:29:08.6231156Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_curriedArgInfos() +2020-09-14T16:29:08.6231946Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames +2020-09-14T16:29:08.6232629Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() +2020-09-14T16:29:08.6233268Z FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_returnInfo() +FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo returnInfo FSharp.Compiler.SyntaxTree+SynValInfo: SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]], SynArgInfo) FSharp.Compiler.SyntaxTree+SynValInfo: System.String ToString() FSharp.Compiler.SyntaxTree+SynValSig: Boolean get_isInline() diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs index 9cd1423c6e3..b713171c851 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs @@ -21335,7 +21335,9 @@ FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Cor FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String Name @@ -21739,7 +21741,9 @@ FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.ILis FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] UnionCases FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_UnionCases() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String AccessPath FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String DisplayName @@ -21861,7 +21865,9 @@ FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_FieldAttributes() FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_PropertyAttributes() FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpField: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpField: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpField: System.String Name @@ -22071,7 +22077,9 @@ FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Ge FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] Constraints FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] get_Constraints() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String Name @@ -22502,7 +22510,9 @@ FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collect FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] CurriedParameterGroups FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] get_CurriedParameterGroups() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String FullName @@ -22534,6 +22544,7 @@ FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.Source FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_Description() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout StructuredReturnTypeText FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout get_StructuredReturnTypeText() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String ReturnTypeText @@ -23080,6 +23091,7 @@ FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]) FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object) FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -23249,7 +23261,9 @@ FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.I FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] UnionCaseFields FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_UnionCaseFields() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String FullName @@ -41522,12 +41536,21 @@ FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_Item2() FSharp.Compiler.SyntaxTree+SynValData: System.String ToString() FSharp.Compiler.SyntaxTree+SynValInfo: Int32 Tag FSharp.Compiler.SyntaxTree+SynValInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] ArgInfos -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] Item1 -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_ArgInfos() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_Item1() -FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo Item2 -FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_Item2() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_curriedArgInfos() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() +FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_returnInfo() +FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo returnInfo FSharp.Compiler.SyntaxTree+SynValInfo: SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]], SynArgInfo) FSharp.Compiler.SyntaxTree+SynValInfo: System.String ToString() FSharp.Compiler.SyntaxTree+SynValSig: Boolean get_isInline() diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index 9ee1f798ba1..9f6e8211161 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -218,6 +218,7 @@ let ``Test multi project 1 xmldoc`` () = match x3FromProject1A with | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc |> shouldEqual ([|" This is"; " x3"|] |> toIList) + | :? FSharpMemberOrFunctionOrValue as v -> v.ElaboratedXmlDoc |> shouldEqual ([|""; " This is"; " x3"; "" |] |> toIList) | _ -> failwith "odd symbol!" match x1FromProjectMultiProject with @@ -773,6 +774,7 @@ let ``Test active patterns' XmlDocSig declared in referenced projects`` () = let divisibleByActivePatternCase = divisibleBySymbol :?> FSharpActivePatternCase divisibleByActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual [ "A parameterized active pattern of divisibility" ] + divisibleByActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [ ""; "A parameterized active pattern of divisibility"; "" ] divisibleByActivePatternCase.XmlDocSig |> shouldEqual "M:Project3A.|DivisibleBy|_|(System.Int32,System.Int32)" let divisibleByGroup = divisibleByActivePatternCase.Group divisibleByGroup.IsTotal |> shouldEqual false diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 7068cd4736d..1409300eea9 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -1548,6 +1548,7 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = let oddActivePatternCase = oddSymbol :?> FSharpActivePatternCase oddActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] + oddActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] oddActivePatternCase.XmlDocSig |> shouldEqual "" let oddGroup = oddActivePatternCase.Group oddGroup.IsTotal |> shouldEqual true @@ -1562,6 +1563,7 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = evenSymbol.ToString() |> shouldEqual "symbol Even" let evenActivePatternCase = evenSymbol :?> FSharpActivePatternCase evenActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] + evenActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] evenActivePatternCase.XmlDocSig |> shouldEqual "" let evenGroup = evenActivePatternCase.Group evenGroup.IsTotal |> shouldEqual true @@ -1606,6 +1608,7 @@ let ``Test partial active patterns' exact ranges from uses of symbols`` () = let floatActivePatternCase = floatSymbol :?> FSharpActivePatternCase floatActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Partial active pattern for floats"] + floatActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Partial active pattern for floats"; ""] floatActivePatternCase.XmlDocSig |> shouldEqual "" let floatGroup = floatActivePatternCase.Group floatGroup.IsTotal |> shouldEqual false diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf index 243012b2745..acac2c13bf4 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf @@ -7,16 +7,21 @@ Přidejte klíčové slovo new. + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf index bf918c43e0a..639a34858b9 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf @@ -7,16 +7,21 @@ Schlüsselwort "new" hinzufügen + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf index 7343524a870..5f1297eab36 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf @@ -7,16 +7,21 @@ Agregar "nueva" palabra clave + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf index 07d6c0f0494..3ae9d25817a 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf @@ -7,16 +7,21 @@ Ajouter le mot clé 'new' + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf index aea8fcbfe78..8457ca172b1 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf @@ -7,16 +7,21 @@ Aggiungi la parola chiave 'new' + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf index 0d78cb09d79..614fdea4a51 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf @@ -7,16 +7,21 @@ 'new' キーワードを追加する + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf index 8f8c35c1993..832aaa80b5c 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf @@ -7,16 +7,21 @@ 'new' 키워드 추가 + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf index dac73345e76..785230a56bb 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf @@ -7,16 +7,21 @@ Dodaj słowo kluczowe „new” + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf index 35b73ac3b6b..98636e84fd4 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf @@ -7,16 +7,21 @@ Adicionar a palavra-chave 'new' + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf index 5a971584a64..04891b9acea 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf @@ -7,16 +7,21 @@ Добавить ключевое слово "new" + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf index 773daddfae8..0cbe170c6d7 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf @@ -7,16 +7,21 @@ 'new' anahtar sözcüğünü ekleme + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf index 73bc4ccc42c..dd827dbfd65 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf @@ -7,16 +7,21 @@ 添加“新”关键字 + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf index 42c23c4fa5d..a59aa79970f 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf @@ -7,16 +7,21 @@ 新增 'new' 關鍵字 + + F# Disposable Values (locals) + F# Disposable Values (locals) + + + + F# Dispostable Values (top-level) + F# Dispostable Values (top-level) + + F# Disposable Types F# Disposable Types - - F# Disposable Values - F# Disposable Values - - F# Functions F# Functions From 970f4c632c7286e5532addc59affc429c8f52280 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 19:09:06 +0100 Subject: [PATCH 16/26] provide elaborated xml docs in FCS API --- src/fsharp/XmlDoc.fs | 4 +- src/fsharp/symbols/SymbolHelpers.fs | 22 +--- src/fsharp/symbols/SymbolHelpers.fsi | 12 +- src/fsharp/symbols/Symbols.fs | 2 +- .../LibraryTestFx.fs | 4 + .../SurfaceArea.net472.fs | 105 ++++++++---------- .../SurfaceArea.netstandard.fs | 90 +++++++-------- tests/service/MultiProjectAnalysisTests.fs | 3 + .../DocComments/XMLDocumentation.fs | 4 +- 9 files changed, 115 insertions(+), 131 deletions(-) diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index cee213554b6..625fd40ee88 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -28,7 +28,7 @@ type XmlDoc(unprocessedLines: string[], range: range) = member _.UnprocessedLines = unprocessedLines /// Get the lines after insertion of implicit summary tags and encoding - member _.GetXmlLines() = + member _.GetElaboratedXmlLines() = let processedLines = processLines (Array.toList unprocessedLines) let lines = Array.ofList processedLines @@ -51,7 +51,7 @@ type XmlDoc(unprocessedLines: string[], range: range) = member doc.GetXmlText() = if doc.IsEmpty then "" else - doc.GetXmlLines() + doc.GetElaboratedXmlLines() |> String.concat Environment.NewLine member doc.Check(paramNamesOpt: string list option) = diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index ecc77219c1c..b161f26649b 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -227,7 +227,7 @@ type public Layout = Internal.Utilities.StructuredFormat.Layout [] type FSharpXmlDoc = | None - | Text of string + | Text of unprocessedLines: string[] * elaboratedXmlLines: string[] | XmlDocFileSignature of (*File and Signature*) string * string /// A single data tip display element @@ -660,22 +660,10 @@ module internal SymbolHelpers = /// Produce an XmlComment with a signature or raw text, given the F# comment and the item let GetXmlCommentForItemAux (xmlDoc: XmlDoc option) (infoReader: InfoReader) m d = - let result = - match xmlDoc with - | None -> "" - | Some xmlDoc when xmlDoc.IsEmpty -> "" - | Some xmlDoc -> - bufs (fun os -> - bprintf os "\n" - // Note: this code uses the unprocessed lines for the XML comnment. In the future we should properly - // crack and display the XML here. - xmlDoc.UnprocessedLines |> Array.iter (fun line -> - bprintf os "\n%s" line)) - - if String.IsNullOrEmpty result then - GetXmlDocHelpSigOfItemForLookup infoReader m d - else - FSharpXmlDoc.Text result + match xmlDoc with + | Some xmlDoc when not xmlDoc.IsEmpty -> + FSharpXmlDoc.Text (xmlDoc.UnprocessedLines, xmlDoc.GetElaboratedXmlLines()) + | _ -> GetXmlDocHelpSigOfItemForLookup infoReader m d let mutable ToolTipFault = None diff --git a/src/fsharp/symbols/SymbolHelpers.fsi b/src/fsharp/symbols/SymbolHelpers.fsi index 664471ab440..f5f345e4ef2 100755 --- a/src/fsharp/symbols/SymbolHelpers.fsi +++ b/src/fsharp/symbols/SymbolHelpers.fsi @@ -50,10 +50,14 @@ type public FSharpXmlDoc = /// No documentation is available | None - /// The text for documentation - | Text of string - - /// Indicates that the text for the documentation can be found in a .xml documentation file, using the given signature key + /// The text for documentation for in-memory references. Here unprocessedText is the `\n` concatenated + /// text of the original source and processsedXmlLines is the + /// XML produced after all checking and processing by the F# compiler, including + /// insertion of summary tags, encoding and resolving of cross-references if + // supported. + | Text of unprocessedLines: string[] * elaboratedXmlLines: string[] + + /// Indicates that the XML for the documentation can be found in a .xml documentation file, using the given signature key | XmlDocFileSignature of (*File:*) string * (*Signature:*)string type public Layout = Internal.Utilities.StructuredFormat.Layout diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 0ccaa425ed5..afe5c4a27fd 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -82,7 +82,7 @@ module Impl = makeReadOnlyCollection doc.UnprocessedLines let makeElaboratedXmlDoc (doc: XmlDoc) = - makeReadOnlyCollection (doc.GetProcessedLines()) + makeReadOnlyCollection (doc.GetElaboratedXmlLines()) let rescopeEntity optViewedCcu (entity: Entity) = match optViewedCcu with diff --git a/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs b/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs index bea76b4a53e..cedeac7da92 100644 --- a/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs +++ b/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs @@ -104,6 +104,10 @@ module SurfaceArea = Printf.bprintf sb " windiff %s %s" baseline logFile newLine sb newLine sb + sb.AppendLine "To update the baseline run:" |> ignore + Printf.bprintf sb " copy /y %s %s" logFile baseline + newLine sb + newLine sb sb.Append "Unexpectedly missing (expected, not actual):" |> ignore for s in unexpectedlyMissing do newLine sb diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs index 25389edf6eb..8fb4cf72b82 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.net472.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Core.UnitTests.Portable.SurfaceArea +namespace FSharp.Compiler.Service.Tests.SurfaceArea open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework @@ -21334,10 +21334,10 @@ FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Cor FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String Name @@ -21740,10 +21740,10 @@ FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.ILis FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_DeclaredInterfaces() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] UnionCases FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_UnionCases() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String AccessPath FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String DisplayName @@ -21864,10 +21864,10 @@ FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] PropertyAttributes FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_FieldAttributes() FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_PropertyAttributes() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpField: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpField: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpField: System.String Name @@ -22076,9 +22076,9 @@ FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Ge FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] Constraints FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] get_Constraints() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String FullName @@ -22509,10 +22509,10 @@ FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collect FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] CurriedParameterGroups FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] get_CurriedParameterGroups() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String FullName @@ -22544,7 +22544,6 @@ FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.Source FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_Description() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout StructuredReturnTypeText FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout get_StructuredReturnTypeText() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String ReturnTypeText @@ -23259,10 +23258,10 @@ FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.I FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] UnionCaseFields FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_UnionCaseFields() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String FullName @@ -23295,9 +23294,11 @@ FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode() FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 Tag FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String Item FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String get_Item() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] elaboratedXmlLines +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_elaboratedXmlLines() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_unprocessedLines() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] unprocessedLines FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -23328,7 +23329,7 @@ FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsXmlDocFileSignature FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsNone() FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsText() FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsXmlDocFileSignature() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewText(System.String) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewText(System.String[], System.String[]) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewXmlDocFileSignature(System.String, System.String) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc None FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_None() @@ -24826,9 +24827,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Comput FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForReferenceType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForValueType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Delegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableLocalValue FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Enumeration FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Event FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Exception @@ -24866,9 +24867,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsComputa FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForReferenceType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForValueType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDelegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableLocalValue FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEnumeration FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEvent FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsException @@ -24903,9 +24904,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsCom FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForReferenceType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForValueType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDelegate() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableLocalValue() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableTopLevelValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEnumeration() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEvent() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsException() @@ -24940,9 +24941,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.S FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForReferenceType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForValueType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Delegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableLocalValue FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Enumeration FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Event FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Exception @@ -24977,9 +24978,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.S FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForReferenceType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForValueType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Delegate() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableLocalValue() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableTopLevelValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Enumeration() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Event() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Exception() @@ -26134,6 +26135,8 @@ FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 Tag FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 get_Tag() FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_ident() FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] ident FSharp.Compiler.SyntaxTree+SynArgInfo: SynArgInfo NewSynArgInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) @@ -37324,6 +37327,8 @@ FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSh FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] selfIdentifier FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats ctorArgs FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats get_ctorArgs() FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: System.String ToString() @@ -37642,7 +37647,7 @@ FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 Tag FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 get_Tag() FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAbstractSlot(SynValSig, MemberFlags, range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType], MemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList1[Microsof +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitInherit(SynType, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInherit(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInterface(SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]], range) @@ -41586,24 +41591,19 @@ FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSha FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags] get_Item1() FSharp.Compiler.SyntaxTree+SynValData: SynValData NewSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags], SynValInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) FSharp.Compiler.SyntaxTree+SynValData: SynValInfo Item2 +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_Item2() +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() FSharp.Compiler.SyntaxTree+SynValData: System.String ToString() FSharp.Compiler.SyntaxTree+SynValInfo: Int32 Tag FSharp.Compiler.SyntaxTree+SynValInfo: Int32 get_Tag() -2020-09-14T16:29:08.6223054Z FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident -2020-09-14T16:29:08.6223839Z FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() -2020-09-14T16:29:08.6224499Z FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc -2020-09-14T16:29:08.6225102Z FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() -2020-09-14T16:29:08.6226056Z FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) -2020-09-14T16:29:08.6227024Z FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo -2020-09-14T16:29:08.6227593Z FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() -2020-09-14T16:29:08.6228357Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos -2020-09-14T16:29:08.6229253Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos -2020-09-14T16:29:08.6230143Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() -2020-09-14T16:29:08.6231156Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_curriedArgInfos() -2020-09-14T16:29:08.6231946Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames -2020-09-14T16:29:08.6232629Z FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() -2020-09-14T16:29:08.6233268Z FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_returnInfo() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_curriedArgInfos() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() +FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_returnInfo() FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo returnInfo FSharp.Compiler.SyntaxTree+SynValInfo: SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]], SynArgInfo) FSharp.Compiler.SyntaxTree+SynValInfo: System.String ToString() @@ -41894,7 +41894,7 @@ FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 GetHashCode(System.Collections FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 Tag FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 get_Tag() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDoc ToXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector Item2 FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector get_Item2() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: pos Item1 @@ -41917,7 +41917,7 @@ FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc Item2 FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item1() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item2() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: XmlDoc ToXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDoc FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDocEmpty FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlMerge @@ -41946,33 +41946,26 @@ FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc PreXmlDocEmpty FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_Empty() FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_PreXmlDocEmpty() FSharp.Compiler.XmlDoc+PreXmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc: XmlDoc ToXmlDoc() -FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(XmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty FSharp.Compiler.XmlDoc+XmlDoc: Boolean NonEmpty +FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_NonEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode() -FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+XmlDoc: Int32 Tag -FSharp.Compiler.XmlDoc+XmlDoc: Int32 get_Tag() -FSharp.Compiler.XmlDoc+XmlDoc: System.String ToString() +FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] GetElaboratedXmlLines() +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] UnprocessedLines +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] get_UnprocessedLines() +FSharp.Compiler.XmlDoc+XmlDoc: Void .ctor(System.String[], range) +FSharp.Compiler.XmlDoc+XmlDoc: Void Check(Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Merge(XmlDoc, XmlDoc) -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Process(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc get_Empty() -FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty -FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() -FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] Item -FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] get_Item() -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.Tuple`2[System.String,FSharp.Compiler.Range+range][]) FSharp.Compiler.XmlDoc+XmlDoc: range Range FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) -FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) +FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) FSharp.Compiler.XmlDoc+XmlDocStatics: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc get_Empty() diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs index a978e939ccd..0b0720259a0 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs @@ -21334,10 +21334,10 @@ FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Cor FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String Name @@ -21740,10 +21740,10 @@ FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.ILis FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_DeclaredInterfaces() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] UnionCases FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_UnionCases() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String AccessPath FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String DisplayName @@ -21864,10 +21864,10 @@ FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] PropertyAttributes FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_FieldAttributes() FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_PropertyAttributes() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpField: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpField: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpField: System.String Name @@ -22076,10 +22076,10 @@ FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Ge FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] Constraints FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] get_Constraints() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String FullName FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String Name @@ -22509,10 +22509,10 @@ FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collect FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] CurriedParameterGroups FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] get_CurriedParameterGroups() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String FullName @@ -22544,7 +22544,6 @@ FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.Source FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_Description() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout StructuredReturnTypeText FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout get_StructuredReturnTypeText() FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String ReturnTypeText @@ -23091,7 +23090,6 @@ FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_ElaboratedXmlDoc() FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]) FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object) FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -23260,10 +23258,10 @@ FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.I FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] UnionCaseFields FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_UnionCaseFields() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String CompiledName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String DisplayName FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String FullName @@ -23296,9 +23294,11 @@ FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode() FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 Tag FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String Item FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String get_Item() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] elaboratedXmlLines +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_elaboratedXmlLines() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_unprocessedLines() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] unprocessedLines FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -23329,7 +23329,7 @@ FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsXmlDocFileSignature FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsNone() FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsText() FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsXmlDocFileSignature() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewText(System.String) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewText(System.String[], System.String[]) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewXmlDocFileSignature(System.String, System.String) FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc None FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_None() @@ -24772,9 +24772,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Comput FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForReferenceType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForValueType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Delegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableLocalValue FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Enumeration FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Event FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Exception @@ -24812,9 +24812,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsComputa FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForReferenceType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForValueType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDelegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableLocalValue FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEnumeration FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEvent FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsException @@ -24849,9 +24849,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsCom FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForReferenceType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForValueType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDelegate() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableLocalValue() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableTopLevelValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEnumeration() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEvent() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsException() @@ -24886,9 +24886,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.S FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForReferenceType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForValueType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Delegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableLocalValue FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableType FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Enumeration FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Event FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Exception @@ -24923,9 +24923,9 @@ FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.S FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForReferenceType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForValueType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Delegate() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableLocalValue() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableTopLevelValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableType() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Enumeration() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Event() FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Exception() @@ -26080,6 +26080,8 @@ FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 Tag FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 get_Tag() FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_ident() FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] ident FSharp.Compiler.SyntaxTree+SynArgInfo: SynArgInfo NewSynArgInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) @@ -37270,6 +37272,8 @@ FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSh FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] selfIdentifier FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats ctorArgs FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats get_ctorArgs() FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: System.String ToString() @@ -37588,7 +37592,7 @@ FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 Tag FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 get_Tag() FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAbstractSlot(SynValSig, MemberFlags, range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType], MemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitInherit(SynType, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInherit(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInterface(SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]], range) @@ -41532,17 +41536,12 @@ FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSha FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags] get_Item1() FSharp.Compiler.SyntaxTree+SynValData: SynValData NewSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags], SynValInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) FSharp.Compiler.SyntaxTree+SynValData: SynValInfo Item2 +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_Item2() +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() FSharp.Compiler.SyntaxTree+SynValData: System.String ToString() FSharp.Compiler.SyntaxTree+SynValInfo: Int32 Tag FSharp.Compiler.SyntaxTree+SynValInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) -FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo -FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() @@ -41840,7 +41839,7 @@ FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 GetHashCode(System.Collections FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 Tag FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 get_Tag() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDoc ToXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector Item2 FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector get_Item2() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: pos Item1 @@ -41863,7 +41862,7 @@ FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc Item2 FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item1() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item2() FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: XmlDoc ToXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDoc FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDocEmpty FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlMerge @@ -41892,32 +41891,25 @@ FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc PreXmlDocEmpty FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_Empty() FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_PreXmlDocEmpty() FSharp.Compiler.XmlDoc+PreXmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc: XmlDoc ToXmlDoc() -FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+XmlDoc: Boolean Equals(XmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty FSharp.Compiler.XmlDoc+XmlDoc: Boolean NonEmpty +FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_NonEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode() -FSharp.Compiler.XmlDoc+XmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+XmlDoc: Int32 Tag -FSharp.Compiler.XmlDoc+XmlDoc: Int32 get_Tag() -FSharp.Compiler.XmlDoc+XmlDoc: System.String ToString() +FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] GetElaboratedXmlLines() +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] UnprocessedLines +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] get_UnprocessedLines() +FSharp.Compiler.XmlDoc+XmlDoc: Void .ctor(System.String[], range) +FSharp.Compiler.XmlDoc+XmlDoc: Void Check(Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Empty FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Merge(XmlDoc, XmlDoc) -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Process(XmlDoc) FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc get_Empty() -FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty -FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() -FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] Item -FSharp.Compiler.XmlDoc+XmlDoc: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] get_Item() -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc NewXmlDoc(System.Tuple`2[System.String,FSharp.Compiler.Range+range][]) FSharp.Compiler.XmlDoc+XmlDoc: range Range FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() +FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) -FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) FSharp.Compiler.XmlDoc+XmlDocStatics: Void .ctor() FSharp.Compiler.XmlDoc+XmlDocStatics: XmlDoc Empty diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index 9f6e8211161..c3b1e0cb91c 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -218,6 +218,9 @@ let ``Test multi project 1 xmldoc`` () = match x3FromProject1A with | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc |> shouldEqual ([|" This is"; " x3"|] |> toIList) + | _ -> failwith "odd symbol!" + + match x3FromProject1A with | :? FSharpMemberOrFunctionOrValue as v -> v.ElaboratedXmlDoc |> shouldEqual ([|""; " This is"; " x3"; "" |] |> toIList) | _ -> failwith "odd symbol!" diff --git a/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs b/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs index 09a7951e047..3719d146d16 100644 --- a/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs +++ b/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs @@ -288,8 +288,8 @@ module internal XmlDocumentation = | FSharpXmlDoc.None -> () | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> documentationProvider.AppendDocumentation(xmlCollector, exnCollector, filename, signature, showExceptions, showParameters, paramName) - | FSharpXmlDoc.Text(rawXml) -> - let processedXml = ProcessXml(rawXml) + | FSharpXmlDoc.Text(_rawText, processedXml) -> + let processedXml = ProcessXml(String.concat "\n" processedXml) documentationProvider.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) let private AddSeparator (collector: ITaggedTextCollector) = From 2fb0a369edf79e6fb673206157be811b6158912b Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 19:27:18 +0100 Subject: [PATCH 17/26] fix test --- tests/service/ProjectAnalysisTests.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 1409300eea9..9122d855425 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -1548,7 +1548,7 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = let oddActivePatternCase = oddSymbol :?> FSharpActivePatternCase oddActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] - oddActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] + oddActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] oddActivePatternCase.XmlDocSig |> shouldEqual "" let oddGroup = oddActivePatternCase.Group oddGroup.IsTotal |> shouldEqual true @@ -1563,7 +1563,7 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = evenSymbol.ToString() |> shouldEqual "symbol Even" let evenActivePatternCase = evenSymbol :?> FSharpActivePatternCase evenActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] - evenActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] + evenActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] evenActivePatternCase.XmlDocSig |> shouldEqual "" let evenGroup = evenActivePatternCase.Group evenGroup.IsTotal |> shouldEqual true From 404ccc8e515794accd1089becc86d14663159345 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 19:38:53 +0100 Subject: [PATCH 18/26] use 38 ver --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 513cc29e98b..7cc27ede99b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -23,7 +23,7 @@ $(FSMajorVersion)-$(FSMinorVersion)-$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion).$(FSRevisionVersion) - 39 + 38 $(FSMinorVersion) $(FSBuildVersion) $(FSRevisionVersion) From 229377e9cb10ed422783c067202b2d5b5eef1217 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 20:02:40 +0100 Subject: [PATCH 19/26] fix build --- vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs b/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs index 9ecbd65e9fa..071d5c8df26 100644 --- a/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs +++ b/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs @@ -116,8 +116,8 @@ module internal XmlDocumentation = | FSharpXmlDoc.None -> () | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> documentationProvider.AppendDocumentation(sink, filename, signature, showExceptions, showParameters, paramName) - | FSharpXmlDoc.Text(rawXml) -> - let processedXml = ProcessXml(rawXml) + | FSharpXmlDoc.Text(rawText, _) -> + let processedXml = ProcessXml(String.concat "\n" rawText) documentationProvider.AppendDocumentationFromProcessedXML(sink, processedXml, showExceptions, showParameters, paramName) let private AddSeparator (collector: ITaggedTextCollector_DEPRECATED) = From 0e9df4cf8b9f766aad23728a7ceb0ed37db2a574 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 20:23:04 +0100 Subject: [PATCH 20/26] check docs of FCS --- .../FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index b00fd69c9ce..b4cc9aa0ce7 100644 --- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -10,7 +10,7 @@ $(DefineConstants);COMPILER_SERVICE_AS_DLL $(DefineConstants);COMPILER $(DefineConstants);ENABLE_MONO_SUPPORT - $(OtherFlags) /warnon:1182 --times + $(OtherFlags) /warnon:1182 /warnon:3390 --times true true From 19f5dc27362cad33daa10bdfcca895ca3e0c7bf5 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 20:29:27 +0100 Subject: [PATCH 21/26] start to fix FCS docs --- .../FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj | 2 +- src/fsharp/service/FSharpCheckerResults.fsi | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj index dd4cc85f781..1b36d5a4740 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj @@ -12,7 +12,7 @@ $(DefineConstants);COMPILER $(DefineConstants);MSBUILD_AT_LEAST_15 $(DefineConstants);LOCALIZATION_FCOMP - $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 + $(OtherFlags) --warnon:1182 /warnon:3390 --maxerrors:20 --extraoptimizationloops:1 true diff --git a/src/fsharp/service/FSharpCheckerResults.fsi b/src/fsharp/service/FSharpCheckerResults.fsi index 9705c1da0bf..737f88c66c6 100644 --- a/src/fsharp/service/FSharpCheckerResults.fsi +++ b/src/fsharp/service/FSharpCheckerResults.fsi @@ -235,12 +235,10 @@ type public FSharpCheckFileResults = /// Find the most precise display environment for the given line and column. member GetDisplayContextForPos : pos : pos -> Async - /// Determines if a long ident is resolvable at a specific point. - /// - /// An optional string used for tracing compiler operations associated with this request. + /// Determines if a long ident is resolvable at a specific point. member internal IsRelativeNameResolvable: cursorPos : pos * plid : string list * item: Item * ?userOpName: string -> Async - /// Determines if a long ident is resolvable at a specific point. + /// Determines if a long ident is resolvable at a specific point. /// /// An optional string used for tracing compiler operations associated with this request. member IsRelativeNameResolvableFromSymbol: cursorPos : pos * plid : string list * symbol: FSharpSymbol * ?userOpName: string -> Async From 1614dfb7f227ee2274a9b2309ca0f0001833e99f Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 20:55:07 +0100 Subject: [PATCH 22/26] complete some FCS docs and enable doc checking --- src/fsharp/service/FSharpCheckerResults.fsi | 2 - src/fsharp/service/service.fsi | 56 +++++++++++++++++---- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/fsharp/service/FSharpCheckerResults.fsi b/src/fsharp/service/FSharpCheckerResults.fsi index 737f88c66c6..6011f7c6f51 100644 --- a/src/fsharp/service/FSharpCheckerResults.fsi +++ b/src/fsharp/service/FSharpCheckerResults.fsi @@ -239,8 +239,6 @@ type public FSharpCheckFileResults = member internal IsRelativeNameResolvable: cursorPos : pos * plid : string list * item: Item * ?userOpName: string -> Async /// Determines if a long ident is resolvable at a specific point. - /// - /// An optional string used for tracing compiler operations associated with this request. member IsRelativeNameResolvableFromSymbol: cursorPos : pos * plid : string list * symbol: FSharpSymbol * ?userOpName: string -> Async /// Represents complete typechecked implementation file, including its typechecked signatures if any. diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi index 3ed57fa2f27..3ffc2176ed3 100755 --- a/src/fsharp/service/service.fsi +++ b/src/fsharp/service/service.fsi @@ -75,7 +75,14 @@ type public FSharpChecker = /// If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage. /// An optional resolver for non-file references, for legacy purposes /// An optional resolver to access the contents of .NET binaries in a memory-efficient way - static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool * ?keepAllBackgroundSymbolUses: bool * ?enableBackgroundItemKeyStoreAndSemanticClassification: bool -> FSharpChecker + /// Indicate whether name suggestion should be enabled + /// Indicate whether all symbol uses should be kept in background checking + /// Indicates whether a table of symbol keys should be kept for background compilation + static member Create: + ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * + ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * + ?suggestNamesForErrors: bool * ?keepAllBackgroundSymbolUses: bool * ?enableBackgroundItemKeyStoreAndSemanticClassification: bool + -> FSharpChecker /// /// Parse a source code file, returning information about brace matching in the file. @@ -125,7 +132,7 @@ type public FSharpChecker = /// /// /// The path for the file. The file name is also as a module name for implicit top level modules (e.g. in scripts). - /// The source to be parsed. + /// The source to be parsed. /// Parsing options for the project or script. /// An optional string used for tracing compiler operations associated with this request. [] @@ -195,7 +202,7 @@ type public FSharpChecker = /// /// The name of the file in the project whose source is being checked. /// An integer that can be used to indicate the version of the file. This will be returned by TryGetRecentCheckResultsForFile when looking up the file. - /// The full source for the file. + /// The source for the file. /// The options for the project or script. /// /// An item passed back to 'hasTextChangedSinceLastTypecheck' (from some calls made on 'FSharpCheckFileResults') to help determine if @@ -219,14 +226,24 @@ type public FSharpChecker = /// All files are read from the FileSystem API, except the file being checked. /// /// - /// Used to differentiate between scripts, to consider each script a separate project. - /// Also used in formatted error messages. - /// + /// Used to differentiate between scripts, to consider each script a separate project. Also used in formatted error messages. + /// The source for the file. + /// Is the preview compiler enabled. /// Indicates when the script was loaded into the editing environment, /// so that an 'unload' and 'reload' action will cause the script to be considered as a new project, /// so that references are re-resolved. + /// Other flags for compilation. + /// Add a default reference to the FSharp.Compiler.Interactive.Settings library. + /// Use the implicit references from the .NET SDK. + /// Set up compilation and analysis for .NET Framework scripts. + /// An extra data item added to the returned FSharpProjectOptions. + /// An optional unique stamp for the options. /// An optional string used for tracing compiler operations associated with this request. - member GetProjectOptionsFromScript : filename: string * sourceText: ISourceText * ?previewEnabled:bool * ?loadedTimeStamp: DateTime * ?otherFlags: string[] * ?useFsiAuxLib: bool * ?useSdkRefs: bool * ?assumeDotNetFramework: bool * ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string -> Async + member GetProjectOptionsFromScript: + filename: string * sourceText: ISourceText * ?previewEnabled:bool * ?loadedTimeStamp: DateTime * + ?otherFlags: string[] * ?useFsiAuxLib: bool * ?useSdkRefs: bool * ?assumeDotNetFramework: bool * + ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string + -> Async /// /// Get the FSharpProjectOptions implied by a set of command line arguments. @@ -237,6 +254,7 @@ type public FSharpChecker = /// Indicates when the script was loaded into the editing environment, /// so that an 'unload' and 'reload' action will cause the script to be considered as a new project, /// so that references are re-resolved. + /// An extra data item added to the returned FSharpProjectOptions. member GetProjectOptionsFromCommandLineArgs : projectFileName: string * argv: string[] * ?loadedTimeStamp: DateTime * ?extraProjectInfo: obj -> FSharpProjectOptions /// @@ -245,6 +263,7 @@ type public FSharpChecker = /// /// Initial source files list. Additional files may be added during argv evaluation. /// The command line arguments for the project build. + /// Indicates that parsing should assume the INTERACTIVE define and related settings member GetParsingOptionsFromCommandLineArgs: sourceFiles: string list * argv: string list * ?isInteractive: bool -> FSharpParsingOptions * FSharpErrorInfo list /// @@ -252,14 +271,15 @@ type public FSharpChecker = /// /// /// The command line arguments for the project build. + /// Indicates that parsing should assume the INTERACTIVE define and related settings member GetParsingOptionsFromCommandLineArgs: argv: string list * ?isInteractive: bool -> FSharpParsingOptions * FSharpErrorInfo list /// /// Get the FSharpParsingOptions implied by a FSharpProjectOptions. /// /// - /// The command line arguments for the project build. - member GetParsingOptionsFromProjectOptions: FSharpProjectOptions -> FSharpParsingOptions * FSharpErrorInfo list + /// The overall options. + member GetParsingOptionsFromProjectOptions: options: FSharpProjectOptions -> FSharpParsingOptions * FSharpErrorInfo list /// /// Like ParseFile, but uses results from the background builder. @@ -308,6 +328,8 @@ type public FSharpChecker = /// The output file must be given by a -o flag. /// The first argument is ignored and can just be "fsc.exe". /// + /// + /// The command line arguments for the project build. /// An optional string used for tracing compiler operations associated with this request. member Compile: argv:string[] * ?userOpName: string -> Async @@ -315,6 +337,13 @@ type public FSharpChecker = /// TypeCheck and compile provided AST /// /// + /// The syntax tree for the build. + /// The assembly name for the compiled output. + /// The output file for the compialtion. + /// The list of dependencies for the compialtion. + /// The output PDB file, if any. + /// Indicates if an executable is being produced. + /// Enables the /noframework flag. /// An optional string used for tracing compiler operations associated with this request. member Compile: ast:ParsedInput list * assemblyName:string * outFile:string * dependencies:string list * ?pdbFile:string * ?executable:bool * ?noframework:bool * ?userOpName: string -> Async @@ -331,6 +360,8 @@ type public FSharpChecker = /// case, a global setting is modified during the execution. /// /// + /// Other flags for compilation. + /// An optional pair of output streams, enabling execution of the result. /// An optional string used for tracing compiler operations associated with this request. member CompileToDynamicAssembly: otherFlags:string [] * execute:(TextWriter * TextWriter) option * ?userOpName: string -> Async @@ -338,6 +369,12 @@ type public FSharpChecker = /// TypeCheck and compile provided AST /// /// + /// The syntax tree for the build. + /// The assembly name for the compiled output. + /// The list of dependencies for the compialtion. + /// An optional pair of output streams, enabling execution of the result. + /// Enabled debug symbols + /// Enables the /noframework flag. /// An optional string used for tracing compiler operations associated with this request. member CompileToDynamicAssembly: ast:ParsedInput list * assemblyName:string * dependencies:string list * execute:(TextWriter * TextWriter) option * ?debug:bool * ?noframework:bool * ?userOpName: string -> Async @@ -397,6 +434,7 @@ type public FSharpChecker = /// This function is called when a project has been cleaned/rebuilt, and thus any live type providers should be refreshed. /// /// + /// The options describing the project that has been cleaned. /// An optional string used for tracing compiler operations associated with this request. member NotifyProjectCleaned: options: FSharpProjectOptions * ?userOpName: string -> Async From 23366ad2ba0a5e3c8da084932c9262c7614e27d5 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 14 Sep 2020 21:29:38 +0100 Subject: [PATCH 23/26] fix duplicate checking --- src/absil/illib.fs | 6 + src/fsharp/FSComp.txt | 5 +- src/fsharp/XmlDoc.fs | 9 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 7 +- src/fsharp/xlf/FSComp.txt.de.xlf | 7 +- src/fsharp/xlf/FSComp.txt.es.xlf | 7 +- src/fsharp/xlf/FSComp.txt.fr.xlf | 7 +- src/fsharp/xlf/FSComp.txt.it.xlf | 7 +- src/fsharp/xlf/FSComp.txt.ja.xlf | 9107 ++++++++++++----------- src/fsharp/xlf/FSComp.txt.ko.xlf | 7 +- src/fsharp/xlf/FSComp.txt.pl.xlf | 7 +- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 7 +- src/fsharp/xlf/FSComp.txt.ru.xlf | 7 +- src/fsharp/xlf/FSComp.txt.tr.xlf | 7 +- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 7 +- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 7 +- tests/FSharp.Test.Utilities/Compiler.fs | 5 + 17 files changed, 4649 insertions(+), 4567 deletions(-) diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 63aabe9d01a..8f05c07365f 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -420,6 +420,12 @@ module List = let mapiFoldSquared f z xss = mapFoldSquared f z (xss |> mapiSquared (fun i j x -> (i, j, x))) + let duplicates (xs: 'T list) = + xs + |> List.groupBy id + |> List.filter (fun (_, elems) -> Seq.length elems > 1) + |> List.map fst + module ResizeArray = /// Split a ResizeArray into an array of smaller chunks. diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 7ec2a7fd3c4..99c39ca2088 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1544,5 +1544,6 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3390,xmlDocMissingParameterName,"This XML comment is invalid: missing 'name' attribute for parameter or parameter reference" 3390,xmlDocMissingCrossReference,"This XML comment is invalid: missing 'cref' attribute for cross-reference" 3390,xmlDocInvalidParameterName,"This XML comment is invalid: unknown parameter '%s'" -3390,xmlDocMissingParameterDoc,"This XML comment is incomplete: no documentation for parameter '%s'" -3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" \ No newline at end of file +3390,xmlDocDuplicateParameter,"This XML comment is invalid: multiple documentation entries for '%s'" +3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" +3390,xmlDocMissingParameter,"This XML comment is incomplete: no documentation for parameter '%s'" \ No newline at end of file diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 625fd40ee88..9f53e338f3a 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -85,7 +85,12 @@ type XmlDoc(unprocessedLines: string[], range: range) = if paramsWithDocs.Length > 0 then for p in paramNames do if not (paramsWithDocs |> List.contains p) then - warning (Error (FSComp.SR.xmlDocMissingParameterDoc(p), doc.Range)) + warning (Error (FSComp.SR.xmlDocMissingParameter(p), doc.Range)) + + let duplicates = paramsWithDocs |> List.duplicates + + for d in duplicates do + warning (Error (FSComp.SR.xmlDocDuplicateParameter(d), doc.Range)) for pref in xml.Descendants(XName.op_Implicit "paramref") do match pref.Attribute(XName.op_Implicit "name") with @@ -99,7 +104,7 @@ type XmlDoc(unprocessedLines: string[], range: range) = warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) #if CREF_ELABORATION - member doc.Elaborate (paramNames) = + member doc.Elaborate (crefResolver) = for see in seq { yield! xml.Descendants(XName.op_Implicit "see") yield! xml.Descendants(XName.op_Implicit "seealso") yield! xml.Descendants(XName.op_Implicit "exception") } do diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index a6fb91ccb46..1ad174b1d74 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -527,6 +527,11 @@ This XML comment is invalid: '{0}' + + This XML comment is invalid: multiple documentation entries for '{0}' + This XML comment is invalid: multiple documentation entries for '{0}' + + This XML comment is invalid: unknown parameter '{0}' This XML comment is invalid: unknown parameter '{0}' @@ -537,7 +542,7 @@ This XML comment is invalid: missing 'cref' attribute for cross-reference - + This XML comment is incomplete: no documentation for parameter '{0}' This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 546491d566d..c4c2e2ff641 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -527,6 +527,11 @@ This XML comment is invalid: '{0}' + + This XML comment is invalid: multiple documentation entries for '{0}' + This XML comment is invalid: multiple documentation entries for '{0}' + + This XML comment is invalid: unknown parameter '{0}' This XML comment is invalid: unknown parameter '{0}' @@ -537,7 +542,7 @@ This XML comment is invalid: missing 'cref' attribute for cross-reference - + This XML comment is incomplete: no documentation for parameter '{0}' This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index c529a1455fe..a37a8be94c4 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -527,6 +527,11 @@ This XML comment is invalid: '{0}' + + This XML comment is invalid: multiple documentation entries for '{0}' + This XML comment is invalid: multiple documentation entries for '{0}' + + This XML comment is invalid: unknown parameter '{0}' This XML comment is invalid: unknown parameter '{0}' @@ -537,7 +542,7 @@ This XML comment is invalid: missing 'cref' attribute for cross-reference - + This XML comment is incomplete: no documentation for parameter '{0}' This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 39443716399..c9f8cee8d57 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -527,6 +527,11 @@ This XML comment is invalid: '{0}' + + This XML comment is invalid: multiple documentation entries for '{0}' + This XML comment is invalid: multiple documentation entries for '{0}' + + This XML comment is invalid: unknown parameter '{0}' This XML comment is invalid: unknown parameter '{0}' @@ -537,7 +542,7 @@ This XML comment is invalid: missing 'cref' attribute for cross-reference - + This XML comment is incomplete: no documentation for parameter '{0}' This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index eebbcb63e3e..cfe6f2f8ed7 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -527,6 +527,11 @@ This XML comment is invalid: '{0}' + + This XML comment is invalid: multiple documentation entries for '{0}' + This XML comment is invalid: multiple documentation entries for '{0}' + + This XML comment is invalid: unknown parameter '{0}' This XML comment is invalid: unknown parameter '{0}' @@ -537,7 +542,7 @@ This XML comment is invalid: missing 'cref' attribute for cross-reference - + This XML comment is incomplete: no documentation for parameter '{0}' This XML comment is incomplete: no documentation for parameter '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index b1c64209c19..9e90fcbb95d 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -2,7589 +2,7594 @@ - - Feature '{0}' is not available in F# {1}. Please use language version {2} or greater. - 機能 '{0}' は F# {1} では使用できません。{2} 以上の言語バージョンをお使いください。 - - - - Feature '{0}' is not supported by target runtime. - 機能 '{0}' は、ターゲット ランタイムではサポートされていません。 + + The argument names in the signature '{0}' and implementation '{1}' do not match. The argument name from the signature file will be used. This may cause problems when debugging or profiling. + The argument names in the signature '{0}' and implementation '{1}' do not match. The argument name from the signature file will be used. This may cause problems when debugging or profiling. - - Feature '{0}' requires the F# library for language version {1} or greater. - Feature '{0}' requires the F# library for language version {1} or greater. + + The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. + The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. - - Available overloads:\n{0} - 使用可能なオーバーロード:\n{0} + + The default value does not have the same type as the argument. The DefaultParameterValue attribute and any Optional attribute will be ignored. Note: 'null' needs to be annotated with the correct type, e.g. 'DefaultParameterValue(null:obj)'. + The default value does not have the same type as the argument. The DefaultParameterValue attribute and any Optional attribute will be ignored. Note: 'null' needs to be annotated with the correct type, e.g. 'DefaultParameterValue(null:obj)'. - - A generic construct requires that a generic type parameter be known as a struct or reference type. Consider adding a type annotation. - A generic construct requires that a generic type parameter be known as a struct or reference type. Consider adding a type annotation. + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because an abbreviation is being hidden by a signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. + The {0} definitions for type '{1}' in the signature and implementation are not compatible because an abbreviation is being hidden by a signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. - - Known types of arguments: {0} - 既知の型の引数: {0} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abbreviations differ: {2} versus {3} + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abbreviations differ: {2} versus {3} - - Known type of argument: {0} - 既知の型の引数: {0} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abstract member '{2}' was required by the signature but was not specified by the implementation + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abstract member '{2}' was required by the signature but was not specified by the implementation - - Known return type: {0} - 既知の戻り値の型: {0} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abstract member '{2}' was present in the implementation but not in the signature + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abstract member '{2}' was present in the implementation but not in the signature - - Known type parameters: {0} - 既知の型パラメーター: {0} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the accessibility specified in the signature is more than that specified in the implementation + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the accessibility specified in the signature is more than that specified in the implementation - - Known type parameter: {0} - 既知の型パラメーター: {0} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because a CLI type representation is being hidden by a signature + The {0} definitions for type '{1}' in the signature and implementation are not compatible because a CLI type representation is being hidden by a signature - - Argument at index {0} doesn't match - インデックス {0} の引数が一致しません + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field '{2}' was present in the implementation but not in the signature. Struct types must now reveal their fields in the signature for the type, though the fields may still be labelled 'private' or 'internal'. + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field '{2}' was present in the implementation but not in the signature. Struct types must now reveal their fields in the signature for the type, though the fields may still be labelled 'private' or 'internal'. - - Argument '{0}' doesn't match - 引数 '{0}' が一致しません + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the order of the fields is different in the signature and implementation + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the order of the fields is different in the signature and implementation - - The type provider designer assembly '{0}' could not be loaded from folder '{1}' because a dependency was missing or could not loaded. All dependencies of the type provider designer assembly must be located in the same folder as that assembly. The exception reported was: {2} - {3} - 依存関係がないか、または読み込めなかったため、型プロバイダーのデザイナー アセンブリ '{0}' をフォルダー '{1}' から読み込めませんでした。型プロバイダーのデザイナー アセンブリのすべての依存関係は、そのアセンブリと同じフォルダーに配置されている必要があります。次の例外が報告されました: {2} - {3} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field {2} was required by the signature but was not specified by the implementation + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field {2} was required by the signature but was not specified by the implementation - - The type provider designer assembly '{0}' could not be loaded from folder '{1}'. The exception reported was: {2} - {3} - 型プロバイダーのデザイナー アセンブリ '{0}' をフォルダー '{1}' から読み込めませんでした。次の例外が報告されました: {2} - {3} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field {2} was present in the implementation but not in the signature + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field {2} was present in the implementation but not in the signature - - Assembly attribute '{0}' refers to a designer assembly '{1}' which cannot be loaded or doesn't exist. The exception reported was: {2} - {3} - アセンブリ属性 '{0}' は、デザイナー アセンブリ '{1}' を参照していますが、これは読み込むことができないか、存在していません。報告された例外: {2} - {3} + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the IL representations differ + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the IL representations differ - - applicative computation expressions - 適用できる計算式 + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation defines the {2} '{3}' but the signature does not (or does, but not in the same order) + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation defines the {2} '{3}' but the signature does not (or does, but not in the same order) - - default interface member consumption - 既定のインターフェイス メンバーの消費 + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation defines a struct but the signature defines a type with a hidden representation + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation defines a struct but the signature defines a type with a hidden representation - - dotless float32 literal - ドットなしの float32 リテラル + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature. + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature. - - fixed-index slice 3d/4d - 固定インデックス スライス 3d/4d + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation. + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation. - - from-end slicing - 開始と終了を指定したスライス + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation says this type may use nulls as a representation but the signature does not + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation says this type may use nulls as a representation but the signature does not - - implicit yield - 暗黙的な yield + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation says this type may use nulls as an extra value but the signature does not + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation says this type may use nulls as an extra value but the signature does not - - interfaces with multiple generic instantiation - interfaces with multiple generic instantiation + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature. + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature. - - nameof - nameof + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature requires that the type supports the interface {2} but the interface has not been implemented + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature requires that the type supports the interface {2} but the interface has not been implemented - - nullable optional interop - Null 許容のオプションの相互運用 + + The {0} definitions in the signature and implementation are not compatible because the names differ. The type is called '{1}' in the signature file but '{2}' in implementation. + The {0} definitions in the signature and implementation are not compatible because the names differ. The type is called '{1}' in the signature file but '{2}' in implementation. - - open type declaration - open type declaration + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the number of {2}s differ + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the number of {2}s differ - - overloads for custom operations - overloads for custom operations + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the respective type parameter counts differ + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the respective type parameter counts differ - - package management - パッケージの管理 + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the representations differ + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the representations differ - - whitespace relexation - 空白の緩和 + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature has an abbreviation while the implementation does not + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature has an abbreviation while the implementation does not - - single underscore pattern - 単一のアンダースコア パターン + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature declares a {2} while the implementation declares a {3} + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature declares a {2} while the implementation declares a {3} - - string interpolation - string interpolation + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature defines the {2} '{3}' but the implementation does not (or does, but not in the same order) + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature defines the {2} '{3}' but the implementation does not (or does, but not in the same order) - - wild card in for loop - for ループのワイルド カード + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation. + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation. - - witness passing for trait constraints in F# quotations - F# 引用での特性制約に対する監視の引き渡し + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature says this type may use nulls as a representation but the implementation does not + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature says this type may use nulls as a representation but the implementation does not - - Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{{1+1}}'. - Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{{1+1}}'. + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature says this type may use nulls as an extra value but the implementation does not + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature says this type may use nulls as an extra value but the implementation does not - - .NET-style format specifiers such as '{{x,3}}' or '{{x:N5}}' may not be mixed with '%' format specifiers. - .NET-style format specifiers such as '{{x,3}}' or '{{x:N5}}' may not be mixed with '%' format specifiers. + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the types are of different kinds + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the types are of different kinds - - The '%P' specifier may not be used explicitly. - The '%P' specifier may not be used explicitly. + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because a type representation is being hidden by a signature + The {0} definitions for type '{1}' in the signature and implementation are not compatible because a type representation is being hidden by a signature - - Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{{expr}}', '{{expr,3}}' or '{{expr:N5}}' may be used. - Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{{expr}}', '{{expr,3}}' or '{{expr:N5}}' may be used. + + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the types have different base types + The {0} definitions for type '{1}' in the signature and implementation are not compatible because the types have different base types - - - {0} - - {0} + + The exception definitions are not compatible because the exception abbreviation is being hidden by the signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. + The exception definitions are not compatible because the exception abbreviation is being hidden by the signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - - From the end slicing with requires language version 5.0, use /langversion:preview. - 言語バージョン 5.0 が必要な最後からのスライスで、/langversion:preview を使用してください。 + + The exception definitions are not compatible because the CLI representations differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1} + The exception definitions are not compatible because the CLI representations differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1} - - Invalid directive '#{0} {1}' - Invalid directive '#{0} {1}' + + The exception definitions are not compatible because the exception declarations differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. + The exception definitions are not compatible because the exception declarations differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - - a byte string may not be interpolated - a byte string may not be interpolated + + The exception definitions are not compatible because the field '{0}' was present in the implementation but not in the signature. The module contains the exception definition\n {1} \nbut its signature specifies\n\t{2}. + The exception definitions are not compatible because the field '{0}' was present in the implementation but not in the signature. The module contains the exception definition\n {1} \nbut its signature specifies\n\t{2}. - - A '}}' character must be escaped (by doubling) in an interpolated string. - A '}}' character must be escaped (by doubling) in an interpolated string. + + The exception definitions are not compatible because the field '{0}' was required by the signature but was not specified by the implementation. The module contains the exception definition\n {1} \nbut its signature specifies\n\t{2}. + The exception definitions are not compatible because the field '{0}' was required by the signature but was not specified by the implementation. The module contains the exception definition\n {1} \nbut its signature specifies\n\t{2}. - - Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal. - Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal. + + The exception definitions are not compatible because the order of the fields is different in the signature and implementation. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. + The exception definitions are not compatible because the order of the fields is different in the signature and implementation. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - - Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression. - Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression. + + The exception definitions are not compatible because a CLI exception mapping is being hidden by a signature. The exception mapping must be visible to other modules. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1} + The exception definitions are not compatible because a CLI exception mapping is being hidden by a signature. The exception mapping must be visible to other modules. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1} - - Stream does not begin with a null resource and is not in '.RES' format. - ストリームは null リソースでは始まらず、'RES' 形式でもありません。 + + The exception definitions are not compatible because the exception abbreviations in the signature and implementation differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. + The exception definitions are not compatible because the exception abbreviations in the signature and implementation differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - - Resource header beginning at offset {0} is malformed. - オフセット {0} で始まるリソース ヘッダーの形式に誤りがあります。 + + The module contains the field\n {0} \nbut its signature specifies\n {1} \nthe accessibility specified in the signature is more than that specified in the implementation + The module contains the field\n {0} \nbut its signature specifies\n {1} \nthe accessibility specified in the signature is more than that specified in the implementation - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' - 言語バージョンで許可された値を表示し、'最新' や 'プレビュー' などの言語バージョンを指定する + + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'literal' modifiers differ + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'literal' modifiers differ - - Supported language versions: - サポートされる言語バージョン: + + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'mutable' modifiers differ + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'mutable' modifiers differ - - Unrecognized value '{0}' for --langversion use --langversion:? for complete list - --langversion の値 '{0}' が認識されません。完全なリストについては、--langversion:? を使用してください + + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe names differ + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe names differ - - The package management feature requires language version 5.0 use /langversion:preview - パッケージ管理機能では、言語バージョン 5.0 で /langversion:preview を使用する必要があります + + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'static' modifiers differ + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'static' modifiers differ - - Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected. - Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected. + + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe types differ + The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe types differ - - Incomplete interpolated string begun at or before here - Incomplete interpolated string begun at or before here + + Invalid recursive reference to an abstract slot + Invalid recursive reference to an abstract slot - - Incomplete interpolated string expression fill begun at or before here - Incomplete interpolated string expression fill begun at or before here + + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nthe accessibility specified in the signature is more than that specified in the implementation + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nthe accessibility specified in the signature is more than that specified in the implementation - - Incomplete interpolated triple-quote string begun at or before here - Incomplete interpolated triple-quote string begun at or before here + + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe respective number of data fields differ + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe respective number of data fields differ - - Incomplete interpolated verbatim string begun at or before here - Incomplete interpolated verbatim string begun at or before here + + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe names differ + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe names differ - - Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. - メンバー定義に予期しない記号 '.' があります。'with'、'=' またはその他のトークンが必要です。 + + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe types of the fields differ + The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe types of the fields differ - - Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) - PDB に格納されているソース ファイル チェックサムを計算するためのアルゴリズムを指定します。サポートされる値は次のとおりです: SHA1 または SHA256 (既定) + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is abstract and the other isn't + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is abstract and the other isn't - - Algorithm '{0}' is not supported - アルゴリズム '{0}' はサポートされていません + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe accessibility specified in the signature is more than that specified in the implementation + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe accessibility specified in the signature is more than that specified in the implementation - - #i is not supported by the registered PackageManagers - #i is not supported by the registered PackageManagers + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int. + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. - この機能は、このバージョンの F# ではサポートされていません。この機能を使用するには、/langversion:preview の追加が必要な場合があります。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nAn arity was not inferred for this value + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nAn arity was not inferred for this value - - This is the wrong anonymous record. It should have the fields {0}. - この匿名レコードは正しくありません。フィールド {0} を含んでいる必要があります。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe mutability attributes differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe mutability attributes differ - - This anonymous record does not have enough fields. Add the missing fields {0}. - この匿名レコードには十分なフィールドがありません。不足しているフィールド {0} を追加してください。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled names differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled names differ - - This anonymous record has too many fields. Remove the extra fields {0}. - この匿名レコードはフィールドが多すぎます。不要なフィールド {0} を削除してください。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe display names differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe display names differ - - Invalid Anonymous Record type declaration. - Invalid Anonymous Record type declaration. + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe CLI member names differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe CLI member names differ - - Attributes cannot be applied to type extensions. - 属性を型拡張に適用することはできません。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is an extension member and the other is not + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is an extension member and the other is not - - Byref types are not allowed in an open type declaration. - Byref types are not allowed in an open type declaration. + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is final and the other isn't + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is final and the other isn't - - Mismatch in interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{{1+1}}' - Mismatch in interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{{1+1}}' + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute. + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute. - - Invalid alignment in interpolated string - Invalid alignment in interpolated string + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe number of generic parameters in the signature and implementation differ (the signature declares {3} but the implementation declares {4} + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe number of generic parameters in the signature and implementation differ (the signature declares {3} but the implementation declares {4} - - use! may not be combined with and! - use! を and! と組み合わせて使用することはできません + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe inline flags differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe inline flags differ - - Cannot assign a value to another value marked literal - Cannot assign a value to another value marked literal + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled representation of this method is as an instance member, but the signature indicates its compiled representation is as a static member + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled representation of this method is as an instance member, but the signature indicates its compiled representation is as a static member - - Cannot assign '{0}' to a value marked literal - Cannot assign '{0}' to a value marked literal + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe literal constant values and/or attributes differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe literal constant values and/or attributes differ - - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - 'let! ... and! ...' コンストラクトは、コンピュテーション式ビルダーが '{0}' メソッドまたは適切な 'MergeSource' および 'Bind' メソッドのいずれかを定義している場合にのみ使用できます + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe names differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe names differ - - Invalid interpolated string. {0} - Invalid interpolated string. {0} + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is a constructor/property and the other is not + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is a constructor/property and the other is not - - Interface member '{0}' does not have a most specific implementation. - インターフェイス メンバー '{0}' には最も固有な実装がありません。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is a type function and the other is not. The signature requires explicit type parameters if they are present in the implementation. + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is a type function and the other is not. The signature requires explicit type parameters if they are present in the implementation. - - '{0}' cannot implement the interface '{1}' with the two instantiations '{2}' and '{3}' because they may unify. - '{0}' cannot implement the interface '{1}' with the two instantiations '{2}' and '{3}' because they may unify. + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is marked as an override and the other isn't + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is marked as an override and the other isn't - - You cannot implement the interface '{0}' with the two instantiations '{1}' and '{2}' because they may unify. - You cannot implement the interface '{0}' with the two instantiations '{1}' and '{2}' because they may unify. + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe respective type parameter counts differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe respective type parameter counts differ - - The type '{0}' does not define the field, constructor or member '{1}'. - 型 '{0}' は、フィールド、コンストラクター、またはメンバー '{1}' を定義していません。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled representation of this method is as a static member but the signature indicates its compiled representation is as an instance member + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled representation of this method is as a static member but the signature indicates its compiled representation is as an instance member - - The namespace '{0}' is not defined. - 名前空間 '{0}' が定義されていません。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is static and the other isn't + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is static and the other isn't - - The namespace or module '{0}' is not defined. - 名前空間またはモジュール '{0}' が定義されていません。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe types differ + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe types differ - - The field, constructor or member '{0}' is not defined. - フィールド、コンストラクター、またはメンバー '{0}' が定義されていません。 + + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is virtual and the other isn't + Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is virtual and the other isn't - - The value, constructor, namespace or type '{0}' is not defined. - 値、コンストラクター、名前空間、または型 '{0}' が定義されていません。 + + The mutable local '{0}' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed. + The mutable local '{0}' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed. - - The value or constructor '{0}' is not defined. - 値またはコンストラクター '{0}' が定義されていません。 + + Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x' + Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x' - - The value, namespace, type or module '{0}' is not defined. - 値、名前空間、型、またはモジュール '{0}' が定義されていません。 + + Active pattern '{0}' is not a function + Active pattern '{0}' is not a function - - The constructor, module or namespace '{0}' is not defined. - コンストラクター、モジュール、または名前空間 '{0}' が定義されていません。 + + Add . for indexer access. + Add . for indexer access. - - The type '{0}' is not defined. - 型 '{0}' が定義されていません。 + + All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'. + All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'. - - The type '{0}' is not defined in '{1}'. - {1}' で型 '{0}' が定義されていません。 + + Found by AssemblyFoldersEx registry key + Found by AssemblyFoldersEx registry key - - The record label or namespace '{0}' is not defined. - レコード ラベルまたは名前空間 '{0}' が定義されていません。 + + Found by AssemblyFolders registry key + Found by AssemblyFolders registry key - - The record label '{0}' is not defined. - レコード ラベル '{0}' が定義されていません。 + + Global Assembly Cache + Global Assembly Cache - - Maybe you want one of the following: - 次のいずれかの可能性はありませんか: + + .NET Framework + .NET Framework - - The type parameter {0} is not defined. - 型パラメーター {0} が定義されていません。 + + This indexer notation has been removed from the F# language + This indexer notation has been removed from the F# language - - The pattern discriminator '{0}' is not defined. - パターン識別子 '{0}' が定義されていません。 + + Invalid expression on left of assignment + Invalid expression on left of assignment - - Replace with '{0}' - '{0}' で置換 + + Error while parsing embedded IL + Error while parsing embedded IL - - Add . for indexer access. - インデクサーにアクセスするには . を追加します。 + + Error while parsing embedded IL type + Error while parsing embedded IL type - - All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'. - リスト コンストラクター式のすべての要素は同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。 + + A type with attribute 'CustomComparison' must have an explicit implementation of at least one of 'System.IComparable' or 'System.Collections.IStructuralComparable' + A type with attribute 'CustomComparison' must have an explicit implementation of at least one of 'System.IComparable' or 'System.Collections.IStructuralComparable' - - All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'. - 配列コンストラクター式の要素はすべて同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。 + + The 'CustomEquality' attribute must be used in conjunction with the 'NoComparison' or 'CustomComparison' attributes + The 'CustomEquality' attribute must be used in conjunction with the 'NoComparison' or 'CustomComparison' attributes - - This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'. - 'if' 式に 'else' ブランチがありません。'then' ブランチは型 '{0}' です。'if' はステートメントではなく式であるため、同じ型の値を返す 'else' ブランチを追加してください。 + + A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' + A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' - - The 'if' expression needs to have type '{0}' to satisfy context type requirements. It currently has type '{1}'. - コンテキストの型要件を満たすためには、'if' 式の型は '{0}' である必要があります。現在の型は '{1}' です。 + + This type uses an invalid mix of the attributes 'NoEquality', 'ReferenceEquality', 'StructuralEquality', 'NoComparison' and 'StructuralComparison' + This type uses an invalid mix of the attributes 'NoEquality', 'ReferenceEquality', 'StructuralEquality', 'NoComparison' and 'StructuralComparison' - - All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - if' 式のすべてのブランチは同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。 + + A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes + A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes - - All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - パターン マッチ式のすべてのブランチは、同じ型の値を返す必要があります。最初のブランチが返した値の型は '{0}' ですが、このブランチが返した値の型は '{1}' です。 + + A type with attribute 'NoEquality' should not usually have an explicit implementation of 'Object.Equals(obj)'. Disable this warning if this is intentional for interoperability purposes + A type with attribute 'NoEquality' should not usually have an explicit implementation of 'Object.Equals(obj)'. Disable this warning if this is intentional for interoperability purposes - - A pattern match guard must be of type 'bool', but this 'when' expression is of type '{0}'. - パターン マッチ ガードは型 'bool' である必要がありますが、この 'when' 式は型 '{0}' です。 + + The 'NoEquality' attribute must be used in conjunction with the 'NoComparison' attribute + The 'NoEquality' attribute must be used in conjunction with the 'NoComparison' attribute - - A ';' is used to separate field values in records. Consider replacing ',' with ';'. - ';' は、レコード内でフィールド値を区切るために使われます。',' を ';' で置き換えることを検討してください。 + + The 'ReferenceEquality' attribute cannot be used on structs. Consider using the 'StructuralEquality' attribute instead, or implement an override for 'System.Object.Equals(obj)'. + The 'ReferenceEquality' attribute cannot be used on structs. Consider using the 'StructuralEquality' attribute instead, or implement an override for 'System.Object.Equals(obj)'. - - The '!' operator is used to dereference a ref cell. Consider using 'not expr' here. - '!' 演算子は ref セルの逆参照に使用されます。ここに 'not expr' を使用することをご検討ください。 + + Only record, union, exception and struct types may be augmented with the 'ReferenceEquality', 'StructuralEquality' and 'StructuralComparison' attributes + Only record, union, exception and struct types may be augmented with the 'ReferenceEquality', 'StructuralEquality' and 'StructuralComparison' attributes - - The non-generic type '{0}' does not expect any type arguments, but here is given {1} type argument(s) - 非ジェネリック型 '{0}' に型引数は使用できませんが、{1} 個の型引数があります + + A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' + A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' - - Consider using 'return!' instead of 'return'. - 'return' の代わりに 'return!' を使うことを検討してください。 + + The 'StructuralComparison' attribute must be used in conjunction with the 'StructuralEquality' attribute + The 'StructuralComparison' attribute must be used in conjunction with the 'StructuralEquality' attribute - - Use reference assemblies for .NET framework references when available (Enabled by default). - 使用可能な場合は、.NET Framework リファレンスの参照アセンブリを使用します (既定で有効)。 + + The 'StructuralEquality' attribute must be used in conjunction with the 'NoComparison' or 'StructuralComparison' attributes + The 'StructuralEquality' attribute must be used in conjunction with the 'NoComparison' or 'StructuralComparison' attributes - - This XML comment is invalid: '{0}' - This XML comment is invalid: '{0}' + + A type cannot have both the 'ReferenceEquality' and 'StructuralEquality' or 'StructuralComparison' attributes + A type cannot have both the 'ReferenceEquality' and 'StructuralEquality' or 'StructuralComparison' attributes - - This XML comment is invalid: unknown parameter '{0}' - This XML comment is invalid: unknown parameter '{0}' + + '{0}' is not a valid floating point argument + '{0}' is not a valid floating point argument - - This XML comment is invalid: missing 'cref' attribute for cross-reference - This XML comment is invalid: missing 'cref' attribute for cross-reference + + '{0}' is not a valid integer argument + '{0}' is not a valid integer argument - - This XML comment is incomplete: no documentation for parameter '{0}' - This XML comment is incomplete: no documentation for parameter '{0}' + + Assembly resolution failure at or near this location + Assembly resolution failure at or near this location - - This XML comment is invalid: missing 'name' attribute for parameter or parameter reference - This XML comment is invalid: missing 'name' attribute for parameter or parameter reference + + Unable to read assembly '{0}' + Unable to read assembly '{0}' - - This XML comment is invalid: unresolved cross-reference '{0}' - This XML comment is invalid: unresolved cross-reference '{0}' + + The file extensions '.ml' and '.mli' are for ML compatibility + The file extensions '.ml' and '.mli' are for ML compatibility - - Consider using 'yield!' instead of 'yield'. - 'yield' の代わりに 'yield!' を使うことを検討してください。 + + Source file '{0}' could not be found + Source file '{0}' could not be found - - \nA tuple type is required for one or more arguments. Consider wrapping the given arguments in additional parentheses or review the definition of the interface. - \n1 つ以上の引数についてタプル型を指定する必要があります。指定した引数を追加のかっこ内にラップすることを検討するか、インターフェイスの定義を確認してください。 + + Could not resolve assembly '{0}' + Could not resolve assembly '{0}' - - Invalid warning number '{0}' - 警告番号 '{0}' が無効です + + Could not resolve assembly '{0}' required by '{1}' + Could not resolve assembly '{0}' required by '{1}' - - Invalid version string '{0}' - バージョン文字列 '{0}' が無効です + + The F#-compiled DLL '{0}' needs to be recompiled to be used with this version of F# + The F#-compiled DLL '{0}' needs to be recompiled to be used with this version of F# - - Invalid version file '{0}' - バージョン ファイル '{0}' が無効です + + Directives inside modules are ignored + Directives inside modules are ignored - - Problem with filename '{0}': {1} - ファイル名 '{0}' に問題があります: {1} + + Error opening binary file '{0}': {1} + Error opening binary file '{0}': {1} - - No inputs specified - 入力が指定されていません + + File '{0}' not found alongside FSharp.Core. File expected in {1}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. + File '{0}' not found alongside FSharp.Core. File expected in {1}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. - - The '--pdb' option requires the '--debug' option to be used - '--pdb' オプションでは '--debug' オプションを使用する必要があります + + FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. + FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. - - - The search directory '{0}' is invalid - 検索ディレクトリ '{0}' が無効です + + + An implementation of the file or module '{0}' has already been given + An implementation of the file or module '{0}' has already been given - - The search directory '{0}' could not be found - 検索ディレクトリ '{0}' が見つかりませんでした + + An implementation of file or module '{0}' has already been given. Compilation order is significant in F# because of type inference. You may need to adjust the order of your files to place the signature file before the implementation. In Visual Studio files are type-checked in the order they appear in the project file, which can be edited manually or adjusted using the solution explorer. + An implementation of file or module '{0}' has already been given. Compilation order is significant in F# because of type inference. You may need to adjust the order of your files to place the signature file before the implementation. In Visual Studio files are type-checked in the order they appear in the project file, which can be edited manually or adjusted using the solution explorer. - - '{0}' is not a valid filename - '{0}' は有効なファイル名ではありません + + The declarations in this file will be placed in an implicit module '{0}' based on the file name '{1}'. However this is not a valid F# identifier, so the contents will not be accessible from other files. Consider renaming the file or adding a 'module' or 'namespace' declaration at the top of the file. + The declarations in this file will be placed in an implicit module '{0}' based on the file name '{1}'. However this is not a valid F# identifier, so the contents will not be accessible from other files. Consider renaming the file or adding a 'module' or 'namespace' declaration at the top of the file. '{0}' is not a valid assembly name - '{0}' は有効なアセンブリ名ではありません - - - - Unrecognized privacy setting '{0}' for managed resource, valid options are 'public' and 'private' - マネージド リソースの認識されないプライバシー設定 '{0}'。有効なオプションは 'public' および 'private' です。 + '{0}' is not a valid assembly name - - Unable to read assembly '{0}' - アセンブリ '{0}' を読み取れません + + '{0}' is not a valid filename + '{0}' is not a valid filename - - Assembly resolution failure at or near this location - この場所またはこの場所付近でアセンブリ解決エラーが発生しました + + Invalid directive. Expected '#I \"<path>\"'. + Invalid directive. Expected '#I \"<path>\"'. - - The declarations in this file will be placed in an implicit module '{0}' based on the file name '{1}'. However this is not a valid F# identifier, so the contents will not be accessible from other files. Consider renaming the file or adding a 'module' or 'namespace' declaration at the top of the file. - このファイルの宣言は、ファイル名 '{1}' に基づいて、暗黙的なモジュール '{0}' に配置されます。ただし、これは有効な F# 識別子ではないため、その内容には他のファイルからアクセスできません。ファイル名を変更するか、ファイルの一番上に 'module' または 'namespace' の宣言を追加してください。 + + Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'. + Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'. - - Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration. - ライブラリまたは複数ファイル アプリケーション内のファイルは、名前空間またはモジュールの宣言から開始する必要があります (例: 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule')。アプリケーションの最後のソース ファイルのみ、このような宣言を省略できます。 + + Invalid directive. Expected '#r \"<file-or-assembly>\"'. + Invalid directive. Expected '#r \"<file-or-assembly>\"'. - - Files in libraries or multiple-file applications must begin with a namespace or module declaration. When using a module declaration at the start of a file the '=' sign is not allowed. If this is a top-level module, consider removing the = to resolve this error. - ライブラリ内のファイル、または複数ファイル アプリケーション内のファイルでは、先頭に名前空間宣言またはモジュール宣言を置く必要があります。ファイルの先頭にモジュール宣言を置く場合、'=' 記号は指定できません。これが最上位レベルのモジュールである場合は、このエラーを解決するために = を削除することを検討してください。 + + Invalid directive. Expected '#time', '#time \"on\"' or '#time \"off\"'. + Invalid directive. Expected '#time', '#time \"on\"' or '#time \"off\"'. - - This file contains multiple declarations of the form 'module SomeNamespace.SomeModule'. Only one declaration of this form is permitted in a file. Change your file to use an initial namespace declaration and/or use 'module ModuleName = ...' to define your modules. - このファイルには、'module SomeNamespace.SomeModule' という形式の宣言が複数含まれます。1 ファイル内で指定できるこの形式の宣言は 1 つのみです。最初の名前空間宣言を使用するようにファイルを変更するか、'module ModuleName = ...' を使用してモジュールを定義してください。 + + Invalid module or namespace name + Invalid module or namespace name - - Option requires parameter: {0} - オプションにパラメーターが必要です: {0} + + Unrecognized privacy setting '{0}' for managed resource, valid options are 'public' and 'private' + Unrecognized privacy setting '{0}' for managed resource, valid options are 'public' and 'private' - - Source file '{0}' could not be found - ソース ファイル '{0}' が見つかりませんでした + + The search directory '{0}' is invalid + The search directory '{0}' is invalid The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. - '{0}' のファイル拡張子は認識されません。ソース ファイルの拡張子は .fs、.fsi、.fsx、.fsscript、.ml、または .mli にする必要があります。 + The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. - - Could not resolve assembly '{0}' - アセンブリ '{0}' を解決できませんでした + + Invalid version file '{0}' + Invalid version file '{0}' - - Could not resolve assembly '{0}' required by '{1}' - {1}' に必要なアセンブリ '{0}' を解決できませんでした + + Invalid version string '{0}' + Invalid version string '{0}' - - Error opening binary file '{0}': {1} - バイナリ ファイル '{0}' を開くときにエラーが発生しました: {1} + + Invalid warning number '{0}' + Invalid warning number '{0}' - - The F#-compiled DLL '{0}' needs to be recompiled to be used with this version of F# - F# でコンパイルされたこの DLL '{0}' は、このバージョンの F# で使用するために再コンパイルする必要があります + + Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration. + Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration. - - Invalid directive. Expected '#I \"<path>\"'. - ディレクティブが無効です。'#I \"<path>\"' が必要でした。 + + This file contains multiple declarations of the form 'module SomeNamespace.SomeModule'. Only one declaration of this form is permitted in a file. Change your file to use an initial namespace declaration and/or use 'module ModuleName = ...' to define your modules. + This file contains multiple declarations of the form 'module SomeNamespace.SomeModule'. Only one declaration of this form is permitted in a file. Change your file to use an initial namespace declaration and/or use 'module ModuleName = ...' to define your modules. - - Invalid directive. Expected '#r \"<file-or-assembly>\"'. - ディレクティブが無効です。'#r \"<file-or-assembly>\"' という形式で指定する必要があります。 + + No inputs specified + No inputs specified - - Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'. - ディレクティブが無効です。'#load \"<file>\" ... \"<file>\"' が必要でした。 + + Option requires parameter: {0} + Option requires parameter: {0} - - Invalid directive. Expected '#time', '#time \"on\"' or '#time \"off\"'. - ディレクティブが無効です。'#time'、'#time \"on\"'、または '#time \"off\"' という形式で指定する必要があります。 + + The '--pdb' option requires the '--debug' option to be used + The '--pdb' option requires the '--debug' option to be used - - Directives inside modules are ignored - モジュール内のディレクティブは無視されます + + Problem reading assembly '{0}': {1} + Problem reading assembly '{0}': {1} - - A signature for the file or module '{0}' has already been specified - ファイルまたはモジュール '{0}' のシグネチャは指定済みです + + Problem with filename '{0}': {1} + Problem with filename '{0}': {1} - - An implementation of file or module '{0}' has already been given. Compilation order is significant in F# because of type inference. You may need to adjust the order of your files to place the signature file before the implementation. In Visual Studio files are type-checked in the order they appear in the project file, which can be edited manually or adjusted using the solution explorer. - ファイルまたはモジュール '{0}' の実装は指定済みです。型推論があるため、F# ではコンパイルの順序が重要です。必要に応じて、実装の前にシグネチャ ファイルを配置するよう、ファイルの順序を調整します。Visual Studio では、プロジェクト ファイル内の出現順にファイルが型チェックされます。プロジェクト ファイルは、手動で編集するか、ソリューション エクスプローラーを使用して調整することができます。 + + The search directory '{0}' could not be found + The search directory '{0}' could not be found - - An implementation of the file or module '{0}' has already been given - ファイルまたはモジュール '{0}' の実装は指定済みです + + A signature for the file or module '{0}' has already been specified + A signature for the file or module '{0}' has already been specified The signature file '{0}' does not have a corresponding implementation file. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match. - シグネチャ ファイル '{0}' に対応する実装ファイルがありません。実装ファイルが存在する場合、シグネチャ ファイルおよび実装ファイル内の 'module' 宣言や 'namespace' 宣言が一致することを確認してください。 + The signature file '{0}' does not have a corresponding implementation file. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match. - - '{0}' is not a valid integer argument - '{0}' は有効な整数引数ではありません + + Filename '{0}' contains invalid character '{1}' + Filename '{0}' contains invalid character '{1}' - - '{0}' is not a valid floating point argument - '{0}' は有効な浮動小数点引数ではありません + + The non-generic type '{0}' does not expect any type arguments, but here is given {1} type argument(s) + The non-generic type '{0}' does not expect any type arguments, but here is given {1} type argument(s) Unrecognized option: '{0}' - 認識されないオプション:'{0}' + Unrecognized option: '{0}' - - Invalid module or namespace name - モジュール名または名前空間名が無効です + + The operator '{0}' cannot be resolved. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. + The operator '{0}' cannot be resolved. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - - Error reading/writing metadata for the F# compiled DLL '{0}'. Was the DLL compiled with an earlier version of the F# compiler? (error: '{1}'). - F# でコンパイルした DLL '{0}' のメタデータの読み取り/書き込み中にエラーが発生しました。旧バージョンの F# コンパイラーでコンパイルした DLL ですか? (エラー: '{1}') + + Lowercase literal '{0}' is being shadowed by a new pattern with the same name. Only uppercase and module-prefixed literals can be used as named patterns. + Lowercase literal '{0}' is being shadowed by a new pattern with the same name. Only uppercase and module-prefixed literals can be used as named patterns. - - The type/module '{0}' is not a concrete module or type - 型/モジュール '{0}' は具象モジュールまたは具象型ではありません + + Type inference caused the type variable {0} to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic. + Type inference caused the type variable {0} to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic. - - The type '{0}' has an inline assembly code representation - 型 '{0}' にはインライン アセンブラー コード表現があります + + Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic. + Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic. - - A namespace and a module named '{0}' both occur in two parts of this assembly - '{0}' という名前空間とモジュールの両方がこのアセンブリの 2 か所で発生しています + + Redundant arguments are being ignored in function '{0}'. Expected {1} but got {2} arguments. + Redundant arguments are being ignored in function '{0}'. Expected {1} but got {2} arguments. - - Two modules named '{0}' occur in two parts of this assembly - '{0}' という 2 つのモジュールがこのアセンブリの 2 か所で使用されています + + The attribute type '{0}' has 'AllowMultiple=false'. Multiple instances of this attribute cannot be attached to a single language element. + The attribute type '{0}' has 'AllowMultiple=false'. Multiple instances of this attribute cannot be attached to a single language element. - - Two type definitions named '{0}' occur in namespace '{1}' in two parts of this assembly - {0}' という 2 つの型の定義が、このアセンブリの 2 か所の名前空間 '{1}' で発生しています + + The 'base' keyword is used in an invalid way. Base calls cannot be used in closures. Consider using a private member to make base calls. + The 'base' keyword is used in an invalid way. Base calls cannot be used in closures. Consider using a private member to make base calls. - - A module and a type definition named '{0}' occur in namespace '{1}' in two parts of this assembly - {0}' というモジュールおよび型の定義が、このアセンブリの 2 か所の名前空間 '{1}' で発生しています + + The byref-typed variable '{0}' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions. + The byref-typed variable '{0}' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions. - - Invalid member signature encountered because of an earlier error - 前に発生しているエラーのために、メンバーのシグネチャが無効です + + A type would store a byref typed value. This is not permitted by Common IL. + A type would store a byref typed value. This is not permitted by Common IL. - - This value does not have a valid property setter type - この値には、有効なプロパティの set アクセス操作子の型がありません + + Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition', 'byref', 'CallerLineNumber', 'CallerMemberName', or 'CallerFilePath' arguments + Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition', 'byref', 'CallerLineNumber', 'CallerMemberName', or 'CallerFilePath' arguments - - Invalid form for a property getter. At least one '()' argument is required when using the explicit syntax. - プロパティのゲッターの形式が無効です。明示的な構文を使用する場合、少なくとも 1 つの '()' 引数が必要です。 + + Duplicate method. The method '{0}' has the same name and signature as another method in type '{1}'. + Duplicate method. The method '{0}' has the same name and signature as another method in type '{1}'. - - Invalid form for a property setter. At least one argument is required. - プロパティの set アクセス操作子の形式が無効です。少なくとも 1 つの引数が必要です。 + + The method '{0}' has curried arguments but has the same name as another method in type '{1}'. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments. + The method '{0}' has curried arguments but has the same name as another method in type '{1}'. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments. - - Unexpected use of a byref-typed variable - byref 型変数の予期しない使用方法です: + + Duplicate method. The abstract method '{0}' has the same name and signature as an abstract method in an inherited type. + Duplicate method. The abstract method '{0}' has the same name and signature as an abstract method in an inherited type. - - Invalid mutation of a constant expression. Consider copying the expression to a mutable local, e.g. 'let mutable x = ...'. - 定数式の変更は無効です。変更可能なローカルに式をコピーしてください (たとえば、'let mutable x = ...')。 + + Duplicate method. The abstract method '{0}' has the same name and signature as an abstract method in an inherited type once tuples, functions, units of measure and/or provided types are erased. + Duplicate method. The abstract method '{0}' has the same name and signature as an abstract method in an inherited type once tuples, functions, units of measure and/or provided types are erased. - - The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed - この操作で元の値が変更されないように、値はコピーされました + + Duplicate method. The method '{0}' has the same name and signature as another method in type '{1}' once tuples, functions, units of measure and/or provided types are erased. + Duplicate method. The method '{0}' has the same name and signature as another method in type '{1}' once tuples, functions, units of measure and/or provided types are erased. - - Recursively defined values cannot appear directly as part of the construction of a tuple value within a recursive binding - 再帰的に定義された値は、再帰的な束縛内にあるタプル値の構造の一部として直接使用することはできません。 + + Duplicate property. The property '{0}' has the same name and signature as another property in type '{1}'. + Duplicate property. The property '{0}' has the same name and signature as another property in type '{1}'. - - Recursive values cannot appear directly as a construction of the type '{0}' within a recursive binding. This feature has been removed from the F# language. Consider using a record instead. - 再帰的な値は、再帰的な束縛内の型 '{0}' の構造として直接使用することはできません。この機能は F# 言語から削除されました。代わりにレコードを使用してください。 + + Duplicate property. The property '{0}' has the same name and signature as another property in type '{1}' once tuples, functions, units of measure and/or provided types are erased. + Duplicate property. The property '{0}' has the same name and signature as another property in type '{1}' once tuples, functions, units of measure and/or provided types are erased. - - Recursive values cannot be directly assigned to the non-mutable field '{0}' of the type '{1}' within a recursive binding. Consider using a mutable field instead. - 再帰的な値は、再帰的な束縛内の型 '{1}' の変更可能ではないフィールド '{0}' に直接割り当てることはできません。代わりに変更可能なフィールドを使用してください。 + + A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. + A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. - - Unexpected decode of AutoOpenAttribute - AutoOpenAttribute の予期しないデコードです: + + Calls to 'reraise' may only occur directly in a handler of a try-with + Calls to 'reraise' may only occur directly in a handler of a try-with - - Unexpected decode of InternalsVisibleToAttribute - InternalsVisibleToAttribute の予期しないデコードです: + + A type instantiation involves a byref type. This is not permitted by the rules of Common IL. + A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - - Unexpected decode of InterfaceDataVersionAttribute - InterfaceDataVersionAttribute の予期しないデコードです: + + Feature '{0}' is not available in F# {1}. Please use language version {2} or greater. + Feature '{0}' is not available in F# {1}. Please use language version {2} or greater. - - Active patterns cannot return more than 7 possibilities - アクティブ パターンが返すことができる結果は 7 個以下です + + Feature '{0}' is not supported by target runtime. + Feature '{0}' is not supported by target runtime. - - This is not a valid constant expression or custom attribute value - これは有効な定数式でもカスタム属性値でもありません + + Feature '{0}' requires the F# library for language version {1} or greater. + Feature '{0}' requires the F# library for language version {1} or greater. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe mutability attributes differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。変更可能属性が異なります。 + + The type of a first-class function cannot contain byrefs + The type of a first-class function cannot contain byrefs - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe names differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。名前が異なります。 + + A property's getter and setter must have the same type. Property '{0}' has getter of type '{1}' but setter of type '{2}'. + A property's getter and setter must have the same type. Property '{0}' has getter of type '{1}' but setter of type '{2}'. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled names differ - モジュール '{0}' には\n {1} \nが含まれていますが、シグネチャには\n {2} \nが指定されています。コンパイル名が異なります。 + + The property '{0}' of type '{1}' has a getter and a setter that do not match. If one is abstract then the other must be as well. + The property '{0}' of type '{1}' has a getter and a setter that do not match. If one is abstract then the other must be as well. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe display names differ - モジュール '{0}' には\n {1} \nが含まれていますが、シグネチャには\n {2} \nが指定されています。表示名が異なります。 + + Invalid custom attribute value (not a constant or literal) + Invalid custom attribute value (not a constant or literal) - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe accessibility specified in the signature is more than that specified in the implementation - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャでは\n {2} \nを指定しています。シグネチャに指定されたアクセシビリティの方が、実装よりも高い設定です。 + + The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe inline flags differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。インライン フラグが異なります。 + + The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe literal constant values and/or attributes differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。リテラル定数値、属性、またはその両方が異なります。 + + 'base' values may only be used to make direct calls to the base implementations of overridden members + 'base' values may only be used to make direct calls to the base implementations of overridden members - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is a type function and the other is not. The signature requires explicit type parameters if they are present in the implementation. - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方は型関数ですが、もう一方は違います。型パラメーターが実装にある場合、シグネチャには明示的な型パラメーターが必要です。 + + The member '{0}' is used in an invalid way. A use of '{1}' has been inferred prior to its definition at or near '{2}'. This is an invalid forward reference. + The member '{0}' is used in an invalid way. A use of '{1}' has been inferred prior to its definition at or near '{2}'. This is an invalid forward reference. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe respective type parameter counts differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。それぞれの型パラメーター数が異なります。 + + This type implements the same interface at different generic instantiations '{0}' and '{1}'. This is not permitted in this version of F#. + This type implements the same interface at different generic instantiations '{0}' and '{1}'. This is not permitted in this version of F#. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe types differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。型が異なります。 + + The address of the field '{0}' cannot be used at this point + The address of the field '{0}' cannot be used at this point - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is an extension member and the other is not - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方は拡張メンバーですが、もう一方は違います。 + + The address of an array element cannot be used at this point + The address of an array element cannot be used at this point - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nAn arity was not inferred for this value - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。この値の項数は推論されませんでした。 + + The address of the variable '{0}' cannot be used at this point + The address of the variable '{0}' cannot be used at this point - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe number of generic parameters in the signature and implementation differ (the signature declares {3} but the implementation declares {4} - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。シグネチャと実装のジェネリック パラメーター数が異なります (シグネチャは {3} 個を宣言しましたが、実装は {4} 個です)。 + + The address of the static field '{0}' cannot be used at this point + The address of the static field '{0}' cannot be used at this point + + + + The address of the variable '{0}' or a related expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope. + The address of the variable '{0}' or a related expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope. + + + + The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope. + The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute. - モジュール '{0}' には\n {1} \nが含まれていますが、シグネチャで指定されているのは\n {2} です \nシグネチャと実装の汎用パラメーターの種類が異なります。[<Measure>] 属性が欠落している可能性があります。 + + A byref typed value would be stored here. Top-level let-bound byref values are not permitted. + A byref typed value would be stored here. Top-level let-bound byref values are not permitted. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int. - モジュール '{0}' には\n {1} が含まれていますが、 \nシグネチャでは\n {2} が指定されています \nシグネチャと実装の項数が異なります。シグネチャは、'{3}' が {4} 個以上の引数を受け入れる関数定義またはラムダ式であると指定していますが、実装は計算された関数値です。計算された関数値が許可された実装であることを宣言するには、シグネチャの型をかっこで囲んでください。たとえば、\n\tval {6}: int -> int -> int ではなく、\n\tval {5}: int -> (int -> int) と指定します。 + + The byref typed value '{0}' cannot be used at this point + The byref typed value '{0}' cannot be used at this point - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe CLI member names differ - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。CLI メンバー名が異なります。 + + The type abbreviation contains byrefs. This is not permitted by F#. + The type abbreviation contains byrefs. This is not permitted by F#. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is static and the other isn't - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方は静的ですが、もう一方は違います。 + + The function or method call cannot be used at this point, because one argument that is a byref of a non-stack-local Span or IsByRefLike type is used with another argument that is a stack-local Span or IsByRefLike type. This is to ensure the address of the local value does not escape its scope. + The function or method call cannot be used at this point, because one argument that is a byref of a non-stack-local Span or IsByRefLike type is used with another argument that is a stack-local Span or IsByRefLike type. This is to ensure the address of the local value does not escape its scope. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is virtual and the other isn't - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方は仮想ですが、もう一方は違います。 + + Type '{0}' is illegal because in byref<T>, T cannot contain byref types. + Type '{0}' is illegal because in byref<T>, T cannot contain byref types. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is abstract and the other isn't - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方は抽象ですが、もう一方は違います。 + + First-class uses of the address-of operators are not permitted + First-class uses of the address-of operators are not permitted - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is final and the other isn't - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方は final ですが、もう一方は違います。 + + Using the 'nameof' operator as a first-class function value is not permitted. + Using the 'nameof' operator as a first-class function value is not permitted. - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is marked as an override and the other isn't - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方はオーバーライドとマークされていますが、もう一方は違います。 + + First-class uses of the 'reraise' function is not permitted + First-class uses of the 'reraise' function is not permitted - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nOne is a constructor/property and the other is not - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。一方はコンストラクター/プロパティですが、もう一方は違います。 + + First-class uses of the expression-splicing operator are not permitted + First-class uses of the expression-splicing operator are not permitted - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled representation of this method is as a static member but the signature indicates its compiled representation is as an instance member - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。このメソッドのコンパイル済み表現は静的メンバーとして指定されていますが、シグネチャが示すコンパイル済み表現はインスタンス メンバーです。 + + ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter + ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter - - Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe compiled representation of this method is as an instance member, but the signature indicates its compiled representation is as a static member - モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。このメソッドのコンパイル済み表現はインスタンス メンバーとして指定されていますが、シグネチャが示すコンパイル済み表現は静的メンバーです。 + + A Span or IsByRefLike value returned from the expression cannot be used at ths point. This is to ensure the address of the local value does not escape its scope. + A Span or IsByRefLike value returned from the expression cannot be used at ths point. This is to ensure the address of the local value does not escape its scope. - - The {0} definitions in the signature and implementation are not compatible because the names differ. The type is called '{1}' in the signature file but '{2}' in implementation. - シグネチャおよび実装内の {0} 定義は、名前が異なるため、互換性がありません。この型はシグネチャ ファイルでは '{1}' という名前ですが、実装では '{2}' という名前です。 + + The Span or IsByRefLike variable '{0}' cannot be used at this point. This is to ensure the address of the local value does not escape its scope. + The Span or IsByRefLike variable '{0}' cannot be used at this point. This is to ensure the address of the local value does not escape its scope. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the respective type parameter counts differ - 型パラメーターの数が異なるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + This value can't be assigned because the target '{0}' may refer to non-stack-local memory, while the expression being assigned is assessed to potentially refer to stack-local memory. This is to help prevent pointers to stack-bound memory escaping their scope. + This value can't be assigned because the target '{0}' may refer to non-stack-local memory, while the expression being assigned is assessed to potentially refer to stack-local memory. This is to help prevent pointers to stack-bound memory escaping their scope. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the accessibility specified in the signature is more than that specified in the implementation - シグネチャに指定されたアクセシビリティが実装の指定よりも高いため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + Object constructors cannot directly use try/with and try/finally prior to the initialization of the object. This includes constructs such as 'for x in ...' that may elaborate to uses of these constructs. This is a limitation imposed by Common IL. + Object constructors cannot directly use try/with and try/finally prior to the initialization of the object. This includes constructs such as 'for x in ...' that may elaborate to uses of these constructs. This is a limitation imposed by Common IL. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature requires that the type supports the interface {2} but the interface has not been implemented - シグネチャでは型がインターフェイス {2} をサポートする必要がありますが、インターフェイスが実装されていないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The property '{0}' has the same name as another property in type '{1}', but one takes indexer arguments and the other does not. You may be missing an indexer argument to one of your properties. + The property '{0}' has the same name as another property in type '{1}', but one takes indexer arguments and the other does not. You may be missing an indexer argument to one of your properties. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation says this type may use nulls as a representation but the signature does not - 実装では表現としてこの型に null を使用できると指定していますが、シグネチャは指定していないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The property '{0}' has the same name as a method in type '{1}'. + The property '{0}' has the same name as a method in type '{1}'. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation says this type may use nulls as an extra value but the signature does not - 実装では特別な値としてこの型に null を使用できると指定していますが、シグネチャは指定していないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + A protected member is called or 'base' is being used. This is only allowed in the direct implementation of members since they could escape their object scope. + A protected member is called or 'base' is being used. This is only allowed in the direct implementation of members since they could escape their object scope. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature says this type may use nulls as a representation but the implementation does not - シグネチャでは表現としてこの型に null を使用できると指定していますが、実装では指定していないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + [<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%' + [<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%' - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature says this type may use nulls as an extra value but the implementation does not - シグネチャでは特別な値としてこの型に null を使用できると指定していますが、実装は指定していないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + A method return type would contain byrefs which is not permitted + A method return type would contain byrefs which is not permitted - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature. - シグネチャと実装の型 '{1}' の {0} 定義に互換性がありません。実装の種類はシールドですが、シグネチャではシールドが暗黙的に示されていません。シグネチャに [<Sealed>] 属性を追加してください。 + + Expression-splicing operators may only be used within quotations + Expression-splicing operators may only be used within quotations - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation. - シグネチャと実装の種類 '{1}' の {0} 定義に互換性がありません。実装の種類はシールド型ではありませんが、シグネチャは暗黙的にシールド型に設定されています。実装に [<Sealed>] 属性を追加することを検討してください。 + + Struct members cannot return the address of fields of the struct by reference + Struct members cannot return the address of fields of the struct by reference - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature. - シグネチャと実装の型 '{1}' の {0} 定義に互換性がありません。実装は抽象クラスですが、シグネチャは抽象クラスではありません。シグネチャに [<AbstractClass>] 属性を追加してください。 + + 'System.Void' can only be used as 'typeof<System.Void>' in F# + 'System.Void' can only be used as 'typeof<System.Void>' in F# - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation. - シグネチャと実装の型 '{1}' の {0} の定義には互換性がありません。シグネチャは抽象クラスですが、実装は抽象クラスではありません。実装に [<AbstractClass>] 属性を追加してください。 + + A type variable has been constrained by multiple different class types. A type variable may only have one class constraint. + A type variable has been constrained by multiple different class types. A type variable may only have one class constraint. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the types have different base types - 型の基本型が異なるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The type '{0}' is less accessible than the value, member or type '{1}' it is used in. + The type '{0}' is less accessible than the value, member or type '{1}' it is used in. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the number of {2}s differ - {2} の数が異なるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + compiled form of the union case + compiled form of the union case - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature defines the {2} '{3}' but the implementation does not (or does, but not in the same order) - シグネチャでは {2} '{3}' を定義していますが、実装では定義していないため (または定義していても同じ順序ではないため)、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + default augmentation of the union case + default augmentation of the union case - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation defines the {2} '{3}' but the signature does not (or does, but not in the same order) - 実装では {2} '{3}' を定義していますが、シグネチャでは定義していないため (または定義していても同じ順序ではないため)、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The recursive object reference '{0}' is unused. The presence of a recursive object reference adds runtime initialization checks to members in this and derived types. Consider removing this recursive object reference. + The recursive object reference '{0}' is unused. The presence of a recursive object reference adds runtime initialization checks to members in this and derived types. Consider removing this recursive object reference. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation defines a struct but the signature defines a type with a hidden representation - 実装では構造体を定義していますが、シグネチャでは隠ぺいされた表現で型を定義しているため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The value '{0}' is unused + The value '{0}' is unused - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because a CLI type representation is being hidden by a signature - CLI の型表現がシグネチャによって隠ぺいされているため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The type of a field using the 'DefaultValue' attribute must admit default initialization, i.e. have 'null' as a proper value or be a struct type whose fields all admit default initialization. You can use 'DefaultValue(false)' to disable this check + The type of a field using the 'DefaultValue' attribute must admit default initialization, i.e. have 'null' as a proper value or be a struct type whose fields all admit default initialization. You can use 'DefaultValue(false)' to disable this check - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because a type representation is being hidden by a signature - 型表現がシグネチャによって隠ぺいされているため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The variable '{0}' is used in an invalid way + The variable '{0}' is used in an invalid way - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the types are of different kinds - 型の種類が異なるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + A ';' is used to separate field values in records. Consider replacing ',' with ';'. + A ';' is used to separate field values in records. Consider replacing ',' with ';'. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the IL representations differ - IL 表現が異なるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using 'upcast' instead of 'downcast'. + The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using 'upcast' instead of 'downcast'. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the representations differ - シグネチャおよび実装内の型 '{1}' の {0} 定義は、表現が異なるため、互換性がありません + + The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator. + The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field {2} was present in the implementation but not in the signature - フィールド {2} が実装にはありますがシグネチャにはないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The dependency manager extension {0} could not be loaded. Message: {1} + The dependency manager extension {0} could not be loaded. Message: {1} - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the order of the fields is different in the signature and implementation - フィールドの順序がシグネチャと実装とで異なるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + The variable '{0}' is bound in a quotation but is used as part of a spliced expression. This is not permitted since it may escape its scope. + The variable '{0}' is bound in a quotation but is used as part of a spliced expression. This is not permitted since it may escape its scope. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field {2} was required by the signature but was not specified by the implementation - シグネチャにはフィールド {2} が必要ですが、実装では指定されていないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + Inner generic functions are not permitted in quoted expressions. Consider adding some type constraints until this function is no longer generic. + Inner generic functions are not permitted in quoted expressions. Consider adding some type constraints until this function is no longer generic. - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the field '{2}' was present in the implementation but not in the signature. Struct types must now reveal their fields in the signature for the type, though the fields may still be labelled 'private' or 'internal'. - フィールド '{2}' が実装にはありますがシグネチャにはないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません。この型のシグネチャでは、構造体型のフィールドを公開する必要があります。ただし、フィールドのラベルは 'private' または 'internal' のままにすることもできます。 + + A quotation may not involve an assignment to or taking the address of a captured local variable + A quotation may not involve an assignment to or taking the address of a captured local variable - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abstract member '{2}' was required by the signature but was not specified by the implementation - シグネチャには抽象メンバー '{2}' が必要ですが、実装では指定されていないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + Quotations cannot contain expressions that make member constraint calls, or uses of operators that implicitly resolve to a member constraint call + Quotations cannot contain expressions that make member constraint calls, or uses of operators that implicitly resolve to a member constraint call - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abstract member '{2}' was present in the implementation but not in the signature - 抽象メンバー '{2}' が実装にはありますがシグネチャにはないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + Quotations cannot contain expressions that take the address of a field + Quotations cannot contain expressions that take the address of a field - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature declares a {2} while the implementation declares a {3} - シグネチャは {2} を宣言していますが、実装では {3} を宣言しているため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + Quotations cannot contain array pattern matching + Quotations cannot contain array pattern matching - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the abbreviations differ: {2} versus {3} - シグネチャおよび実装内の型 '{1}' の {0} 定義は、省略形が異なるため ({2} と {3})、互換性がありません + + Quotations cannot contain descending for loops + Quotations cannot contain descending for loops - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because an abbreviation is being hidden by a signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. - 省略形がシグネチャによって隠ぺいされているため、シグネチャおよび実装の型 '{1}' の {0} 定義に互換性がありません。省略形は他の CLI 言語から参照できるようにする必要があります。シグネチャ内の省略形を参照できるようにしてください。 + + Quotations cannot contain uses of generic expressions + Quotations cannot contain uses of generic expressions - - The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature has an abbreviation while the implementation does not - シグネチャには省略形がありますが、実装にはないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません + + Quotations cannot contain function definitions that are inferred or declared to be generic. Consider adding some type constraints to make this a valid quoted expression. + Quotations cannot contain function definitions that are inferred or declared to be generic. Consider adding some type constraints to make this a valid quoted expression. - - The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe names differ - モジュールにはコンストラクター\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。名前が異なります。 + + Quotations cannot contain inline assembly code or pattern matching on arrays + Quotations cannot contain inline assembly code or pattern matching on arrays - - The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe respective number of data fields differ - モジュールにはコンストラクター\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。データ フィールドの数が異なります。 + + Quotations cannot contain object expressions + Quotations cannot contain object expressions - - The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nThe types of the fields differ - モジュールにはコンストラクター\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。フィールドの型が異なります。 + + Quotations cannot contain expressions that fetch static fields + Quotations cannot contain expressions that fetch static fields - - The module contains the constructor\n {0} \nbut its signature specifies\n {1} \nthe accessibility specified in the signature is more than that specified in the implementation - モジュールにはコンストラクター\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。シグネチャに指定されたアクセシビリティの方が、実装よりも高い設定です。 + + Quotations cannot contain this kind of constant + Quotations cannot contain this kind of constant - - The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe names differ - モジュールにはフィールド\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。名前が異なります。 + + Quotations cannot contain this kind of pattern match + Quotations cannot contain this kind of pattern match - - The module contains the field\n {0} \nbut its signature specifies\n {1} \nthe accessibility specified in the signature is more than that specified in the implementation - モジュールにはフィールド\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。シグネチャに指定されたアクセシビリティの方が、実装よりも高い設定です。 + + Quotations cannot contain this kind of type + Quotations cannot contain this kind of type - - The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'static' modifiers differ - モジュールにはフィールド\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。'static' 修飾子が異なります。 + + Quotations cannot contain expressions that fetch union case indexes + Quotations cannot contain expressions that fetch union case indexes - - The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'mutable' modifiers differ - モジュールにはフィールド\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。'mutable' 修飾子が異なります。 + + Quotations cannot contain expressions that require byref pointers + Quotations cannot contain expressions that require byref pointers - - The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe 'literal' modifiers differ - モジュールにはフィールド\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。'literal' 修飾子が異なります。 + + Quotations cannot contain expressions that set fields in exception values + Quotations cannot contain expressions that set fields in exception values - - The module contains the field\n {0} \nbut its signature specifies\n {1} \nThe types differ - モジュールにはフィールド\n {0} \nが含まれますが、シグネチャでは\n {1} \nを指定しています。型が異なります。 + + Quotations cannot contain expressions that set union case fields + Quotations cannot contain expressions that set union case fields - - The implicit instantiation of a generic construct at or near this point could not be resolved because it could resolve to multiple unrelated types, e.g. '{0}' and '{1}'. Consider using type annotations to resolve the ambiguity - この場所またはその付近にあるジェネリック コンストラクトの暗黙的なインスタンス化を解決できませんでした。これは、関連性のない複数の型に解決される可能性があるためです (たとえば、'{0}' と '{1}')。あいまいさを解決するために、型の注釈を使用してください。 + + Argument length mismatch + Argument length mismatch - - Could not resolve the ambiguity inherent in the use of a 'printf'-style format string - 'printf' 形式の書式指定文字列の使用に関して、あいまいな継承を解決できませんでした + + The argument types don't match + The argument types don't match - - Could not resolve the ambiguity in the use of a generic construct with an 'enum' constraint at or near this position - この位置、またはこの位置付近にある 'enum' 制約を含むジェネリック コンストラクトの使用に関して、あいまいさを解決できませんでした + + Available overloads:\n{0} + Available overloads:\n{0} - - Could not resolve the ambiguity in the use of a generic construct with a 'delegate' constraint at or near this position - この位置、またはこの位置付近にある 'delegate' 制約を含むジェネリック コンストラクトの使用に関して、あいまいさを解決できませんでした + + Candidates:\n{0} + Candidates:\n{0} - - Invalid value - 無効な値 + + This code is less generic than indicated by its annotations. A unit-of-measure specified using '_' has been determined to be '1', i.e. dimensionless. Consider making the code generic, or removing the use of '_'. + This code is less generic than indicated by its annotations. A unit-of-measure specified using '_' has been determined to be '1', i.e. dimensionless. Consider making the code generic, or removing the use of '_'. - - The signature and implementation are not compatible because the respective type parameter counts differ - それぞれの型パラメーターの数が異なるため、シグネチャおよび実装は互換性がありません + + The object constructor '{0}' has no argument or settable return property '{1}'. {2}. + The object constructor '{0}' has no argument or settable return property '{1}'. {2}. - - The signature and implementation are not compatible because the type parameter in the class/signature has a different compile-time requirement to the one in the member/implementation - クラス/シグネチャの型パラメーターには、メンバー/実装の型パラメーターとは異なるコンパイル時の要件があるため、シグネチャと実装には互換性がありません + + The object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. + The object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. - - The signature and implementation are not compatible because the declaration of the type parameter '{0}' requires a constraint of the form {1} - 型パラメーター '{0}' の宣言には形式 {1} の制約が必要なため、シグネチャと実装には互換性がありません + + The object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. If some of the arguments are meant to assign values to properties, consider separating those arguments with a comma (','). + The object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. If some of the arguments are meant to assign values to properties, consider separating those arguments with a comma (','). - - The signature and implementation are not compatible because the type parameter '{0}' has a constraint of the form {1} but the implementation does not. Either remove this constraint from the signature or add it to the implementation. - 型パラメーター '{0}' には形式 {1} の制約がありますが、実装にはないため、シグネチャと実装には互換性がありません。シグネチャからこの制約を削除するか、実装に制約を追加してください。 + + Expecting a type supporting the operator '{0}' but given a function type. You may be missing an argument to a function. + Expecting a type supporting the operator '{0}' but given a function type. You may be missing an argument to a function. - - The type '{0}' implements 'System.IComparable'. Consider also adding an explicit override for 'Object.Equals' - 型 '{0}' は 'System.IComparable' を実装しています。'Object.Equals' の明示的なオーバーライドも追加してください。 + + Expecting a type supporting the operator '{0}' but given a tuple type + Expecting a type supporting the operator '{0}' but given a tuple type - - The type '{0}' implements 'System.IComparable' explicitly but provides no corresponding override for 'Object.Equals'. An implementation of 'Object.Equals' has been automatically provided, implemented via 'System.IComparable'. Consider implementing the override 'Object.Equals' explicitly - 型 '{0}' は 'System.IComparable' を明示的に実装していますが、'Object.Equals' に対応するオーバーライドを提供していません。'Object.Equals' の実装は自動的に提供され、'System.IComparable' を介して実装されます。明示的にオーバーライド 'Object.Equals' を実装してください。 + + Expected arguments to an instance member + Expected arguments to an instance member - - The struct, record or union type '{0}' has an explicit implementation of 'Object.GetHashCode' or 'Object.Equals'. You must apply the 'CustomEquality' attribute to the type - 構造体型、レコード型、または共用体型 '{0}' には 'Object.GetHashCode' または 'Object.Equals' の明示的な実装があります。この型には 'CustomEquality' 属性を適用してください。 + + A generic construct requires that the type '{0}' be non-abstract + A generic construct requires that the type '{0}' be non-abstract - - The struct, record or union type '{0}' has an explicit implementation of 'Object.GetHashCode'. Consider implementing a matching override for 'Object.Equals(obj)' - 構造体型、レコード型、または共用体型 '{0}' には 'Object.GetHashCode' の明示的な実装があります。'Object.Equals(obj)' に対応するオーバーライドを実装してください。 + + A generic construct requires that the type '{0}' have a public default constructor + A generic construct requires that the type '{0}' have a public default constructor - - The struct, record or union type '{0}' has an explicit implementation of 'Object.Equals'. Consider implementing a matching override for 'Object.GetHashCode()' - 構造体型、レコード型、または共用体型 '{0}' には 'Object.Equals' の明示的な実装があります。'Object.GetHashCode()' に対応するオーバーライドを実装してください。 + + A generic construct requires that the type '{0}' have reference semantics, but it does not, i.e. it is a struct + A generic construct requires that the type '{0}' have reference semantics, but it does not, i.e. it is a struct - - The exception definitions are not compatible because a CLI exception mapping is being hidden by a signature. The exception mapping must be visible to other modules. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1} - CLI の例外のマッピングがシグネチャによって隠ぺいされているため、例外の定義に互換性がありません。例外のマッピングは他のモジュールから参照できるようにする必要があります。モジュールには例外の定義\n {0} \nが含まれますが、シグネチャでは\n\t{1}\nを指定しています。 + + A generic construct requires that a generic type parameter be known as a struct or reference type. Consider adding a type annotation. + A generic construct requires that a generic type parameter be known as a struct or reference type. Consider adding a type annotation. - - The exception definitions are not compatible because the CLI representations differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1} - CLI 表現が異なるため、例外の定義に互換性がありません。モジュールには例外の定義\n {0} \nが含まれますが、シグネチャでは\n\t{1}\nを指定しています。 + + A generic construct requires that the type '{0}' is a CLI or F# struct type + A generic construct requires that the type '{0}' is a CLI or F# struct type - - The exception definitions are not compatible because the exception abbreviation is being hidden by the signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - 例外の省略形がシグネチャによって隠ぺいされているため、例外の定義に互換性がありません。省略形は他の CLI 言語から参照できるようにする必要があります。シグネチャ内の省略形を参照できるようにしてください。モジュールには例外の定義\n {0} \nがありますが、シグネチャでは\n\t{1}\nを指定しています。 + + A generic construct requires that the type '{0}' is an unmanaged type + A generic construct requires that the type '{0}' is an unmanaged type - - The exception definitions are not compatible because the exception abbreviations in the signature and implementation differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - 例外の省略形がシグネチャと実装とで異なるため、例外の定義に互換性がありません。モジュールには例外の定義\n {0} \nが含まれますが、シグネチャでは\n\t{1}\nを指定しています。 + + Incorrect generic instantiation. No {0} member named '{1}' takes {2} generic arguments. + Incorrect generic instantiation. No {0} member named '{1}' takes {2} generic arguments. - - The exception definitions are not compatible because the exception declarations differ. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - 例外の宣言が異なるため、例外の定義に互換性がありません。モジュールには例外の定義\n {0} \nが含まれますが、シグネチャでは\n\t{1}\nを指定しています。 + + This indexer expects {0} arguments but is here given {1} + This indexer expects {0} arguments but is here given {1} - - The exception definitions are not compatible because the field '{0}' was required by the signature but was not specified by the implementation. The module contains the exception definition\n {1} \nbut its signature specifies\n\t{2}. - シグネチャにはフィールド '{0}' が必要ですが、実装では指定されなかったため、例外の定義に互換性がありません。モジュールには例外の定義\n {1} \nが含まれますが、シグネチャでは\n\t{2}\nを指定しています。 + + The member or object constructor '{0}' has no argument or settable return property '{1}'. {2}. + The member or object constructor '{0}' has no argument or settable return property '{1}'. {2}. - - The exception definitions are not compatible because the field '{0}' was present in the implementation but not in the signature. The module contains the exception definition\n {1} \nbut its signature specifies\n\t{2}. - 実装にはフィールド '{0}' がありますが、シグネチャにはないため、例外の定義に互換性がありません。モジュールには例外の定義\n {1} \nが含まれますが、シグネチャでは\n\t{2}\nを指定しています。 + + The member or object constructor '{0}' is not {1} + The member or object constructor '{0}' is not {1} - - The exception definitions are not compatible because the order of the fields is different in the signature and implementation. The module contains the exception definition\n {0} \nbut its signature specifies\n\t{1}. - フィールドの順序がシグネチャと実装とで異なるため、例外の定義に互換性がありません。モジュールには例外の定義\n {0} \nが含まれますが、シグネチャでは\n\t{1}\nを指定しています。 + + The member or object constructor '{0}' is not {1}. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions. + The member or object constructor '{0}' is not {1}. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions. - - The namespace or module attributes differ between signature and implementation - 名前空間属性またはモジュール属性が、シグネチャと実装とで異なります + + {0} is not an instance member + {0} is not an instance member - - This method is over-constrained in its type parameters - 型パラメーターのこのメソッドは、制約過多です + + {0} is not a static member + {0} is not a static member - - No implementations of '{0}' had the correct number of arguments and type parameters. The required signature is '{1}'. - 正しい数の引数と型パラメーターが指定された '{0}' の実装がありません。必要なシグネチャは '{1}' です。 + + A member or object constructor '{0}' taking {1} arguments is not accessible from this code location. All accessible versions of method '{2}' take {3} arguments. + A member or object constructor '{0}' taking {1} arguments is not accessible from this code location. All accessible versions of method '{2}' take {3} arguments. - - The override for '{0}' was ambiguous - '{0}' のオーバーライドがあいまいでした + + The member or object constructor '{0}' does not take {1} argument(s). An overload was found taking {2} arguments. + The member or object constructor '{0}' does not take {1} argument(s). An overload was found taking {2} arguments. - - More than one override implements '{0}' - 複数のオーバーライドが '{0}' を実装しています + + The member or object constructor '{0}' requires {1} argument(s). The required signature is '{2}'. + The member or object constructor '{0}' requires {1} argument(s). The required signature is '{2}'. - - The method '{0}' is sealed and cannot be overridden - メソッド '{0}' がシールドであるため、オーバーライドできません + + The member or object constructor '{0}' requires {1} additional argument(s). The required signature is '{2}'. + The member or object constructor '{0}' requires {1} additional argument(s). The required signature is '{2}'. - - The override '{0}' implements more than one abstract slot, e.g. '{1}' and '{2}' - オーバーライド '{0}' は複数の抽象スロットを実装しています (たとえば、'{1}' と '{2}') + + The member or object constructor '{0}' requires {1} argument(s). The required signature is '{2}'. Some names for missing arguments are {3}. + The member or object constructor '{0}' requires {1} argument(s). The required signature is '{2}'. Some names for missing arguments are {3}. - - Duplicate or redundant interface - インターフェイスが重複するか、冗長です + + The member or object constructor '{0}' requires {1} additional argument(s). The required signature is '{2}'. Some names for missing arguments are {3}. + The member or object constructor '{0}' requires {1} additional argument(s). The required signature is '{2}'. Some names for missing arguments are {3}. - - The interface '{0}' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface. - 複数の明示的に実装されたインターフェイス型に、インターフェイス '{0}' が含まれています。このインターフェイスの明示的な実装を追加してください。 + + The member or object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. + The member or object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. - - The named argument '{0}' has been assigned more than one value - 名前付き引数 '{0}' に複数の値が割り当てられました + + The member or object constructor '{0}' requires {1} argument(s) but is here given {2} unnamed and {3} named argument(s). The required signature is '{4}'. + The member or object constructor '{0}' requires {1} argument(s) but is here given {2} unnamed and {3} named argument(s). The required signature is '{4}'. - - No implementation was given for '{0}' - '{0}' に指定された実装がありませんでした + + The member or object constructor '{0}' takes {1} type argument(s) but is here given {2}. The required signature is '{3}'. + The member or object constructor '{0}' takes {1} type argument(s) but is here given {2}. The required signature is '{3}'. - - No implementation was given for '{0}'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'. - '{0}' に指定された実装がありませんでした。すべてのインターフェイス メンバーを実装し、適切な 'interface' 宣言で列挙してください (たとえば、'interface ... with member ...')。 + + This method expects a CLI 'params' parameter in this position. 'params' is a way of passing a variable number of arguments to a method in languages such as C#. Consider passing an array for this argument + This method expects a CLI 'params' parameter in this position. 'params' is a way of passing a variable number of arguments to a method in languages such as C#. Consider passing an array for this argument - - The member '{0}' does not have the correct number of arguments. The required signature is '{1}'. - メンバー '{0}' には引数の正しいメンバーがありません。必要なシグネチャは '{1}' です。 + + The type '{0}' has a method '{1}' (full name '{2}'), but the method is not static + The type '{0}' has a method '{1}' (full name '{2}'), but the method is not static - - The member '{0}' does not have the correct number of method type parameters. The required signature is '{1}'. - メンバー '{0}' には正しい数のメソッド型パラメーターがありません。必要なシグネチャは '{1}' です。 + + The type '{0}' has a method '{1}' (full name '{2}'), but the method is static + The type '{0}' has a method '{1}' (full name '{2}'), but the method is static - - The member '{0}' does not have the correct kinds of generic parameters. The required signature is '{1}'. - メンバー '{0}' には正しい種類のジェネリック パラメーターがありません。必要なシグネチャは '{1}' です。 + + {0} is not a static method + {0} is not a static method - - The member '{0}' cannot be used to implement '{1}'. The required signature is '{2}'. - {1}' を実装するためにメンバー '{0}' は使用できません。必要なシグネチャは '{2}' です。 + + {0} is not an instance method + {0} is not an instance method - - Error while parsing embedded IL - 埋め込まれた IL の解析中にエラーが発生しました + + A unique overload for method '{0}' could not be determined based on type information prior to this program point. A type annotation may be needed. + A unique overload for method '{0}' could not be determined based on type information prior to this program point. A type annotation may be needed. - - Error while parsing embedded IL type - 埋め込まれた IL 型の解析中にエラーが発生しました + + Method or object constructor '{0}' not found + Method or object constructor '{0}' not found - - This indexer notation has been removed from the F# language - このインデクサー表記は F# 言語から削除されました + + No {0} member or object constructor named '{1}' takes {2} arguments + No {0} member or object constructor named '{1}' takes {2} arguments - - Invalid expression on left of assignment - 代入式の左辺が無効です + + No {0} member or object constructor named '{1}' takes {2} arguments. Note the call to this member also provides {3} named arguments. + No {0} member or object constructor named '{1}' takes {2} arguments. Note the call to this member also provides {3} named arguments. - - The 'ReferenceEquality' attribute cannot be used on structs. Consider using the 'StructuralEquality' attribute instead, or implement an override for 'System.Object.Equals(obj)'. - 構造体で 'ReferenceEquality' 属性は使用できません。代わりに 'StructuralEquality' 属性を使用するか、'System.Object.Equals(obj)' のオーバーライドを実装してください。 + + No {0} member or object constructor named '{1}' takes {2} arguments. The named argument '{3}' doesn't correspond to any argument or settable return property for any overload. + No {0} member or object constructor named '{1}' takes {2} arguments. The named argument '{3}' doesn't correspond to any argument or settable return property for any overload. - - This type uses an invalid mix of the attributes 'NoEquality', 'ReferenceEquality', 'StructuralEquality', 'NoComparison' and 'StructuralComparison' - この型には、'NoEquality' 属性、'ReferenceEquality' 属性、'StructuralEquality' 属性、'NoComparison' 属性、および 'StructuralComparison' 属性の無効な組み合わせが使用されています + + No overloads match for method '{0}'. + No overloads match for method '{0}'. - - The 'NoEquality' attribute must be used in conjunction with the 'NoComparison' attribute - 'NoEquality' 属性は、'NoComparison' 属性と組み合わせて使用する必要があります + + Known types of arguments: {0} + Known types of arguments: {0} - - The 'StructuralComparison' attribute must be used in conjunction with the 'StructuralEquality' attribute - 'StructuralComparison' 属性は、'StructuralEquality' 属性と組み合わせて使用する必要があります + + Known type of argument: {0} + Known type of argument: {0} - - The 'StructuralEquality' attribute must be used in conjunction with the 'NoComparison' or 'StructuralComparison' attributes - 'StructuralEquality' 属性は、'NoComparison' 属性または 'StructuralComparison' 属性と組み合わせて使用する必要があります + + Known return type: {0} + Known return type: {0} - - A type cannot have both the 'ReferenceEquality' and 'StructuralEquality' or 'StructuralComparison' attributes - 1 つの型に 'ReferenceEquality' 属性および 'StructuralEquality' 属性、または 'ReferenceEquality' 属性および 'StructuralComparison' 属性を同時に使用することはできません + + Known type parameters: {0} + Known type parameters: {0} - - Only record, union, exception and struct types may be augmented with the 'ReferenceEquality', 'StructuralEquality' and 'StructuralComparison' attributes - 'ReferenceEquality' 属性、'StructuralEquality' 属性、および 'StructuralComparison' 属性を使用して拡張できるのは、レコード型、共用体型、例外型、および構造体型のみです + + Known type parameter: {0} + Known type parameter: {0} - - A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' - 'ReferenceEquality' 属性が含まれる型に 'Object.Equals(obj)'、'System.IEquatable<_>'、または 'System.Collections.IStructuralEquatable' の明示的な実装を含めることはできません + + The type '{0}' does not have 'null' as a proper value. To create a null value for a Nullable type use 'System.Nullable()'. + The type '{0}' does not have 'null' as a proper value. To create a null value for a Nullable type use 'System.Nullable()'. - - A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' - 'CustomEquality' 属性が含まれる型には、'Object.Equals(obj)'、'System.IEquatable<_>'、'System.Collections.IStructuralEquatable' の少なくとも 1 つの明示的な実装が含まれていなければなりません + + Optional arguments not permitted here + Optional arguments not permitted here - - A type with attribute 'CustomComparison' must have an explicit implementation of at least one of 'System.IComparable' or 'System.Collections.IStructuralComparable' - 'CustomComparison' 属性を持つ型には、'System.IComparable' または 'System.Collections.IStructuralComparable' の少なくとも 1 つの明示的な実装が必要です + + Argument at index {0} doesn't match + Argument at index {0} doesn't match - - A type with attribute 'NoEquality' should not usually have an explicit implementation of 'Object.Equals(obj)'. Disable this warning if this is intentional for interoperability purposes - 通常、'NoEquality' 属性を持つ型には、'Object.Equals(obj)' を明示的に実装しません。相互運用性のために意図的に実装した場合、この警告は無効にしてください。 + + Argument '{0}' doesn't match + Argument '{0}' doesn't match - - A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes - 'NoComparison' 属性が含まれる型には 'System.IComparable'、'System.IComparable<_>'、または 'System.Collections.IStructuralComparable' の明示的な実装を通常は含めるべきではありません。相互運用のために意図的な場合には、この警告を無効にします + + The required signature is {0} + The required signature is {0} - - The 'CustomEquality' attribute must be used in conjunction with the 'NoComparison' or 'CustomComparison' attributes - 'CustomEquality' 属性は、'NoComparison' 属性または 'CustomComparison' 属性と組み合わせて使用する必要があります + + The constraints 'struct' and 'not struct' are inconsistent + The constraints 'struct' and 'not struct' are inconsistent - - Positional specifiers are not permitted in format strings - 位置指定子は書式指定文字列で許可されていません + + The declared type parameter '{0}' cannot be used here since the type parameter cannot be resolved at compile time + The declared type parameter '{0}' cannot be used here since the type parameter cannot be resolved at compile time - - Missing format specifier - 書式指定子がありません + + The type '{0}' does not have 'null' as a proper value + The type '{0}' does not have 'null' as a proper value - - '{0}' flag set twice - '{0}' フラグが 2 回設定されました + + The type '{0}' does not support the 'comparison' constraint because it has the 'NoComparison' attribute + The type '{0}' does not support the 'comparison' constraint because it has the 'NoComparison' attribute - - Prefix flag (' ' or '+') set twice - プレフィックスのフラグ (' ' または '+') が 2 回設定されました + + The type '{0}' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface + The type '{0}' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface - - The # formatting modifier is invalid in F# - # 書式修飾子は F# では無効です + + The type '{0}' does not support the 'comparison' constraint because it is a record, union or struct with one or more structural element types which do not support the 'comparison' constraint. Either avoid the use of comparison with this type, or add the 'StructuralComparison' attribute to the type to determine which field type does not support comparison + The type '{0}' does not support the 'comparison' constraint because it is a record, union or struct with one or more structural element types which do not support the 'comparison' constraint. Either avoid the use of comparison with this type, or add the 'StructuralComparison' attribute to the type to determine which field type does not support comparison - - Bad precision in format specifier - 書式指定子の精度に誤りがあります + + The type '{0}' does not support a conversion to the type '{1}' + The type '{0}' does not support a conversion to the type '{1}' - - Bad width in format specifier - 書式指定子の幅に誤りがあります + + The type '{0}' does not support the 'equality' constraint because it has the 'NoEquality' attribute + The type '{0}' does not support the 'equality' constraint because it has the 'NoEquality' attribute - - '{0}' format does not support '0' flag - '{0}' 形式は '0' フラグをサポートしていません + + The type '{0}' does not support the 'equality' constraint because it is a function type + The type '{0}' does not support the 'equality' constraint because it is a function type - - Precision missing after the '.' - '.' の後に精度がありません + + The type '{0}' does not support the 'equality' constraint because it is a record, union or struct with one or more structural element types which do not support the 'equality' constraint. Either avoid the use of equality with this type, or add the 'StructuralEquality' attribute to the type to determine which field type does not support equality + The type '{0}' does not support the 'equality' constraint because it is a record, union or struct with one or more structural element types which do not support the 'equality' constraint. Either avoid the use of equality with this type, or add the 'StructuralEquality' attribute to the type to determine which field type does not support equality - - '{0}' format does not support precision - '{0}' 形式は精度をサポートしていません + + The type '{0}' does not support the operator '{1}' + The type '{0}' does not support the operator '{1}' - - Bad format specifier (after l or L): Expected ld,li,lo,lu,lx or lX. In F# code you can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. - (l または L の後の) 書式指定子に誤りがあります。ld、li、lo、lu、lx、または lX を指定してください。F# コードでは、代わりに %d、%x、%o、または %u を使用できます。これらは、すべての基本的な整数型を扱うためにオーバーロードされます。 + + The type '{0}' does not support the operator '{1}'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. + The type '{0}' does not support the operator '{1}'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - - The 'l' or 'L' in this format specifier is unnecessary. In F# code you can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. - この書式指定子に 'l' または 'L' は不要です。F# のコードでは、%d、%x、%o、または %u を使用できます。これらは、すべての基本的な整数型を扱うためにオーバーロードされます。 + + The type '{0}' has a non-standard delegate type + The type '{0}' has a non-standard delegate type - - The 'h' or 'H' in this format specifier is unnecessary. You can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. - この書式指定子に 'h' または 'H' は不要です。代わりに %d、%x、%o、または %u を使用できます。これらは、すべての基本的な整数型を扱うためにオーバーロードされます。 + + Type inference problem too complicated (maximum iteration depth reached). Consider adding further type annotations. + Type inference problem too complicated (maximum iteration depth reached). Consider adding further type annotations. - - '{0}' does not support prefix '{1}' flag - {0}' はプレフィックスの '{1}' フラグをサポートしていません + + Type instantiation length mismatch + Type instantiation length mismatch - - Bad format specifier: '{0}' - 書式指定子に誤りがあります:'{0}' + + The type '{0}' is not a CLI delegate type + The type '{0}' is not a CLI delegate type - - System.Environment.Exit did not exit - System.Environment.Exit が終了しませんでした + + The type '{0}' is not a CLI enum type + The type '{0}' is not a CLI enum type - - The treatment of this operator is now handled directly by the F# compiler and its meaning cannot be redefined - この演算子は F# コンパイラが直接処理するようになったため、演算子の意味を再定義することはできません + + The type '{0}' is not compatible with any of the types {1}, arising from the use of a printf-style format string + The type '{0}' is not compatible with any of the types {1}, arising from the use of a printf-style format string - - A protected member is called or 'base' is being used. This is only allowed in the direct implementation of members since they could escape their object scope. - プロテクト メンバーが呼び出されたか、'base' が使用されています。この操作が許可されているのはメンバーの直接実装の場合のみです。直接実装ではオブジェクトのスコープを回避できます。 + + This type parameter cannot be instantiated to 'Nullable'. This is a restriction imposed in order to ensure the meaning of 'null' in some CLI languages is not confusing when used in conjunction with 'Nullable' values. + This type parameter cannot be instantiated to 'Nullable'. This is a restriction imposed in order to ensure the meaning of 'null' in some CLI languages is not confusing when used in conjunction with 'Nullable' values. - - The byref-typed variable '{0}' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions. - byref 型の変数 '{0}' の使用方法に誤りがあります。byref をクロージャでキャプチャすること、または内部関数に渡すことはできません。 + + None of the types '{0}' support the operator '{1}' + None of the types '{0}' support the operator '{1}' - - The 'base' keyword is used in an invalid way. Base calls cannot be used in closures. Consider using a private member to make base calls. - 'base' キーワードの使用方法に誤りがあります。'base' の呼び出しはクロージャに使用できません。'base' の呼び出しを行うには、プライベート メンバーを使用してください。 + + None of the types '{0}' support the operator '{1}'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. + None of the types '{0}' support the operator '{1}'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - - The variable '{0}' is used in an invalid way - 変数 '{0}' の使用方法に誤りがあります + + {0} var in collection {1} (outerKey = innerKey) into group. Note that parentheses are required after '{2}' + {0} var in collection {1} (outerKey = innerKey) into group. Note that parentheses are required after '{2}' - - The type '{0}' is less accessible than the value, member or type '{1}' it is used in. - 型 '{0}' は、使用されている値、メンバー、型 '{1}' よりもアクセシビリティが低く設定されています。 + + {0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}' + {0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}' - - 'System.Void' can only be used as 'typeof<System.Void>' in F# - F# では 'System.Void' は 'typeof<System.Void>' としてのみ使用できます + + {0} var in collection + {0} var in collection - - A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - 型のインスタンス化に byref 型が使用されています。この操作は Common IL の規則では許可されていません。 + + Delegates are not allowed to have curried signatures + Delegates are not allowed to have curried signatures - - Calls to 'reraise' may only occur directly in a handler of a try-with - 'reraise' への呼び出しを直接実行できるのは、try-with ハンドラーの中のみです。 + + The '!' operator is used to dereference a ref cell. Consider using 'not expr' here. + The '!' operator is used to dereference a ref cell. Consider using 'not expr' here. - - Expression-splicing operators may only be used within quotations - 式スプライス演算子は引用符で囲む必要があります + + (description unavailable...) + (description unavailable...) - - First-class uses of the expression-splicing operator are not permitted - 式スプライス演算子のファーストクラスの使用は許可されていません + + is + is - - First-class uses of the address-of operators are not permitted - アドレス演算子のファーストクラスの使用は許可されていません + + The documentation file has no .xml suffix + The documentation file has no .xml suffix - - First-class uses of the 'reraise' function is not permitted - 'reraise' 関数のファーストクラスの使用は許可されていません + + The treatment of this operator is now handled directly by the F# compiler and its meaning cannot be redefined + The treatment of this operator is now handled directly by the F# compiler and its meaning cannot be redefined - - The byref typed value '{0}' cannot be used at this point - この時点で byref 型の値 '{0}' は使用できません + + System.Environment.Exit did not exit + System.Environment.Exit did not exit - - 'base' values may only be used to make direct calls to the base implementations of overridden members - 'base' 値を使用できるのは、オーバーライドされたメンバーの基本実装に対して直接呼び出しを行う場合のみです。 + + All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. + All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - - Object constructors cannot directly use try/with and try/finally prior to the initialization of the object. This includes constructs such as 'for x in ...' that may elaborate to uses of these constructs. This is a limitation imposed by Common IL. - オブジェクト コンストラクターでは、オブジェクトの初期化前に try/with および try/finally を直接使用できません。'for x in ...' などのコストラクトを呼び出す可能性があるようなコンストラクトがこれに含まれます。これは Common IL での制限事項です。 + + Erased to + Erased to - - The address of the variable '{0}' cannot be used at this point - この時点で変数 '{0}' のアドレスは使用できません + + A type provider implemented GetStaticParametersForMethod, but ApplyStaticArgumentsForMethod was not implemented or invalid + A type provider implemented GetStaticParametersForMethod, but ApplyStaticArgumentsForMethod was not implemented or invalid - - The address of the static field '{0}' cannot be used at this point - この時点で静的フィールド '{0}' のアドレスは使用できません + + Named static arguments must come after all unnamed static arguments + Named static arguments must come after all unnamed static arguments - - The address of the field '{0}' cannot be used at this point - この時点でフィールド '{0}' のアドレスは使用できません + + A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly. + A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly. - - The address of an array element cannot be used at this point - この時点で配列要素のアドレスは使用できません + + Empty namespace found from the type provider '{0}'. Use 'null' for the global namespace. + Empty namespace found from the type provider '{0}'. Use 'null' for the global namespace. - - The type of a first-class function cannot contain byrefs - ファーストクラス関数の型に byref を含むことはできません + + Type '{0}' from type provider '{1}' has an empty namespace. Use 'null' for the global namespace. + Type '{0}' from type provider '{1}' has an empty namespace. Use 'null' for the global namespace. - - A method return type would contain byrefs which is not permitted - メソッドの戻り値の型に許可されていない byref が含まれています + + The provider '{0}' returned a non-generated type '{1}' in the context of a set of generated types. Consider adjusting the type provider to only return generated types. + The provider '{0}' returned a non-generated type '{1}' in the context of a set of generated types. Consider adjusting the type provider to only return generated types. - - Invalid custom attribute value (not a constant or literal) - カスタム属性値が無効です (定数またはリテラルではありません) + + An error occured applying the static arguments to a provided method + An error occured applying the static arguments to a provided method - - The attribute type '{0}' has 'AllowMultiple=false'. Multiple instances of this attribute cannot be attached to a single language element. - 属性の型 '{0}' に 'AllowMultiple=false' があります。この属性を持つ複数のインスタンスは、単一の言語要素にアタッチできません。 + + An error occured applying the static arguments to a provided type + An error occured applying the static arguments to a provided type - - The member '{0}' is used in an invalid way. A use of '{1}' has been inferred prior to its definition at or near '{2}'. This is an invalid forward reference. - メンバー '{0}' の使用方法に誤りがあります。'{2}' またはその付近の定義の前に '{1}' の使用が推論されました。これは無効な前方参照です。 + + Event '{0}' on provided type '{1}' has no value from GetAddMethod() + Event '{0}' on provided type '{1}' has no value from GetAddMethod() - - A byref typed value would be stored here. Top-level let-bound byref values are not permitted. - byref 型の値がここに保存されます。トップレベルの let-bound byref 値は許可されていません。 + + Event '{0}' on provided type '{1}' has no value from GetRemoveMethod() + Event '{0}' on provided type '{1}' has no value from GetRemoveMethod() - - [<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%' - [<ReflectedDefinition>] 用語には、プレフィックスのスプライス演算子 '%' を使用できません + + Referenced assembly '{0}' has assembly level attribute '{1}' but no public type provider classes were found + Referenced assembly '{0}' has assembly level attribute '{1}' but no public type provider classes were found - - A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. - 'EntryPointAttribute' 属性のラベルを付けた関数は、コンパイル シーケンスの最後のファイルの最後の宣言にする必要があります。 + + Character '{0}' is not allowed in provided namespace name '{1}' + Character '{0}' is not allowed in provided namespace name '{1}' - - compiled form of the union case - 共用体ケースのコンパイル済みの形式 + + Character '{0}' is not allowed in provided type name '{1}' + Character '{0}' is not allowed in provided type name '{1}' - - default augmentation of the union case - 共用体ケースの既定の拡張 + + The type provider '{0}' used an invalid parameter in the ParameterExpression: {1} + The type provider '{0}' used an invalid parameter in the ParameterExpression: {1} - - The property '{0}' has the same name as a method in type '{1}'. - プロパティ '{0}' は、型 '{1}' のメソッドと名前が同じです。 + + The type provider '{0}' provided a constructor which is not reported among the constructors of its declaring type '{1}' + The type provider '{0}' provided a constructor which is not reported among the constructors of its declaring type '{1}' - - The property '{0}' of type '{1}' has a getter and a setter that do not match. If one is abstract then the other must be as well. - 型 '{1}' のプロパティ '{0}' には一致しないゲッターとセッターがあります。一方が抽象の場合、もう一方も抽象にします。 + + The type provider '{0}' provided a method with a name '{1}' and metadata token '{2}', which is not reported among its methods of its declaring type '{3}' + The type provider '{0}' provided a method with a name '{1}' and metadata token '{2}', which is not reported among its methods of its declaring type '{3}' - - The property '{0}' has the same name as another property in type '{1}', but one takes indexer arguments and the other does not. You may be missing an indexer argument to one of your properties. - プロパティ '{0}' は型 '{1}' の別のプロパティと名前が同じですが、一方はインデクサー引数を使用し、もう一方は使用していません。一方のプロパティでインデクサー引数を失う可能性があります。 + + Invalid static argument to provided type. Expected an argument of kind '{0}'. + Invalid static argument to provided type. Expected an argument of kind '{0}'. - - A type would store a byref typed value. This is not permitted by Common IL. - 型に byref 型の値が保存されています。この操作は Common IL では許可されていません。 + + Assembly '{0}' hase TypeProviderAssembly attribute with invalid value '{1}'. The value should be a valid assembly name + Assembly '{0}' hase TypeProviderAssembly attribute with invalid value '{1}'. The value should be a valid assembly name - - Duplicate method. The method '{0}' has the same name and signature as another method in type '{1}'. - 重複したメソッド。メソッド '{0}' は、名前とシグネチャが型 '{1}' の別のメソッドと同じです。 + + Invalid member '{0}' on provided type '{1}'. Provided type members must be public, and not be generic, virtual, or abstract. + Invalid member '{0}' on provided type '{1}'. Provided type members must be public, and not be generic, virtual, or abstract. - - Duplicate method. The method '{0}' has the same name and signature as another method in type '{1}' once tuples, functions, units of measure and/or provided types are erased. - 重複したメソッド。メソッド '{0}' は、タプル、関数、測定単位、指定された型が消去されると、名前とシグネチャが型 '{1}' の他のメソッドと同じになります。 + + This provided method requires static parameters + This provided method requires static parameters - - The method '{0}' has curried arguments but has the same name as another method in type '{1}'. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments. - メソッド '{0}' にはカリー化された引数が使用されていますが、型 '{1}' の別のメソッドと名前が同じです。カリー化された引数を使用したメソッドはオーバーロードできません。メソッドにはタプル化された引数を使用することをご検討ください。 + + Multiple static parameters exist with name '{0}' + Multiple static parameters exist with name '{0}' - - Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition', 'byref', 'CallerLineNumber', 'CallerMemberName', or 'CallerFilePath' arguments - カリー化された引数を使用したメソッドでは、'out'、'ParamArray'、'optional'、'ReflectedDefinition'、'byref'、'CallerLineNumber'、'CallerMemberName'、または 'CallerFilePath' の各引数を宣言できません + + Provided type '{0}' has 'IsArray' as true, but array types are not supported. + Provided type '{0}' has 'IsArray' as true, but array types are not supported. - - Duplicate property. The property '{0}' has the same name and signature as another property in type '{1}'. - 重複したプロパティ。プロパティ '{0}' は、名前とシグネチャが型 '{1}' の別のプロパティと同じです。 + + Provided type '{0}' has 'IsGenericType' as true, but generic types are not supported. + Provided type '{0}' has 'IsGenericType' as true, but generic types are not supported. - - Duplicate property. The property '{0}' has the same name and signature as another property in type '{1}' once tuples, functions, units of measure and/or provided types are erased. - 重複したプロパティ。プロパティ '{0}' は、タプル、関数、測定単位、指定された型が消去されると、名前とシグネチャが型 '{1}' の別のプロパティと同じになります。 + + Nested provided types do not take static arguments or generic parameters + Nested provided types do not take static arguments or generic parameters - - Duplicate method. The abstract method '{0}' has the same name and signature as an abstract method in an inherited type. - 重複したメソッド。抽象メソッド '{0}' は、名前とシグネチャが継承型の抽象メソッドと同じです。 + + No static parameter exists with name '{0}' + No static parameter exists with name '{0}' - - Duplicate method. The abstract method '{0}' has the same name and signature as an abstract method in an inherited type once tuples, functions, units of measure and/or provided types are erased. - 重複したメソッド。抽象メソッド '{0}' は、タプル、関数、測定単位、または指定された型が消去されると、名前とシグネチャが継承型の抽象メソッドと同じになります。 + + The provided type '{0}' returned a null member + The provided type '{0}' returned a null member - - This type implements the same interface at different generic instantiations '{0}' and '{1}'. This is not permitted in this version of F#. - この型は、異なるジェネリックのインスタンス化 '{0}' と '{1}' で同じインターフェイスを実装しています。これは、このバージョンの F# で許可されていません。 + + The provided type '{0}' member info '{1}' has null declaring type + The provided type '{0}' member info '{1}' has null declaring type - - The type of a field using the 'DefaultValue' attribute must admit default initialization, i.e. have 'null' as a proper value or be a struct type whose fields all admit default initialization. You can use 'DefaultValue(false)' to disable this check - 'DefaultValue' 属性を使用するフィールドの型は、既定の初期化を許可する必要があります。つまり、'null' が正規の値として含まれるか、すべてのフィールドが既定の初期化を許可する構造体型です。このチェックを無効にするには、'DefaultValue(false)' を使用します。 + + The provided type '{0}' has member '{1}' which has declaring type '{2}'. Expected declaring type to be the same as provided type. + The provided type '{0}' has member '{1}' which has declaring type '{2}'. Expected declaring type to be the same as provided type. - - The type abbreviation contains byrefs. This is not permitted by F#. - 型略称に byref が含まれます。この操作は F# で許可されていません。 + + The provided type '{0}' returned a member with a null or empty member name + The provided type '{0}' returned a member with a null or empty member name - - The variable '{0}' is bound in a quotation but is used as part of a spliced expression. This is not permitted since it may escape its scope. - 変数 '{0}' は引用符内でバインドされていますが、スプライスされた式の一部として使用されています。スコープが回避される可能性があるため、この操作は許可されていません。 + + Type provider '{0}' returned null from GetInvokerExpression. + Type provider '{0}' returned null from GetInvokerExpression. - - Quotations cannot contain uses of generic expressions - 引用符内にはジェネリック式の使用を含めることはできません + + One or more errors seen during provided type setup + One or more errors seen during provided type setup - - Quotations cannot contain function definitions that are inferred or declared to be generic. Consider adding some type constraints to make this a valid quoted expression. - 引用符内には、ジェネリック型に推論または宣言する関数定義を含めることはできません。有効な引用符付きの式にするには、何らかの型の制約を追加してください。 + + Property '{0}' on provided type '{1}' has CanRead=true but there was no value from GetGetMethod() + Property '{0}' on provided type '{1}' has CanRead=true but there was no value from GetGetMethod() - - Quotations cannot contain object expressions - 引用符内には、オブジェクト式を含めることはできません + + Property '{0}' on provided type '{1}' has CanWrite=true but there was no value from GetSetMethod() + Property '{0}' on provided type '{1}' has CanWrite=true but there was no value from GetSetMethod() - - Quotations cannot contain expressions that take the address of a field - 引用符内には、フィールドのアドレスを使用した式を含めることはできません + + Property '{0}' on provided type '{1}' has CanRead=false but GetGetMethod() returned a method + Property '{0}' on provided type '{1}' has CanRead=false but GetGetMethod() returned a method - - Quotations cannot contain expressions that fetch static fields - 引用符内には、静的フィールドをフェッチする式を含めることはできません + + Property '{0}' on provided type '{1}' has CanWrite=false but GetSetMethod() returned a method + Property '{0}' on provided type '{1}' has CanWrite=false but GetSetMethod() returned a method - - Quotations cannot contain inline assembly code or pattern matching on arrays - 引用符内にインライン アセンブラー コードまたは配列のパターン マッチを含めることはできません + + Property '{0}' on provided type '{1}' is neither readable nor writable as it has CanRead=false and CanWrite=false + Property '{0}' on provided type '{1}' is neither readable nor writable as it has CanRead=false and CanWrite=false - - Quotations cannot contain descending for loops - 引用符内に降順の for loop を含めることはできません + + The type provider '{0}' returned an invalid method from 'ApplyStaticArgumentsForMethod'. A method with name '{1}' was expected, but a method with name '{2}' was returned. + The type provider '{0}' returned an invalid method from 'ApplyStaticArgumentsForMethod'. A method with name '{1}' was expected, but a method with name '{2}' was returned. - - Quotations cannot contain expressions that fetch union case indexes - 引用符内には、共用体ケースのインデックスをフェッチする式を含めることはできません + + The type provider '{0}' returned an invalid type from 'ApplyStaticArguments'. A type with name '{1}' was expected, but a type with name '{2}' was returned. + The type provider '{0}' returned an invalid type from 'ApplyStaticArguments'. A type with name '{1}' was expected, but a type with name '{2}' was returned. - - Quotations cannot contain expressions that set union case fields - 引用符内には、共用体ケースのフィールドを設定する式を含めることはできません + + Expected provided type named '{0}' but provided type has 'Name' with value '{1}' + Expected provided type named '{0}' but provided type has 'Name' with value '{1}' - - Quotations cannot contain expressions that set fields in exception values - 引用符内には、例外値のフィールドを設定する式を含めることはできません + + Expected provided type with path '{0}' but provided type has path '{1}' + Expected provided type with path '{0}' but provided type has path '{1}' - - Quotations cannot contain expressions that require byref pointers - 引用符内には、byref ポインターを必要とする式を含めることはできません + + A reference to a provided type had an invalid value '{0}' for a static parameter. You may need to recompile one or more referenced assemblies. + A reference to a provided type had an invalid value '{0}' for a static parameter. You may need to recompile one or more referenced assemblies. - - Quotations cannot contain expressions that make member constraint calls, or uses of operators that implicitly resolve to a member constraint call - 引用符内にメンバーの制約を呼び出す式を含めること、または暗黙的にメンバーの制約の呼び出しに解決される演算子を使用することはできません + + A reference to a provided type was missing a value for the static parameter '{0}'. You may need to recompile one or more referenced assemblies. + A reference to a provided type was missing a value for the static parameter '{0}'. You may need to recompile one or more referenced assemblies. - - Quotations cannot contain this kind of constant - 引用符内には、この種類の定数を含めることはできません + + An exception occurred when accessing the '{0}' of a provided type: {1} + An exception occurred when accessing the '{0}' of a provided type: {1} - - Quotations cannot contain this kind of pattern match - 引用符内には、この種類のパターン マッチを含めることはできません + + The '{0}' of a provided type was null or empty. + The '{0}' of a provided type was null or empty. - - Quotations cannot contain array pattern matching - 引用符内には、配列のパターン マッチを含めることはできません + + The type provider does not have a valid constructor. A constructor taking either no arguments or one argument of type 'TypeProviderConfig' was expected. + The type provider does not have a valid constructor. A constructor taking either no arguments or one argument of type 'TypeProviderConfig' was expected. - - Quotations cannot contain this kind of type - 引用符内には、この種類の型を含めることはできません + + The type provider '{0}' reported an error: {1} + The type provider '{0}' reported an error: {1} - - The declared type parameter '{0}' cannot be used here since the type parameter cannot be resolved at compile time - 宣言された型パラメーター '{0}' はコンパイル時に解決できないため、使用できません + + The type provider '{0}' reported an error in the context of provided type '{1}', member '{2}'. The error: {3} + The type provider '{0}' reported an error in the context of provided type '{1}', member '{2}'. The error: {3} - - This code is less generic than indicated by its annotations. A unit-of-measure specified using '_' has been determined to be '1', i.e. dimensionless. Consider making the code generic, or removing the use of '_'. - このコードは注釈よりも総称性が低く設定されています。'_' を使用して指定された単位は、'1' (無次元) と判断されます。コードをジェネリックにするか、'_' を使用しないでください。 + + The type provider designer assembly '{0}' could not be loaded from folder '{1}' because a dependency was missing or could not loaded. All dependencies of the type provider designer assembly must be located in the same folder as that assembly. The exception reported was: {2} - {3} + The type provider designer assembly '{0}' could not be loaded from folder '{1}' because a dependency was missing or could not loaded. All dependencies of the type provider designer assembly must be located in the same folder as that assembly. The exception reported was: {2} - {3} - - Type inference problem too complicated (maximum iteration depth reached). Consider adding further type annotations. - 複雑すぎるため、型推論ができません (最大反復回数に達しました)。さらに詳細な型の注釈を増やしてください。 + + The type provider designer assembly '{0}' could not be loaded from folder '{1}'. The exception reported was: {2} - {3} + The type provider designer assembly '{0}' could not be loaded from folder '{1}'. The exception reported was: {2} - {3} - - Expected arguments to an instance member - インスタンス メンバーに対して引数を指定してください + + Assembly attribute '{0}' refers to a designer assembly '{1}' which cannot be loaded from path '{2}'. The exception reported was: {3} - {4} + Assembly attribute '{0}' refers to a designer assembly '{1}' which cannot be loaded from path '{2}'. The exception reported was: {3} - {4} - - This indexer expects {0} arguments but is here given {1} - このインデクサーには {0} 個の引数が必要ですが、存在するのは {1} 個です + + Assembly attribute '{0}' refers to a designer assembly '{1}' which cannot be loaded or doesn't exist. The exception reported was: {2} - {3} + Assembly attribute '{0}' refers to a designer assembly '{1}' which cannot be loaded or doesn't exist. The exception reported was: {2} - {3} - - Expecting a type supporting the operator '{0}' but given a function type. You may be missing an argument to a function. - 演算子 '{0}' をサポートし、特定の関数型である型が必要です。関数に対する引数が足りない可能性があります。 + + The type provider returned 'null', which is not a valid return value from '{0}' + The type provider returned 'null', which is not a valid return value from '{0}' - - Expecting a type supporting the operator '{0}' but given a tuple type - 演算子 '{0}' をサポートする型が必要ですが、タプル型が指定されました + + The static parameter '{0}' has already been given a value + The static parameter '{0}' has already been given a value - - None of the types '{0}' support the operator '{1}' - 型 '{0}' はいずれも演算子 '{1}' をサポートしていません + + The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'. + The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'. - - The type '{0}' does not support the operator '{1}' - 型 '{0}' は演算子 '{1}' をサポートしていません + + Too many static parameters. Expected at most {0} parameters, but got {1} unnamed and {2} named parameters. + Too many static parameters. Expected at most {0} parameters, but got {1} unnamed and {2} named parameters. - - None of the types '{0}' support the operator '{1}'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - 型 '{0}' はいずれも演算子 '{1}' をサポートしていません。'Microsoft.FSharp.Linq.NullableOperators' モジュールを開いてください。 + + The type provider constructor has thrown an exception: {0} + The type provider constructor has thrown an exception: {0} - - The type '{0}' does not support the operator '{1}'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - 型 '{0}' は演算子 '{1}' をサポートしていません。'Microsoft.FSharp.Linq.NullableOperators' モジュールを開いてください。 + + Unexpected exception from member '{0}' of provided type '{1}' member '{2}': {3} + Unexpected exception from member '{0}' of provided type '{1}' member '{2}': {3} - - The type '{0}' does not support a conversion to the type '{1}' - 型 '{0}' は型 '{1}' への変換をサポートしていません + + Unexpected exception from provided type '{0}' member '{1}': {2} + Unexpected exception from provided type '{0}' member '{1}': {2} - - The type '{0}' has a method '{1}' (full name '{2}'), but the method is static - 型 '{0}' にメソッド '{1}' (フル ネームは '{2}') がありますが、メソッドは静的です + + Unexpected 'null' return value from provided type '{0}' member '{1}' + Unexpected 'null' return value from provided type '{0}' member '{1}' - - The type '{0}' has a method '{1}' (full name '{2}'), but the method is not static - 型 '{0}' にメソッド '{1}' (フル ネームは '{2}') がありますが、メソッドは静的ではありません + + Unknown static argument kind '{0}' when resolving a reference to a provided type or method '{1}' + Unknown static argument kind '{0}' when resolving a reference to a provided type or method '{1}' - - The constraints 'struct' and 'not struct' are inconsistent - 'struct' および 'not struct' という制約は矛盾しています + + Unsupported constant type '{0}'. Quotations provided by type providers can only contain simple constants. The implementation of the type provider may need to be adjusted by moving a value declared outside a provided quotation literal to be a 'let' binding inside the quotation literal. + Unsupported constant type '{0}'. Quotations provided by type providers can only contain simple constants. The implementation of the type provider may need to be adjusted by moving a value declared outside a provided quotation literal to be a 'let' binding inside the quotation literal. - - The type '{0}' does not have 'null' as a proper value - 型 '{0}' に 'null' は使用できません + + Invalid member '{0}' on provided type '{1}'. Only properties, methods and constructors are allowed + Invalid member '{0}' on provided type '{1}'. Only properties, methods and constructors are allowed - - The type '{0}' does not have 'null' as a proper value. To create a null value for a Nullable type use 'System.Nullable()'. - 型 '{0}' に 'null' は使用できません。Null 許容型に対して null 値を作成するには、'System.Nullable()' を使用します。 + + Unsupported expression '{0}' from type provider. If you are the author of this type provider, consider adjusting it to provide a different provided expression. + Unsupported expression '{0}' from type provider. If you are the author of this type provider, consider adjusting it to provide a different provided expression. - - The type '{0}' does not support the 'comparison' constraint because it has the 'NoComparison' attribute - 型 '{0}' は 'NoComparison' 属性があるため、'comparison' 制約をサポートしません + + The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'. + The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'. - - The type '{0}' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface - 型 '{0}' は 'comparison' 制約をサポートしません。たとえば、'System.IComparable' インターフェイスをサポートしません。 + + This construct is experimental + This construct is experimental - - The type '{0}' does not support the 'comparison' constraint because it is a record, union or struct with one or more structural element types which do not support the 'comparison' constraint. Either avoid the use of comparison with this type, or add the 'StructuralComparison' attribute to the type to determine which field type does not support comparison - 型 '{0}' は、'comparison' 制約をサポートしない 1 個または複数の構造体の要素型を持つレコード、共用体、または構造体なので、'comparison' 制約をサポートしません。この型では comparison を使用しないようにするか、または、comparison をサポートしないフィールド型を決定するために、'StructuralComparison' 属性を型に追加してください。 + + Expression does not have a name. + Expression does not have a name. - - The type '{0}' does not support the 'equality' constraint because it has the 'NoEquality' attribute - 型 '{0}' は 'NoEquality' 属性があるため、'equality' 制約をサポートしません + + applicative computation expressions + applicative computation expressions - - The type '{0}' does not support the 'equality' constraint because it is a function type - 型 '{0}' は関数型なので、'equality' 制約をサポートしません + + default interface member consumption + default interface member consumption - - The type '{0}' does not support the 'equality' constraint because it is a record, union or struct with one or more structural element types which do not support the 'equality' constraint. Either avoid the use of equality with this type, or add the 'StructuralEquality' attribute to the type to determine which field type does not support equality - 型 '{0}' は、'equality' 制約をサポートしない 1 個または複数の構造体の要素型を持つレコード、共用体、または構造体なので、'equality' 制約をサポートしません。この型を持つ equality を使用しないでください。または、equality をサポートしないフィールド型を決定するために、'StructuralEquality' 属性を型に追加してください。 + + dotless float32 literal + dotless float32 literal - - The type '{0}' is not a CLI enum type - 型 '{0}' は CLI の列挙型ではありません + + fixed-index slice 3d/4d + fixed-index slice 3d/4d - - The type '{0}' has a non-standard delegate type - 型 '{0}' には標準ではないデリゲート型があります + + from-end slicing + from-end slicing - - The type '{0}' is not a CLI delegate type - 型 '{0}' は CLI のデリゲート型ではありません + + implicit yield + implicit yield - - This type parameter cannot be instantiated to 'Nullable'. This is a restriction imposed in order to ensure the meaning of 'null' in some CLI languages is not confusing when used in conjunction with 'Nullable' values. - の型パラメーターは 'Nullable' にインスタンス化できません。別の CLI 言語などでも 'Nullable' の値との関係で、'null' の意味があいまいにならないように、この制限があります。 + + interfaces with multiple generic instantiation + interfaces with multiple generic instantiation - - A generic construct requires that the type '{0}' is a CLI or F# struct type - ジェネリック コンストラクトの型 '{0}' は、CLI または F# の構造体型にする必要があります + + nameof + nameof - - A generic construct requires that the type '{0}' is an unmanaged type - ジェネリック コンストラクターの型 '{0}' はアンマネージ型にする必要があります + + nullable optional interop + nullable optional interop - - The type '{0}' is not compatible with any of the types {1}, arising from the use of a printf-style format string - 型 '{0}' は、printf 形式の書式指定文字列の使用によって生じる型 {1} のいずれとも互換性がありません + + open type declaration + open type declaration - - A generic construct requires that the type '{0}' have reference semantics, but it does not, i.e. it is a struct - ジェネリック コンストラクトの型 '{0}' には参照のセマンティクスが必要ですが、存在しません (つまり構造体です) + + overloads for custom operations + overloads for custom operations - - A generic construct requires that the type '{0}' be non-abstract - ジェネリック コンストラクトの型 '{0}' は、非抽象にする必要があります + + package management + package management - - A generic construct requires that the type '{0}' have a public default constructor - ジェネリック コンストラクトの型 '{0}' には、パブリック既定コンストラクターが必要です + + whitespace relexation + whitespace relexation - - Type instantiation length mismatch - 型のインスタンス化の長さが一致しません + + single underscore pattern + single underscore pattern - - Optional arguments not permitted here - オプションの引数は使用できません + + string interpolation + string interpolation - - {0} is not a static member - {0} は静的メンバーではありません + + wild card in for loop + wild card in for loop - - {0} is not an instance member - {0} はインスタンス メンバーではありません + + witness passing for trait constraints in F# quotations + witness passing for trait constraints in F# quotations - - Argument length mismatch - 引数の長さが一致しません + + The record, struct or class field '{0}' is not accessible from this code location + The record, struct or class field '{0}' is not accessible from this code location - - The argument types don't match - 引数の型が一致しません + + All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. + All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'. - - This method expects a CLI 'params' parameter in this position. 'params' is a way of passing a variable number of arguments to a method in languages such as C#. Consider passing an array for this argument - このメソッドのこの位置には、CLI 'params' パラメーターが必要です。'params' は、可変個数の引数を C# などの言語のメソッドに渡すときに使用されます。この引数には配列を渡してください。 + + Bad format specifier (after l or L): Expected ld,li,lo,lu,lx or lX. In F# code you can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. + Bad format specifier (after l or L): Expected ld,li,lo,lu,lx or lX. In F# code you can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. - - The member or object constructor '{0}' is not {1} - メンバーまたはオブジェクト コンストラクター '{0}' は {1} ではありません + + Bad format specifier: '{0}' + Bad format specifier: '{0}' - - The member or object constructor '{0}' is not {1}. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions. - メンバーまたはオブジェクト コンストラクター '{0}' は {1} ではありません。プライベート メンバーには、宣言する型の中からのみアクセスできます。プロテクト メンバーには、拡張する型からのみアクセスでき、内部ラムダ式からアクセスすることはできません。 + + Bad precision in format specifier + Bad precision in format specifier - - {0} is not a static method - {0} は静的メソッドではありません + + Bad width in format specifier + Bad width in format specifier - - {0} is not an instance method - {0} はインスタンス メソッドではありません + + '{0}' does not support prefix '{1}' flag + '{0}' does not support prefix '{1}' flag - - The member or object constructor '{0}' has no argument or settable return property '{1}'. {2}. - メンバーまたはオブジェクト コンストラクター '{0}' には、引数または設定可能な戻り値のプロパティ '{1}' がありません。{2} + + '{0}' format does not support '0' flag + '{0}' format does not support '0' flag - - The object constructor '{0}' has no argument or settable return property '{1}'. {2}. - オブジェクト コンストラクター '{0}' には、引数または設定可能な戻り値のプロパティ '{1}' がありません。{2}。 + + '{0}' flag set twice + '{0}' flag set twice - - The required signature is {0} - 必要なシグネチャは {0} です + + '{0}' format does not support precision + '{0}' format does not support precision - - The member or object constructor '{0}' requires {1} argument(s). The required signature is '{2}'. - メンバーまたはオブジェクト コンストラクター '{0}' には {1} 個の引数が必要です。必要なシグネチャは '{2}' です。 + + Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{{1+1}}'. + Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{{1+1}}'. - - The member or object constructor '{0}' requires {1} additional argument(s). The required signature is '{2}'. - メンバーまたはオブジェクト コンストラクター '{0}' には追加で {1} 個の引数が必要です。必要なシグネチャは '{2}' です。 + + .NET-style format specifiers such as '{{x,3}}' or '{{x:N5}}' may not be mixed with '%' format specifiers. + .NET-style format specifiers such as '{{x,3}}' or '{{x:N5}}' may not be mixed with '%' format specifiers. - - The member or object constructor '{0}' requires {1} argument(s). The required signature is '{2}'. Some names for missing arguments are {3}. - メンバーまたはオブジェクト コンストラクター '{0}' には {1} 個の引数が必要です。必要なシグネチャは '{2}' です。足りない引数の名前は {3} です。 + + The '%P' specifier may not be used explicitly. + The '%P' specifier may not be used explicitly. - - The member or object constructor '{0}' requires {1} additional argument(s). The required signature is '{2}'. Some names for missing arguments are {3}. - メンバーまたはオブジェクト コンストラクター '{0}' には追加で {1} 個の引数が必要です。必要なシグネチャは '{2}' です。足りない引数の名前は {3} です。 + + Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{{expr}}', '{{expr,3}}' or '{{expr:N5}}' may be used. + Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{{expr}}', '{{expr,3}}' or '{{expr:N5}}' may be used. - - The member or object constructor '{0}' requires {1} argument(s) but is here given {2} unnamed and {3} named argument(s). The required signature is '{4}'. - メンバーまたはオブジェクト コンストラクター '{0}' には {1} 個の引数が必要ですが、名前がない引数が {2} 個、名前付き引数が {3} 個です。必要なシグネチャは '{4}' です。 + + The 'h' or 'H' in this format specifier is unnecessary. You can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. + The 'h' or 'H' in this format specifier is unnecessary. You can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. - - The member or object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. - メンバーまたはオブジェクト コンストラクター '{0}' には {1} 個の引数が必要ですが、{2} 個です。必要なシグネチャは '{3}' です。 + + The # formatting modifier is invalid in F# + The # formatting modifier is invalid in F# - - The object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. - オブジェクト コンストラクター '{0}' には {1} 個の引数が必要ですが、指定されているのは {2} 個です。必要なシグネチャは '{3}' です。 + + The 'l' or 'L' in this format specifier is unnecessary. In F# code you can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. + The 'l' or 'L' in this format specifier is unnecessary. In F# code you can use %d, %x, %o or %u instead, which are overloaded to work with all basic integer types. - - The object constructor '{0}' takes {1} argument(s) but is here given {2}. The required signature is '{3}'. If some of the arguments are meant to assign values to properties, consider separating those arguments with a comma (','). - オブジェクト コンストラクター '{0}' には {1} 個の引数が必要ですが、指定されているのは {2} 個です。必要なシグネチャは '{3}' です。いくつかの引数がプロパティに値を割り当てる引数である場合は、それらの引数をコンマ (',') で区切ることを検討してください。 + + Missing format specifier + Missing format specifier - - The member or object constructor '{0}' takes {1} type argument(s) but is here given {2}. The required signature is '{3}'. - メンバーまたはオブジェクト コンストラクター '{0}' には {1} 個の型引数が必要ですが、存在するのは {2} 個です。必要なシグネチャは '{3}' です。 + + Positional specifiers are not permitted in format strings + Positional specifiers are not permitted in format strings - - A member or object constructor '{0}' taking {1} arguments is not accessible from this code location. All accessible versions of method '{2}' take {3} arguments. - {1} 個の引数を使用するメンバーまたはオブジェクト コンストラクター '{0}' は、このコードの場所からはアクセスできません。メソッド '{2}' のすべてのアクセス可能なバージョンは {3} 個の引数を使用します。 + + Precision missing after the '.' + Precision missing after the '.' - - Incorrect generic instantiation. No {0} member named '{1}' takes {2} generic arguments. - ジェネリックのインスタンス化が正しくありません。{2} のジェネリック引数を使用する '{1}' という {0} メンバーはありません。 + + Prefix flag (' ' or '+') set twice + Prefix flag (' ' or '+') set twice - - The member or object constructor '{0}' does not take {1} argument(s). An overload was found taking {2} arguments. - メンバーまたはオブジェクト コンストラクター '{0}' は {1} 個の引数ではありません。{2} 個の引数を使用するオーバーロードが見つかりました。 + + - {0} + - {0} - - No {0} member or object constructor named '{1}' takes {2} arguments - {2} 個の引数を使用する {0} メンバーまたはオブジェクト コンストラクター '{1}' がありません + + From the end slicing with requires language version 5.0, use /langversion:preview. + From the end slicing with requires language version 5.0, use /langversion:preview. - - No {0} member or object constructor named '{1}' takes {2} arguments. Note the call to this member also provides {3} named arguments. - {2} 個の引数を使用する {0} メンバーまたはオブジェクト コンストラクター '{1}' がありません。このメンバーの呼び出しには、{3} 個の名前付き引数も必要です。 + + Error emitting 'System.Reflection.AssemblyCultureAttribute' attribute -- 'Executables cannot be satellite assemblies, Culture should always be empty' + Error emitting 'System.Reflection.AssemblyCultureAttribute' attribute -- 'Executables cannot be satellite assemblies, Culture should always be empty' - - No {0} member or object constructor named '{1}' takes {2} arguments. The named argument '{3}' doesn't correspond to any argument or settable return property for any overload. - {2} 個の引数を使用する {0} メンバーまたはオブジェクト コンストラクター '{1}' がありません。名前付き引数 '{3}' に対応する、オーバーロードに合致した任意の引数、または設定可能な戻り値のプロパティはありません。 + + Assembly '{0}' not found in dependency set of target binary. Statically linked roots should be specified using an assembly name, without a DLL or EXE extension. If this assembly was referenced explicitly then it is possible the assembly was not actually required by the generated binary, in which case it should not be statically linked. + Assembly '{0}' not found in dependency set of target binary. Statically linked roots should be specified using an assembly name, without a DLL or EXE extension. If this assembly was referenced explicitly then it is possible the assembly was not actually required by the generated binary, in which case it should not be statically linked. - - Method or object constructor '{0}' not found - メソッドまたはオブジェクト コンストラクター '{0}' が見つかりません + + The 'AssemblyVersionAttribute' has been ignored because a version was given using a command line option + The 'AssemblyVersionAttribute' has been ignored because a version was given using a command line option - - No overloads match for method '{0}'. - メソッド '{0}' に一致するオーバーロードはありません。 + + An {0} specified version '{1}', but this value is a wildcard, and you have requested a deterministic build, these are in conflict. + An {0} specified version '{1}', but this value is a wildcard, and you have requested a deterministic build, these are in conflict. - - A unique overload for method '{0}' could not be determined based on type information prior to this program point. A type annotation may be needed. - このプログラム ポイントよりも前の型情報に基づいて、メソッド '{0}' の固有のオーバーロードを決定することができませんでした。型の注釈が必要な場合があります。 + + Assembly '{0}' was referenced transitively and the assembly could not be resolved automatically. Static linking will assume this DLL has no dependencies on the F# library or other statically linked DLLs. Consider adding an explicit reference to this DLL. + Assembly '{0}' was referenced transitively and the assembly could not be resolved automatically. Static linking will assume this DLL has no dependencies on the F# library or other statically linked DLLs. Consider adding an explicit reference to this DLL. - - Candidates:\n{0} - 候補:\n{0} + + The attribute {0} specified version '{1}', but this value is invalid and has been ignored + The attribute {0} specified version '{1}', but this value is invalid and has been ignored - - Accessibility modifiers are not permitted on 'do' bindings, but '{0}' was given. - 'do' バインドにはアクセシビリティ修飾子を使用できませんが、'{0}' が指定されました。 + + Option '--delaysign' overrides attribute 'System.Reflection.AssemblyDelaySignAttribute' given in a source file or added module + Option '--delaysign' overrides attribute 'System.Reflection.AssemblyDelaySignAttribute' given in a source file or added module - - End of file in #if section begun at or after here - この位置以前に始まった #if セクションの途中でファイルの終わりが見つかりました + + Deterministic builds only support portable PDBs (--debug:portable or --debug:embedded) + Deterministic builds only support portable PDBs (--debug:portable or --debug:embedded) - - End of file in string begun at or before here - この位置以前に始まった文字列の途中でファイルの終わりが見つかりました + + Ignoring mixed managed/unmanaged assembly '{0}' during static linking + Ignoring mixed managed/unmanaged assembly '{0}' during static linking - - End of file in verbatim string begun at or before here - この位置以前に始まった verbatim 文字列の途中でファイルの終わりが見つかりました + + The key file '{0}' could not be opened + The key file '{0}' could not be opened - - End of file in comment begun at or before here - この位置以前に始まったコメントの途中でファイルの終わりが見つかりました + + Option '--keyfile' overrides attribute 'System.Reflection.AssemblyKeyFileAttribute' given in a source file or added module + Option '--keyfile' overrides attribute 'System.Reflection.AssemblyKeyFileAttribute' given in a source file or added module - - End of file in string embedded in comment begun at or before here - この位置以前に始まったコメントに埋め込まれた文字列の途中でファイルの終わりが見つかりました + + Option '--keycontainer' overrides attribute 'System.Reflection.AssemblyNameAttribute' given in a source file or added module + Option '--keycontainer' overrides attribute 'System.Reflection.AssemblyNameAttribute' given in a source file or added module - - End of file in verbatim string embedded in comment begun at or before here - この位置以前に始まったコメントに埋め込まれた verbatim 文字列の途中でファイルの終わりが見つかりました + + No implementation files specified + No implementation files specified - - End of file in IF-OCAML section begun at or before here - この位置以前に始まった IF-OCAML セクションの途中でファイルの終わりが見つかりました + + --pathmap can only be used with portable PDBs (--debug:portable or --debug:embedded) + --pathmap can only be used with portable PDBs (--debug:portable or --debug:embedded) - - End of file in directive begun at or before here - この位置以前に始まったディレクティブの途中でファイルの終わりが見つかりました + + A problem occurred writing the binary '{0}': {1} + A problem occurred writing the binary '{0}': {1} - - No #endif found for #if or #else - #if または #else の #endif が見つかりません + + The code in assembly '{0}' makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. + The code in assembly '{0}' makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. - - Attributes have been ignored in this construct - このコンストラクトの属性は無視されました + + Code in this assembly makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. + Code in this assembly makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. - - 'use' bindings are not permitted in primary constructors - プライマリ コンストラクターに 'use' 束縛は使用できません + + The assembly '{0}' is listed on the command line. Assemblies should be referenced using a command line flag such as '-r'. + The assembly '{0}' is listed on the command line. Assemblies should be referenced using a command line flag such as '-r'. - - 'use' bindings are not permitted in modules and are treated as 'let' bindings - モジュールに 'use' 束縛は使用できません。この束縛は 'let' 束縛として扱われます。 + + The resident compilation service was not used because a problem occured in communicating with the server. + The resident compilation service was not used because a problem occured in communicating with the server. - - An integer for loop must use a simple identifier - ループの整数には単純な識別子を使用する必要があります + + Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file. + Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file. - - At most one 'with' augmentation is permitted - 使用できる 'with' の拡張の数は 1 以下です + + Static linking may not include a .EXE + Static linking may not include a .EXE - - A semicolon is not expected at this point - この位置にセミコロンは使用できません + + Static linking may not include a mixed managed/unmanaged DLL + Static linking may not include a mixed managed/unmanaged DLL - - Unexpected end of input - 予期しない入力の終わりです: + + Static linking may not be used on an assembly referencing mscorlib (e.g. a .NET Framework assembly) when generating an assembly that references System.Runtime (e.g. a .NET Core or Portable assembly). + Static linking may not be used on an assembly referencing mscorlib (e.g. a .NET Framework assembly) when generating an assembly that references System.Runtime (e.g. a .NET Core or Portable assembly). - - Accessibility modifiers are not permitted here, but '{0}' was given. - ここではアクセシビリティ修飾子を使用できませんが、'{0}' が指定されました。 + + System.Runtime.InteropServices assembly is required to use UnknownWrapper\DispatchWrapper classes. + System.Runtime.InteropServices assembly is required to use UnknownWrapper\DispatchWrapper classes. - - Only '#' compiler directives may occur prior to the first 'namespace' declaration - 最初の 'namespace' 宣言の前に指定できるのは、'#' コンパイラ ディレクティブのみです + + Exiting - too many errors + Exiting - too many errors - - Accessibility modifiers should come immediately prior to the identifier naming a construct - アクセシビリティ修飾子は、コンストラクトを示す識別子の直前に指定する必要があります + + Conflicting options specified: 'win32manifest' and 'win32res'. Only one of these can be used. + Conflicting options specified: 'win32manifest' and 'win32res'. Only one of these can be used. - - Files should begin with either a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule', but not both. To define a module within a namespace use 'module SomeModule = ...' - ファイルは名前空間またはモジュールの宣言から開始する必要があります。たとえば、'namespace SomeNamespace.SubNamespace'、'module SomeNamespace.SomeModule' などです。ただし、両方は指定しません。名前空間内でモジュールを定義するには、'module SomeModule = ...' を使用してください。 + + Cannot find FSharp.Core.dll in compiler's directory + Cannot find FSharp.Core.dll in compiler's directory - - A module abbreviation must be a simple name, not a path - モジュールの省略形はパスではなく簡易名にする必要があります + + Invalid directive '#{0} {1}' + Invalid directive '#{0} {1}' - - Ignoring attributes on module abbreviation - モジュールの省略形にある属性を無視します + + The 'if' expression needs to have type '{0}' to satisfy context type requirements. It currently has type '{1}'. + The 'if' expression needs to have type '{0}' to satisfy context type requirements. It currently has type '{1}'. - - The '{0}' accessibility attribute is not allowed on module abbreviation. Module abbreviations are always private. - モジュールの省略形には '{0}' アクセシビリティ属性を使用できません。モジュールの省略形は常にプライベートです。 + + Taking the address of a literal field is invalid + Taking the address of a literal field is invalid - - The '{0}' visibility attribute is not allowed on module abbreviation. Module abbreviations are always private. - モジュールの省略形には '{0}' 表示範囲属性を使用できません。モジュールの省略形は常にプライベートです。 + + This operation involves taking the address of a value '{0}' represented using a local variable or other special representation. This is invalid. + This operation involves taking the address of a value '{0}' represented using a local variable or other special representation. This is invalid. - - Unclosed block - ブロックが閉じられていません + + Custom marshallers cannot be specified in F# code. Consider using a C# helper function. + Custom marshallers cannot be specified in F# code. Consider using a C# helper function. - - Unmatched 'begin' or 'struct' - 'begin' または 'struct' が対応しません + + The DefaultAugmentation attribute could not be decoded + The DefaultAugmentation attribute could not be decoded - - A module name must be a simple name, not a path - モジュール名はパスではなく簡易名にする必要があります + + The DllImport attribute could not be decoded + The DllImport attribute could not be decoded - - Unexpected empty type moduleDefn list - 予期しない空の型の moduleDefn リストです: + + Dynamic invocation of {0} is not supported + Dynamic invocation of {0} is not supported - - Attributes should be placed before 'val' - 属性は 'val' の前に配置してください + + The type '{0}' has been marked as having an Explicit layout, but the field '{1}' has not been marked with the 'FieldOffset' attribute + The type '{0}' has been marked as having an Explicit layout, but the field '{1}' has not been marked with the 'FieldOffset' attribute - - Attributes are not permitted on interface implementations - インターフェイスの実装に属性は使用できません + + The FieldOffset attribute can only be placed on members of types marked with the StructLayout(LayoutKind.Explicit) + The FieldOffset attribute can only be placed on members of types marked with the StructLayout(LayoutKind.Explicit) - - Syntax error - 構文エラーです + + The FieldOffset attribute could not be decoded + The FieldOffset attribute could not be decoded - - Augmentations are not permitted on delegate type moduleDefns - デリゲート型 moduleDefns では拡張が許可されていません + + Incorrect number of type arguments to local call + Incorrect number of type arguments to local call - - Unmatched 'class', 'interface' or 'struct' - 'class'、'interface'、または 'struct' が対応しません + + Label {0} not found + Label {0} not found - - A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. - 型定義には、1 つまたは複数のメンバーまたは他の宣言が必要です。空のクラス、構造体、またはインターフェイスを定義する場合、'type ... = class end'、'interface end'、または 'struct end' を使用してください。 + + Literal fields cannot be set + Literal fields cannot be set - - Unmatched 'with' or badly formatted 'with' block - with' が対応しないか、'with' ブロックの形式に誤りがあります + + Main module of program is empty: nothing will happen when it is run + Main module of program is empty: nothing will happen when it is run - - 'get', 'set' or 'get,set' required - 'get'、'set'、または 'get,set' が必要です + + The MarshalAs attribute could not be decoded + The MarshalAs attribute could not be decoded - - Only class types may take value arguments - 値の引数を使用できるのはクラス型のみです + + Mutable variables cannot escape their method + Mutable variables cannot escape their method - - Unmatched 'begin' - 'begin' が対応しません + + Reflected definitions cannot contain uses of the prefix splice operator '%' + Reflected definitions cannot contain uses of the prefix splice operator '%' - - Invalid declaration syntax - 宣言の構文が無効です + + Bad image format + Bad image format - - 'get' and/or 'set' required - 'get'、'set'、またはその両方が必要です + + Invalid algId - 'Exponent' expected + Invalid algId - 'Exponent' expected - - Type annotations on property getters and setters must be given after the 'get()' or 'set(v)', e.g. 'with get() : string = ...' - プロパティのゲッターおよびセッターでは、'get()' または 'set(v)' の後に型の注釈を指定する必要があります。たとえば、'with get() : string = ...' などです。 + + Invalid bit Length + Invalid bit Length - - A getter property is expected to be a function, e.g. 'get() = ...' or 'get(index) = ...' - ゲッターのプロパティは関数にする必要があります (たとえば、'get() = ...'、'get(index) = ...') + + Invalid Magic value in CLR Header + Invalid Magic value in CLR Header - - Multiple accessibilities given for property getter or setter - プロパティのゲッターまたはセッターに指定されたアクセシビリティが複数あります + + Invalid Public Key blob + Invalid Public Key blob - - Property setters must be defined using 'set value = ', 'set idx value = ' or 'set (idx1,...,idxN) value = ... ' - プロパティ Set アクセス操作子を定義するには、'set value = '、'set idx value = '、または 'set (idx1,...,idxN) value = ... ' を使用する必要があります + + Invalid RSAParameters structure - '{{0}}' expected + Invalid RSAParameters structure - '{{0}}' expected - - Interfaces always have the same visibility as the enclosing type - インターフェイスは、それを囲む型と常に同じ表示範囲を持ちます + + Invalid signature size + Invalid signature size - - Accessibility modifiers are not allowed on this member. Abstract slots always have the same visibility as the enclosing type. - アクセシビリティ修飾子はこのメンバーでは許可されていません。抽象スロットには、それを囲む型と常に同じ表示範囲があります。 + + No signature directory + No signature directory - - Attributes are not permitted on 'inherit' declarations - 'inherit' 宣言に属性は使用できません + + Private key expected + Private key expected - - Accessibility modifiers are not permitted on an 'inherits' declaration - 'inherits' 宣言にアクセシビリティ修飾子は使用できません + + RSA key expected + RSA key expected - - 'inherit' declarations cannot have 'as' bindings. To access members of the base class when overriding a method, the syntax 'base.SomeMember' may be used; 'base' is a keyword. Remove this 'as' binding. - 'inherit' 宣言に 'as' 束縛は指定できません。メソッドをオーバーライドするときに基底クラスのメンバーにアクセスするには、'base.SomeMember' という構文を使用できます。'base' はキーワードです。この 'as' 束縛は削除してください。 + + The signature for this external function contains type parameters. Constrain the argument and return types to indicate the types of the corresponding C function. + The signature for this external function contains type parameters. Constrain the argument and return types to indicate the types of the corresponding C function. - - Attributes are not allowed here - ここでは属性を使用できません + + GenSetStorage: {0} was represented as a static method but was not an appropriate lambda expression + GenSetStorage: {0} was represented as a static method but was not an appropriate lambda expression - - Accessibility modifiers are not permitted in this position for type abbreviations - 型略称のこの位置にアクセシビリティ修飾子は使用できません + + The StructLayout attribute could not be decoded + The StructLayout attribute could not be decoded - - Accessibility modifiers are not permitted in this position for enum types - 列挙型のこの位置にアクセシビリティ修飾子は使用できません + + This type cannot be used for a literal field + This type cannot be used for a literal field - - All enum fields must be given values - すべての列挙型フィールドに値を指定する必要があります + + Undefined value '{0}' + Undefined value '{0}' - - Accessibility modifiers are not permitted on inline assembly code types - アクセシビリティ修飾子はインライン アセンブラー コード型では許可されていません + + Unexpected GetSet annotation on a property + Unexpected GetSet annotation on a property - - Unexpected identifier: '{0}' - 予期しない識別子: '{0}': + + Compiler error: unexpected unrealized value + Compiler error: unexpected unrealized value - - Accessibility modifiers are not permitted on union cases. Use 'type U = internal ...' or 'type U = private ...' to give an accessibility to the whole representation. - アクセシビリティ修飾子は共用体ケースに使用できません。表現全体にアクセシビリティを付与するには、'type U = internal ...' または 'type U = private ...' を使用してください。 + + The file '{0}' changed on disk unexpectedly, please reload. + The file '{0}' changed on disk unexpectedly, please reload. - - Accessibility modifiers are not permitted on enumeration fields - 列挙型フィールドにアクセシビリティ修飾子は使用できません + + Cannot generate MDB debug information. Failed to load the 'MonoSymbolWriter' type from the 'Mono.CompilerServices.SymbolWriter.dll' assembly. + Cannot generate MDB debug information. Failed to load the 'MonoSymbolWriter' type from the 'Mono.CompilerServices.SymbolWriter.dll' assembly. - - Consider using a separate record type instead - 代わりに別のレコード型を使用してください + + Unexpected error creating debug information file '{0}' + Unexpected error creating debug information file '{0}' - - Accessibility modifiers are not permitted on record fields. Use 'type R = internal ...' or 'type R = private ...' to give an accessibility to the whole representation. - アクセシビリティ修飾子はレコード フィールドに使用できません。表現全体にアクセシビリティを付与するには、'type R = internal ...' または 'type R = private ...' を使用してください + + The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored. + The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored. - - The declaration form 'let ... and ...' for non-recursive bindings is not used in F# code. Consider using a sequence of 'let' bindings - 非再帰的な束縛の宣言の形式 'let ... and ...' は、F# コードでは使用されません。'let' 束縛のシーケンスを使用してください。 + + MDB generation failed. Could not find compatible member {0} + MDB generation failed. Could not find compatible member {0} - - Unmatched '(' - '(' が対応しません + + Invalid argument to 'methodhandleof' during codegen + Invalid argument to 'methodhandleof' during codegen - - Successive patterns should be separated by spaces or tupled - 複数のパターンが連続する場合、スペースで区切るかタプル化します + + An imported assembly uses the type '{0}' but that type is not public + An imported assembly uses the type '{0}' but that type is not public - - No matching 'in' found for this 'let' - この 'let' に対応する 'in' が見つかりません + + Invalid value '{0}' for unit-of-measure parameter '{1}' + Invalid value '{0}' for unit-of-measure parameter '{1}' - - Error in the return expression for this 'let'. Possible incorrect indentation. - この 'let' の return 式にエラーが見つかりました。インデントが正しくない可能性があります。 + + Invalid value unit-of-measure parameter '{0}' + Invalid value unit-of-measure parameter '{0}' - - The block following this '{0}' is unfinished. Every code block is an expression and must have a result. '{1}' cannot be the final code element in a block. Consider giving this block an explicit result. - この '{0}' に続くブロックが完了していません。すべてのコード ブロックは式であり、結果を持つ必要があります。'{1}' をブロック内の最後のコード要素にすることはできません。このブロックに明示的な結果を指定することを検討してください。 + + Invalid number of generic arguments to type '{0}' in provided type. Expected '{1}' arguments, given '{2}'. + Invalid number of generic arguments to type '{0}' in provided type. Expected '{1}' arguments, given '{2}'. - - Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. - 不完全な条件です。'if <expr> then <expr>' や 'if <expr> then <expr> else <expr>' が必要でした。 + + Internal error or badly formed metadata: not enough type parameters were in scope while importing + Internal error or badly formed metadata: not enough type parameters were in scope while importing - - 'assert' may not be used as a first class value. Use 'assert <expr>' instead. - 'assert' をファースト クラス値として使用することはできません。代わりに 'assert <expr>' を使用します。 + + A reference to the DLL {0} is required by assembly {1}. The imported type {2} is located in the first assembly and could not be resolved. + A reference to the DLL {0} is required by assembly {1}. The imported type {2} is located in the first assembly and could not be resolved. - - Identifier expected - 識別子がありません + + A reference to the type '{0}' in assembly '{1}' was found, but the type could not be found in that assembly + A reference to the type '{0}' in assembly '{1}' was found, but the type could not be found in that assembly - - 'in' or '=' expected - 'in' または '=' が必要です + + The type '{0}' is required here and is unavailable. You must add a reference to assembly '{1}'. + The type '{0}' is required here and is unavailable. You must add a reference to assembly '{1}'. - - The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions. - シーケンス式または計算式で '->' を使用する場合、'for pat in expr -> expr' という形式にするよう制限されています。より複雑なシーケンス式でエレメントを生成するには、'for ... in ... do ... yield...' 構文を使用します。 + + This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield'. + This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield'. - - Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized - 複数の引数が連続する場合、スペースで区切るかタプル化します。関数またはメソッド アプリケーションに関する引数の場合、かっこで囲む必要があります。 + + This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. + This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. - - Unmatched '[' - '[' が対応しません + + Invalid provided literal value '{0}' + Invalid provided literal value '{0}' - - Missing qualification after '.' - '.' の後に修飾子がありません + + invalid full name for provided type + invalid full name for provided type - - In F# code you may use 'expr.[expr]'. A type annotation may be required to indicate the first expression is an array - F# コードでは、'expr.[expr]' を使用できます。最初の式が配列であることを示すには、型の注釈が必要です。 + + invalid namespace for provided type + invalid namespace for provided type - - Mismatched quotation, beginning with '{0}' - '{0}' で始まる引用符が対応しません + + The 'anycpu32bitpreferred' platform can only be used with EXE targets. You must use 'anycpu' instead. + The 'anycpu32bitpreferred' platform can only be used with EXE targets. You must use 'anycpu' instead. - - Unmatched '{0}' - '{0}' が対応しません + + {0} '{1}' not found in assembly '{2}'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. + {0} '{1}' not found in assembly '{2}'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - - Unmatched '[|' - '[|' が対応しません + + {0} '{1}' not found in type '{2}' from assembly '{3}'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. + {0} '{1}' not found in type '{2}' from assembly '{3}'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - - Unmatched '{{' - '{{' が対応しません + + Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. + Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. - - Field bindings must have the form 'id = expr;' - フィールドの束縛は 'id = expr;' という形式にする必要があります + + Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match. + Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match. - - This member is not permitted in an object implementation - オブジェクトの実装では、このメンバーは使用できません + + Used to verify code during debugging. + Used to verify code during debugging. - - Missing function body - 関数の本体がありません + + Used as the name of the base class object. + Used as the name of the base class object. - - Syntax error in labelled type argument - ラベル付き型引数に構文エラーが見つかりました + + In verbose syntax, indicates the start of a code block. + In verbose syntax, indicates the start of a code block. - - Unexpected infix operator in type expression - 型式に予期しない挿入演算子が見つかりました: + + Converts a type to type that is higher in the hierarchy. + Converts a type to type that is higher in the hierarchy. - - The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead - 構文 '(typ,...,typ) ident' は F# コードでは使用されません。代わりに、'ident<typ,...,typ>' を使用してください + + In verbose syntax, indicates the start of a class definition. + In verbose syntax, indicates the start of a class definition. - - Invalid literal in type - 型のリテラルが無効です + + Indicates an implementation of an abstract method; used together with an abstract method declaration to create a virtual method. + Indicates an implementation of an abstract method; used together with an abstract method declaration to create a virtual method. - - Unexpected infix operator in unit-of-measure expression. Legal operators are '*', '/' and '^'. - 単位式に予期しない挿入演算子が見つかりました。正しい演算子は '*'、'/'、および '^' です。 + + Used to declare a delegate. + Used to declare a delegate. - - Unexpected integer literal in unit-of-measure expression - 単位式に予期しない整数リテラルが見つかりました: + + Used in looping constructs or to execute imperative code. + Used in looping constructs or to execute imperative code. - - Syntax error: unexpected type parameter specification - 構文エラー: 予期しない型パラメーターが指定されました + + In verbose syntax, indicates the end of a block of code in a looping expression. + In verbose syntax, indicates the end of a block of code in a looping expression. - - Mismatched quotation operator name, beginning with '{0}' - '{0}' で始まる演算子名の引用符が対応しません + + Used to convert to a type that is lower in the inheritance chain. + Used to convert to a type that is lower in the inheritance chain. - - Active pattern case identifiers must begin with an uppercase letter - アクティブ パターンのケース識別子は先頭を大文字にする必要があります + + In a for expression, used when counting in reverse. + In a for expression, used when counting in reverse. - - The '|' character is not permitted in active pattern case identifiers - 文字 ' |' は、アクティブなパターンのケース識別子では許可されていません + + Converts a type to a type that is lower in the hierarchy. + Converts a type to a type that is lower in the hierarchy. - - Denominator must not be 0 in unit-of-measure exponent - 分母は単位指数で、0 以外でなければなりません + + Used in conditional branching. A short form of else if. + Used in conditional branching. A short form of else if. - - No '=' symbol should follow a 'namespace' declaration - 'namespace' 宣言の後に '=' 記号は指定できません + + Used in conditional branching. + Used in conditional branching. - - The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end' - F# コードでは ... 'module ... = struct .. end' という構文は使用されません。'module ... = begin .. end' を使用してください。 + + In type definitions and type extensions, indicates the end of a section of member definitions. In verbose syntax, used to specify the end of a code block that starts with the begin keyword. + In type definitions and type extensions, indicates the end of a section of member definitions. In verbose syntax, used to specify the end of a code block that starts with the begin keyword. - - The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end' - F# コードでは 'module ... : sig .. end' という構文は使用されません。'module ... = begin .. end' を使用してください。 + + Used to declare an exception type. + Used to declare an exception type. - - A static field was used where an instance field is expected - インスタンス フィールドが必要な場所に静的フィールドが使用されました + + Indicates that a declared program element is defined in another binary or assembly. + Indicates that a declared program element is defined in another binary or assembly. - - Method '{0}' is not accessible from this code location - メソッド '{0}' はこのコードの場所からアクセスできません + + Used together with try to introduce a block of code that executes regardless of whether an exception occurs. + Used together with try to introduce a block of code that executes regardless of whether an exception occurs. - - Implicit product of measures following / - / に続く暗黙的な単位の積 + + Used in looping constructs. + Used in looping constructs. - - Unexpected SynMeasure.Anon - 予期しない SynMeasure.Anon です: + + Used in lambda expressions, also known as anonymous functions. + Used in lambda expressions, also known as anonymous functions. - - Non-zero constants cannot have generic units. For generic zero, write 0.0<_>. - ゼロではない定数に汎用ユニットを含めることはできません。汎用ゼロの場合、0.0<_> とします。 + + Used as a shorter alternative to the fun keyword and a match expression in a lambda expression that has pattern matching on a single argument. + Used as a shorter alternative to the fun keyword and a match expression in a lambda expression that has pattern matching on a single argument. - - In sequence expressions, results are generated using 'yield' - シーケンス式の結果は、'yield' を使用して生成されます + + Used to reference the top-level .NET namespace. + Used to reference the top-level .NET namespace. - - Unexpected big rational constant - 有理定数が大きすぎます: + + Used in conditional branching constructs. + Used in conditional branching constructs. - - Units-of-measure supported only on float, float32, decimal and signed integer types - float 型、float32 型、decimal 型、および符号付き整数型でのみサポートされる単位です + + Used for sequence expressions and, in verbose syntax, to separate expressions from bindings. + Used for sequence expressions and, in verbose syntax, to separate expressions from bindings. - - Unexpected Const_uint16array - 予期しない Const_uint16array です: + + Used to specify a base class or base interface. + Used to specify a base class or base interface. - - Unexpected Const_bytearray - 予期しない Const_bytearray です: + + Used to indicate a function that should be integrated directly into the caller's code. + Used to indicate a function that should be integrated directly into the caller's code. - - A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type' - 属性のパラメーターにも名前を指定する必要があります。例: '[<Attribute>] Name : Type' + + Used to declare and implement interfaces. + Used to declare and implement interfaces. - - Return values cannot have names - 戻り値には名前を指定できません + + Used to specify that a member is visible inside an assembly but not outside it. + Used to specify that a member is visible inside an assembly but not outside it. - - MemberKind.PropertyGetSet only expected in parse trees - 解析ツリーに使用できるのは MemberKind.PropertyGetSet のみです + + Used to specify a computation that is to be performed only when a result is needed. + Used to specify a computation that is to be performed only when a result is needed. - - Namespaces cannot contain values. Consider using a module to hold your value declarations. - 名前空間に値を含めることはできません。値の宣言を保持するモジュールを使用してください。 + + Assigns a value to a variable. + Assigns a value to a variable. - - Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined. Consider using a module to hold declarations of extension members. - 型を定義したファイルおよび名前空間宣言グループの場合を除き、名前空間に拡張メンバーを含めることはできません。拡張メンバーの宣言を保持するモジュールを使用してください。 + + Used to associate, or bind, a name to a value or function. + Used to associate, or bind, a name to a value or function. - - Multiple visibility attributes have been specified for this identifier - この識別子に複数の表示範囲属性が指定されました + + Used in computation expressions to bind a name to the result of another computation expression. + Used in computation expressions to bind a name to the result of another computation expression. - - Multiple visibility attributes have been specified for this identifier. 'let' bindings in classes are always private, as are any 'let' bindings inside expressions. - この識別子に複数の表示範囲属性が指定されました。式内のすべての 'let' 束縛と同様に、クラス内の 'let' 束縛は常にプライベートです。 + + Used to branch by comparing a value to a pattern. + Used to branch by comparing a value to a pattern. - - The name '({0})' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name '{1}' instead. - 名前 '({0})' はメンバー名として使用しないでください。型の比較セマンティクスを定義するには、'System.IComparable' インターフェイスを実装してください。他の CLI 言語から使用するために静的メンバーを定義する場合、代わりに '{1}' という名前を使用してください。 + + Used in computation expressions to pattern match directly over the result of another computation expression. + Used in computation expressions to pattern match directly over the result of another computation expression. - - The name '({0})' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name '{1}' instead. - 名前 '({0})' はメンバー名として使用しないでください。型の等値セマンティクスを定義するには、'Object.Equals' メンバーをオーバーライドしてください。他の CLI 言語から使用するために静的メンバーを定義する場合、代わりに '{1}' という名前を使用してください。 + + Used to declare a property or method in an object type. + Used to declare a property or method in an object type. - - The name '({0})' should not be used as a member name. If defining a static member for use from other CLI languages then use the name '{1}' instead. - 名前 '({0})' はメンバー名として使用しないでください。他の CLI 言語から使用するために静的メンバーを定義する場合、代わりに '{1}' という名前を使用してください。 + + Used to associate a name with a group of related types, values, and functions, to logically separate it from other code. + Used to associate a name with a group of related types, values, and functions, to logically separate it from other code. - - The name '({0})' should not be used as a member name because it is given a standard definition in the F# library over fixed types - 名前 '({0})' はメンバー名として使用しないでください。固定の型に関して、F# ライブラリではこの名前は標準的な定義が指定されています。 + + Used to declare a variable, that is, a value that can be changed. + Used to declare a variable, that is, a value that can be changed. - - The '{0}' operator should not normally be redefined. To define overloaded comparison semantics for a particular type, implement the 'System.IComparable' interface in the definition of that type. - 通常、'{0}' 演算子は再定義できません。特定の型について、オーバーロードされた比較セマンティクスを定義するには、その型の定義で 'System.IComparable' インターフェイスを実装してください。 + + Used to associate a name with a group of related types and modules, to logically separate it from other code. + Used to associate a name with a group of related types and modules, to logically separate it from other code. - - The '{0}' operator should not normally be redefined. To define equality semantics for a type, override the 'Object.Equals' member in the definition of that type. - 通常、'{0}' 演算子は再定義できません。型の等値セマンティクスを定義するには、その型の定義で 'Object.Equals' メンバーをオーバーライドしてください。 + + Used to declare, define, or invoke a constructor that creates or that can create an object. Also used in generic parameter constraints to indicate that a type must have a certain constructor. + Used to declare, define, or invoke a constructor that creates or that can create an object. Also used in generic parameter constraints to indicate that a type must have a certain constructor. - - The '{0}' operator should not normally be redefined. Consider using a different operator name - 通常、'{0}' 演算子は再定義できません。別の演算子名を使用してください。 + + Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. + Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. - - The '{0}' operator cannot be redefined. Consider using a different operator name - '{0}' 演算子は再定義できません。別の演算子名を使用してください。 + + Indicates the absence of an object. Also used in generic parameter constraints. + Indicates the absence of an object. Also used in generic parameter constraints. - - Expected module or namespace parent {0} - モジュールまたは名前空間の親 {0} を指定してください + + Used in discriminated unions to indicate the type of categories of values, and in delegate and exception declarations. + Used in discriminated unions to indicate the type of categories of values, and in delegate and exception declarations. - - The struct, record or union type '{0}' implements the interface 'System.IComparable' explicitly. You must apply the 'CustomComparison' attribute to the type. - 構造体型、レコード型、または共用体型の '{0}' はインターフェイス 'System.IComparable' を明示的に実装しています。この型には 'CustomComparison' 属性を適用する必要があります。 + + Used to make the contents of a namespace or module available without qualification. + Used to make the contents of a namespace or module available without qualification. - - The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable. - 構造体型、レコード型、または共用体型の '{0}' はインターフェース 'System.IComparable<_>' を明示的に実装しています。この型には 'CustomComparison' 属性を適用し、さらに整合性のある非ジェネリック インターフェース System.IComparable の実装を用意する必要があります。 + + Used with Boolean conditions as a Boolean or operator. Equivalent to ||. Also used in member constraints. + Used with Boolean conditions as a Boolean or operator. Equivalent to ||. Also used in member constraints. - - The struct, record or union type '{0}' implements the interface 'System.IStructuralComparable' explicitly. Apply the 'CustomComparison' attribute to the type. - 構造体型、レコード型、または共用体型の '{0}' はインターフェイス 'System.IStructuralComparable' を明示的に実装しています。この型には 'CustomComparison' 属性を適用してください。 + + Used to implement a version of an abstract or virtual method that differs from the base version. + Used to implement a version of an abstract or virtual method that differs from the base version. - - This record contains fields from inconsistent types - このレコードには、相反する型からのフィールドが含まれます + + Restricts access to a member to code in the same type or module. + Restricts access to a member to code in the same type or module. - - DLLImport stubs cannot be inlined - DLLImport スタブはインライン展開できません + + Allows access to a member from outside the type. + Allows access to a member from outside the type. - - Structs may only bind a 'this' parameter at member declarations - 構造体は、メンバーの宣言の 'this' パラメーターのみをバインドできます + + Used to indicate that a function is recursive. + Used to indicate that a function is recursive. - - Unexpected expression at recursive inference point - 再帰的推論ポイントに予期しない式があります: + + Used to provide a value for the result of the containing computation expression. + Used to provide a value for the result of the containing computation expression. - - This code is less generic than required by its annotations because the explicit type variable '{0}' could not be generalized. It was constrained to be '{1}'. - 明示的な型変数 '{0}' をジェネリック化できないため、このコードは、注釈に必要な総称性よりも低くなります。このコードは '{1}' に制限されました。 + + Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression. + Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression. - - One or more of the explicit class or function type variables for this binding could not be generalized, because they were constrained to other types - この束縛に関する 1 つまたは複数の明示的クラスまたは関数型の変数は、他の型に制限されているため、ジェネリック化できませんでした。 + + In function types, delimits arguments and return values. Yields an expression (in sequence expressions); equivalent to the yield keyword. Used in match expressions + In function types, delimits arguments and return values. Yields an expression (in sequence expressions); equivalent to the yield keyword. Used in match expressions - - A generic type parameter has been used in a way that constrains it to always be '{0}' - 常に '{0}' であるという制約があるジェネリック型パラメーターが使用されました + + Used in query expressions to specify what fields or columns to extract. Note that this is a contextual keyword, which means that it is not actually a reserved word and it only acts like a keyword in appropriate context. + Used in query expressions to specify what fields or columns to extract. Note that this is a contextual keyword, which means that it is not actually a reserved word and it only acts like a keyword in appropriate context. - - This type parameter has been used in a way that constrains it to always be '{0}' - 常に '{0}' であるという制約がある型パラメーターが使用されました + + Used to indicate a method or property that can be called without an instance of a type, or a value member that is shared among all instances of a type. + Used to indicate a method or property that can be called without an instance of a type, or a value member that is shared among all instances of a type. - - The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x). - この値に推論される型パラメーターは、型の省略形を無効にすると安定しません。型パラメーターをドロップまたは並び替える型の省略形を使用していることが原因です (例: \n\ttype taggedInt<'a> = int または\n\ttype swap<'a,'b> = 'b * 'a)。\nこの値の型パラメーターを明示的に宣言してください (例: \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x))。 + + Used to declare a structure type. Also used in generic parameter constraints. Used for OCaml compatibility in module definitions. + Used to declare a structure type. Also used in generic parameter constraints. Used for OCaml compatibility in module definitions. - - Explicit type parameters may only be used on module or member bindings - 明示的な型パラメーターを使用できるのは、モジュールまたはメンバーの束縛のみです + + Used in conditional expressions. Also used to perform side effects after object construction. + Used in conditional expressions. Also used to perform side effects after object construction. - - You must explicitly declare either all or no type parameters when overriding a generic abstract method - ジェネリック抽象メソッドをオーバーライドする場合、明示的にすべての型パラメーターを宣言するか、まったく宣言しないでください + + Used in for loops to indicate a range. + Used in for loops to indicate a range. - - The field labels and expected type of this record expression or pattern do not uniquely determine a corresponding record type - フィールド ラベルとこのレコード式またはパターンの型だけでは、対応するレコード型を一意に決定できません + + Used as a Boolean literal. + Used as a Boolean literal. - - The field '{0}' appears twice in this record expression or pattern - のレコード式またはパターンに、フィールド '{0}' が 2 回出現します + + Used to introduce a block of code that might generate an exception. Used together with with or finally. + Used to introduce a block of code that might generate an exception. Used together with with or finally. - - Unknown union case - 不明な共用体ケースです + + Used to declare a class, record, structure, discriminated union, enumeration type, unit of measure, or type abbreviation. + Used to declare a class, record, structure, discriminated union, enumeration type, unit of measure, or type abbreviation. - - This code is not sufficiently generic. The type variable {0} could not be generalized because it would escape its scope. - このコードの総称性が十分ではありません。スコープが回避されるため、型変数 {0} をジェネリック化することはできません。 + + Delimits a typed code quotation. + Delimits a typed code quotation. - - A property cannot have explicit type parameters. Consider using a method instead. - プロパティには明示的な型パラメーターを使用できません。代わりにメソッドを使用してください。 + + Delimits a untyped code quotation. + Delimits a untyped code quotation. - - A constructor cannot have explicit type parameters. Consider using a static construction method instead. - コンストラクターには明示的な型パラメーターを使用できません。代わりに静的構築のメソッドを使用してください。 + + Used to convert to a type that is higher in the inheritance chain. + Used to convert to a type that is higher in the inheritance chain. - - This instance member needs a parameter to represent the object being invoked. Make the member static or use the notation 'member x.Member(args) = ...'. - このインスタンス メンバーには、呼び出されるオブジェクトを表すパラメーターが必要です。メンバーを静的にするか、'member x.Member(args) = ...' という表記を使用してください。 + + Used instead of let for values that implement IDisposable + Used instead of let for values that implement IDisposable - - Unexpected source-level property specification in syntax tree - 構文ツリーに予期しないソースレベルのプロパティの指定があります: + + Used instead of let! in computation expressions for computation expression results that implement IDisposable. + Used instead of let! in computation expressions for computation expression results that implement IDisposable. - - A static initializer requires an argument - 静的初期化子には引数が必要です + + Used in a signature to indicate a value, or in a type to declare a member, in limited situations. + Used in a signature to indicate a value, or in a type to declare a member, in limited situations. - - An object constructor requires an argument - オブジェクト コンストラクターには引数が必要です + + Indicates the .NET void type. Used when interoperating with other .NET languages. + Indicates the .NET void type. Used when interoperating with other .NET languages. - - This static member should not have a 'this' parameter. Consider using the notation 'member Member(args) = ...'. - この静的メンバーに 'this' パラメーターを指定することはできません。'member Member(args) = ...' という表記を使用してください。 + + Used for Boolean conditions (when guards) on pattern matches and to introduce a constraint clause for a generic type parameter. + Used for Boolean conditions (when guards) on pattern matches and to introduce a constraint clause for a generic type parameter. - - An explicit static initializer should use the syntax 'static new(args) = expr' - 明示的な静的初期化子には 'static new(args) = expr' という構文を使用してください + + Introduces a looping construct. + Introduces a looping construct. - - An explicit object constructor should use the syntax 'new(args) = expr' - 明示的なオブジェクト コンストラクターには 'new(args) = expr' という構文を使用してください + + Used together with the match keyword in pattern matching expressions. Also used in object expressions, record copying expressions, and type extensions to introduce member definitions, and to introduce exception handlers. + Used together with the match keyword in pattern matching expressions. Also used in object expressions, record copying expressions, and type extensions to introduce member definitions, and to introduce exception handlers. - - Unexpected source-level property specification - 予期しないソースレベルのプロパティの指定があります: + + Used in a sequence expression to produce a value for a sequence. + Used in a sequence expression to produce a value for a sequence. - - This form of object expression is not used in F#. Use 'member this.MemberName ... = ...' to define member implementations in object expressions. - この形式のオブジェクト式は F# では使用されません。オブジェクト式でメンバーの実装を定義するには、'member this.MemberName ... = ...' を使用してください。 + + Used in a computation expression to append the result of a given computation expression to a collection of results for the containing computation expression. + Used in a computation expression to append the result of a given computation expression to a collection of results for the containing computation expression. - - Invalid declaration - 宣言が無効です + + Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters. + Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters. - - Attributes are not allowed within patterns - パターン内では属性を使用できません + + This byte array literal contains characters that do not encode as a single byte + This byte array literal contains characters that do not encode as a single byte - - The generic function '{0}' must be given explicit type argument(s) - ジェネリック関数 '{0}' に明示的な型引数を指定する必要があります + + a byte string may not be interpolated + a byte string may not be interpolated - - The method or function '{0}' should not be given explicit type argument(s) because it does not declare its type parameters explicitly - メソッドまたは関数 '{0}' は、型パラメーターを明示的に宣言していないため、明示的な型引数を指定しないでください + + '{0}' is not permitted as a character in operator names and is reserved for future use + '{0}' is not permitted as a character in operator names and is reserved for future use - - This value, type or method expects {0} type parameter(s) but was given {1} - この値、型、またはメソッドには {0} 型パラメーターを使用しますが、{1} が指定されました + + #! may only appear as the first line at the start of a file. + #! may only appear as the first line at the start of a file. - - The default, zero-initializing constructor of a struct type may only be used if all the fields of the struct type admit default initialization - 構造体型のすべてのフィールドが既定の初期化を許可している場合のみ、既定である、ゼロで初期化した構造型のコンストラクターを使用できます。 + + #else directive must appear as the first non-whitespace character on a line + #else directive must appear as the first non-whitespace character on a line - - Couldn't find Dispose on IDisposable, or it was overloaded - IDisposable に Dispose が見つからないか、Dispose がオーバーロードされました + + #else has no matching #if + #else has no matching #if - - This value is not a literal and cannot be used in a pattern - この値はリテラルではないため、パターンに使用できません + + #endif directive must appear as the first non-whitespace character on a line + #endif directive must appear as the first non-whitespace character on a line - - This field is readonly - このフィールドは読み取り専用です + + #endif required for #else + #endif required for #else - - Named arguments must appear after all other arguments - 名前付き引数は、その他の引数の後ろに指定してください + + #endif has no matching #if + #endif has no matching #if - - This function value is being used to construct a delegate type whose signature includes a byref argument. You must use an explicit lambda expression taking {0} arguments. - この関数値は、byref 引数を含むシグネチャのデリゲート型を構築するために使用されます。{0} 個の引数を使用する明示的なラムダ式を使用する必要があります。 + + #if directive must appear as the first non-whitespace character on a line + #if directive must appear as the first non-whitespace character on a line - - The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method - 型 '{0}' は、この構文で列挙できる値の型ではありません。つまり、seq<_>, IEnumerable<_> とも IEnumerable とも互換性がなく、GetEnumerator メソッドがありません + + #if directive should be immediately followed by an identifier + #if directive should be immediately followed by an identifier - - This recursive binding uses an invalid mixture of recursive forms - この再帰的束縛に使用されている再帰形式の混合は無効です + + Identifiers followed by '{0}' are reserved for future use + Identifiers followed by '{0}' are reserved for future use - - This is not a valid object construction expression. Explicit object constructors must either call an alternate constructor or initialize all fields of the object and specify a call to a super class constructor. - これは有効なオブジェクト構築式ではありません。明示的なオブジェクト コンストラクターでは、代わりのコンストラクターを呼び出すかまたはオブジェクトのすべてのフィールドを初期化し、スーパークラス コンストラクターの呼び出しを指定する必要があります。 + + Consider using a file with extension '.ml' or '.mli' instead + Consider using a file with extension '.ml' or '.mli' instead - - Invalid constraint - 制約が無効です + + This is not a valid byte literal + This is not a valid byte literal - - Invalid constraint: the type used for the constraint is sealed, which means the constraint could only be satisfied by at most one solution - 無効な制約: 制約に使用された型がシールドです。つまり、制約を満たすことができるのは、最高でも 1 つの解です。 + + This is not a valid character literal + This is not a valid character literal - - An 'enum' constraint must be of the form 'enum<type>' - 'enum' 制約の形式は 'enum<type>' にする必要があります + + Invalid floating point number + Invalid floating point number - - 'new' constraints must take one argument of type 'unit' and return the constructed type - 'new' 制約は型 'unit' の引数を 1 つ指定し、構築された型を返す必要があります + + Invalid line number: '{0}' + Invalid line number: '{0}' - - This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'. - このプロパティに無効な型があります。複数のインデクサー引数を取るプロパティの型の形式は 'ty1 * ty2 -> ty3' でなければなりません。関数を返すプロパティの型の形式は '(ty1 -> ty2)' にする必要があります。 + + This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0o1, 0b1, 1l (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger). + This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0o1, 0b1, 1l (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger). - - Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute. - 必要なのは型パラメーターではなく測定単位パラメーターです。明示的な測定単位パラメーターは、[<Measure>] 属性でマークされている必要があります。 + + \U{0} is not a valid Unicode character escape sequence + \U{0} is not a valid Unicode character escape sequence - - Expected type parameter, not unit-of-measure parameter - 単位パラメーターではなく型パラメーターを指定してください + + This number is outside the allowable range for decimal literals + This number is outside the allowable range for decimal literals - - Expected type, not unit-of-measure - 単位ではなく型を指定してください + + This number is outside the allowable range for 32-bit floats + This number is outside the allowable range for 32-bit floats - - Expected unit-of-measure, not type - 型ではなく単位を指定してください + + This number is outside the allowable range for 8-bit signed integers + This number is outside the allowable range for 8-bit signed integers - - Units-of-measure cannot be used as prefix arguments to a type. Rewrite as postfix arguments in angle brackets. - 型に対するプレフィックス引数として単位を使用することはできません。山かっこで囲んだ後置引数として書き換えてください。 + + This number is outside the allowable range for hexadecimal 8-bit signed integers + This number is outside the allowable range for hexadecimal 8-bit signed integers - - Unit-of-measure cannot be used in type constructor application - 型コンストラクター応用には単位を使用できません + + This number is outside the allowable range for 8-bit unsigned integers + This number is outside the allowable range for 8-bit unsigned integers - - This control construct may only be used if the computation expression builder defines a '{0}' method - この制御コンストラクトを使用できるのは、コンピュテーション式ビルダーが '{0}' メソッドを定義する場合のみです + + This number is outside the allowable range for this integer type + This number is outside the allowable range for this integer type - - This type has no nested types - この型に入れ子の型はありません + + This number is outside the allowable range for signed native integers + This number is outside the allowable range for signed native integers - - Unexpected {0} in type expression - 型式に予期しない {0} があります: + + This number is outside the allowable range for unsigned native integers + This number is outside the allowable range for unsigned native integers - - Type parameter cannot be used as type constructor - 型パラメーターは型コンストラクターとして使用できません + + This number is outside the allowable range for 16-bit signed integers + This number is outside the allowable range for 16-bit signed integers - - Illegal syntax in type expression - 型式の構文が正しくありません + + This number is outside the allowable range for 16-bit unsigned integers + This number is outside the allowable range for 16-bit unsigned integers - - Anonymous unit-of-measure cannot be nested inside another unit-of-measure expression - 匿名の単位は、別の単位式の中に入れ子にすることはできません + + This number is outside the allowable range for 64-bit signed integers + This number is outside the allowable range for 64-bit signed integers - - Anonymous type variables are not permitted in this declaration - この宣言で匿名型の変数は使用できません + + This number is outside the allowable range for 64-bit unsigned integers + This number is outside the allowable range for 64-bit unsigned integers - - Unexpected / in type - 型に予期しない / があります: + + This number is outside the allowable range for 32-bit signed integers + This number is outside the allowable range for 32-bit signed integers - - Unexpected type arguments - 予期しない型引数です: + + This number is outside the allowable range for 32-bit unsigned integers + This number is outside the allowable range for 32-bit unsigned integers - - Optional arguments are only permitted on type members - 型メンバーにはオプションの引数のみを使用できます + + A '}}' character must be escaped (by doubling) in an interpolated string. + A '}}' character must be escaped (by doubling) in an interpolated string. - - Name '{0}' not bound in pattern context - 名前 '{0}' がパターン コンテキストにバインドされていません + + Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal. + Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal. - - Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause. - プリミティブではない数値リテラル定数は、NumericLiteral モジュールを介して複数の型にマップされる可能性があるため、パターン マッチには使用できません。変数で置き換え、match 句の末尾に 'when <variable> = <constant>' を使用してください。 + + TABs are not allowed in F# code unless the #indent \"off\" option is used + TABs are not allowed in F# code unless the #indent \"off\" option is used - - Type arguments cannot be specified here - ここで型引数は指定できません + + This Unicode encoding is only valid in string literals + This Unicode encoding is only valid in string literals - - Only active patterns returning exactly one result may accept arguments - 結果を 1 つだけ返すアクティブ パターンのみが、引数を使用できます + + This token is reserved for future use + This token is reserved for future use - - Invalid argument to parameterized pattern label - パラメーター化されたパターン ラベルに無効な引数が指定されました + + Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression. + Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression. - - Internal error. Invalid index into active pattern array - 内部エラー。アクティブ パターン配列への無効なインデックスです。 + + Unexpected character '{0}' + Unexpected character '{0}' - - This union case does not take arguments - この共用体ケースに引数は指定できません + + Syntax error. Wrong nested #endif, unexpected tokens before it. + Syntax error. Wrong nested #endif, unexpected tokens before it. - - This union case takes one argument - この共用体ケースには 1 つの引数を指定します + + The indentation of this 'in' token is incorrect with respect to the corresponding 'let' + The indentation of this 'in' token is incorrect with respect to the corresponding 'let' - - This union case expects {0} arguments in tupled form - この共用体ケースにはタプル形式の引数を {0} 個指定してください + + The '|' tokens separating rules of this pattern match are misaligned by one column. Consider realigning your code or using further indentation. + The '|' tokens separating rules of this pattern match are misaligned by one column. Consider realigning your code or using further indentation. - - Field '{0}' is not static - フィールド '{0}' は静的ではありません + + Possible incorrect indentation: this token is offside of context started at position {0}. Try indenting this token further or using standard formatting conventions. + Possible incorrect indentation: this token is offside of context started at position {0}. Try indenting this token further or using standard formatting conventions. - - This field is not a literal and cannot be used in a pattern - このフィールドはリテラルではないため、パターンに使用できません + + The identifier '{0}' is reserved for future use by F# + The identifier '{0}' is reserved for future use by F# - - This is not a variable, constant, active recognizer or literal - これは変数、定数、アクティブ レコグナイザー、またはリテラルではありません + + Identifiers containing '@' are reserved for use in F# code generation + Identifiers containing '@' are reserved for use in F# code generation - - This is not a valid pattern - これは有効なパターンではありません + + All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'. + All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'. - - Character range matches have been removed in F#. Consider using a 'when' pattern guard instead. - F# では文字範囲の一致が削除されました。代わりに 'when' パターン ガードを使用してください。 + + (loading description...) + (loading description...) - - Illegal pattern - パターンが正しくありません + + Infix operator member '{0}' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... + Infix operator member '{0}' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - - Syntax error - unexpected '?' symbol - 構文エラー - 予期しない '?' 記号です + + Infix operator member '{0}' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... + Infix operator member '{0}' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - - Expected {0} expressions, got {1} - {0} 式を指定する必要がありますが、{1} が指定されました + + Infix operator member '{0}' has {1} initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... + Infix operator member '{0}' has {1} initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - - TcExprUndelayed: delayed - TcExprUndelayed: 遅延しました + + Infix operator member '{0}' has {1} initial argument(s). Expected a tuple of 3 arguments + Infix operator member '{0}' has {1} initial argument(s). Expected a tuple of 3 arguments - - This expression form may only be used in sequence and computation expressions - この式の形式を使用できるのは、シーケンス式またはコンピュテーション式のみです + + Method or object constructor '{0}' is not static + Method or object constructor '{0}' is not static - - Invalid object expression. Objects without overrides or interfaces should use the expression form 'new Type(args)' without braces. - オブジェクト式が無効です。オーバーライドまたはインターフェイスがないオブジェクトには、かっこなしで 'new Type(args)' という形式の式を使用してください。 + + This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'. + This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'. - - Invalid object, sequence or record expression - オブジェクト式、シーケンス式、またはレコード式が無効です + + This construct is for ML compatibility. {0}. You can disable this warning by using '--mlcompatibility' or '--nowarn:62'. + This construct is for ML compatibility. {0}. You can disable this warning by using '--mlcompatibility' or '--nowarn:62'. - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' - 無効なレコード、シーケンス式、またはコンピュテーション式です。シーケンス式は 'seq {{ ... }}' という形式にしてください。 + + More than one Invoke method found for delegate type + More than one Invoke method found for delegate type - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - このリスト式または配列式には、'if ... then ... else' という形式の要素が含まれます。この式をかっこで囲んでリストまたは配列の個別の要素であることを示し、シーケンス式を使用して生成されたリストとこのリストを区別してください。 + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. - - Unable to parse format string '{0}' - 書式指定文字列 '{0}' を解析できません + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. - - This list expression exceeds the maximum size for list literals. Use an array for larger literals and call Array.ToList. - このリスト式は、リスト リテラルの最大サイズを超えています。より大きなリテラルの配列を使用し、Array.ToList を呼び出してください。 + + + 1 overload + + 1 overload - - The expression form 'expr then expr' may only be used as part of an explicit object constructor - 明示的なオブジェクト コンストラクターの一部としてのみ、'expr then expr' という形式の式を使用できます + + + {0} overloads + + {0} overloads - - Named arguments cannot be given to member trait calls - 名前付き引数をメンバーの特徴 (trait) の呼び出しに指定することはできません + + Files in libraries or multiple-file applications must begin with a namespace or module declaration. When using a module declaration at the start of a file the '=' sign is not allowed. If this is a top-level module, consider removing the = to resolve this error. + Files in libraries or multiple-file applications must begin with a namespace or module declaration. When using a module declaration at the start of a file the '=' sign is not allowed. If this is a top-level module, consider removing the = to resolve this error. - - This is not a valid name for an enumeration case - 列挙型のケースの有効な名前ではありません + + No Invoke methods found for delegate type + No Invoke methods found for delegate type - - This field is not mutable - このフィールドは変更可能ではありません + + This value is not a function and cannot be applied. + This value is not a function and cannot be applied. - - This construct may only be used within list, array and sequence expressions, e.g. expressions of the form 'seq {{ ... }}', '[ ... ]' or '[| ... |]'. These use the syntax 'for ... in ... do ... yield...' to generate elements - このコンストラクトは、リスト式、配列式、およびシーケンス式内でのみ使用できます (たとえば、'seq {{ ... }}'、'[ ... ]'、'[| ... |]' などの形式の式)。この場合、要素を生成するには 'for ... in ... do ... yield...' という構文を使用します。 + + This value is not a function and cannot be applied. Did you forget to terminate a declaration? + This value is not a function and cannot be applied. Did you forget to terminate a declaration? - - This construct may only be used within computation expressions. To return a value from an ordinary function simply write the expression without 'return'. - このコンストラクトはコンピュテーション式内でのみ使用できます。通常の関数から値を返すには、'return' を使用せずに式を記述してください。 + + This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.[index] instead? + This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.[index] instead? - - This construct may only be used within sequence or computation expressions - このコンストラクトはシーケンス式およびコンピュテーション式内でのみ使用できます + + This value is not a function and cannot be applied. Did you intend to access the indexer via {0}.[index] instead? + This value is not a function and cannot be applied. Did you intend to access the indexer via {0}.[index] instead? - - This construct may only be used within computation expressions - このコンストラクトはコンピュテーション式内でのみ使用できます + + 'global' may only be used as the first name in a qualified path + 'global' may only be used as the first name in a qualified path - - Invalid indexer expression - インデクサー式が無効です + + Invalid expression '{0}' + Invalid expression '{0}' - - The operator 'expr.[idx]' has been used on an object of indeterminate type based on information prior to this program point. Consider adding further type constraints - このプログラムのポイントよりも前の情報に基づいた不確定の型のオブジェクトに、演算子 'expr.[idx]' が使用されました。型の制約を増やしてください。 + + Invalid field label + Invalid field label - - Cannot inherit from a variable type - 変数型から継承できません + + Invalid module/expression/type + Invalid module/expression/type - - Calls to object constructors on type parameters cannot be given arguments - 型パラメーター上のオブジェクト コンストラクターの呼び出しに引数を指定することはできません + + This is not a constructor or literal, or a constructor is being used incorrectly + This is not a constructor or literal, or a constructor is being used incorrectly - - The 'CompiledName' attribute cannot be used with this language element - この言語要素では、'CompiledName' 属性を使用できません + + No constructors are available for the type '{0}' + No constructors are available for the type '{0}' - - '{0}' may only be used with named types - '{0}' を使用できるのは、名前付き型のみです + + The record type '{0}' does not contain a label '{1}'. + The record type '{0}' does not contain a label '{1}'. - - 'inherit' cannot be used on interface types. Consider implementing the interface by using 'interface ... with ... end' instead. - インターフェイス型に 'inherit' は使用できません。代わりに 'interface ... with ... end' を使用してインターフェイスを実装してください。 + + The record type for the record field '{0}' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('{1}') in the name you are using. + The record type for the record field '{0}' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('{1}') in the name you are using. - - 'new' cannot be used on interface types. Consider using an object expression '{{ new ... with ... }}' instead. - インターフェイス型では 'new' を使用できません。代わりにオブジェクト式 '{{ new ... with ... }}' を使用してください。 + + The instantiation of the generic type '{0}' is missing and can't be inferred from the arguments or return type of this member. Consider providing a type instantiation when accessing this type, e.g. '{1}'. + The instantiation of the generic type '{0}' is missing and can't be inferred from the arguments or return type of this member. Consider providing a type instantiation when accessing this type, e.g. '{1}'. - - Instances of this type cannot be created since it has been marked abstract or not all methods have been given implementations. Consider using an object expression '{{ new ... with ... }}' instead. - abstract とマークされているか、一部のメソッドが実装されていないため、この型のインスタンスを作成できません。代わりにオブジェクト式 '{{ new ... with ... }}' を使用してください。 + + Multiple types exist called '{0}', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. '{1}'. + Multiple types exist called '{0}', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. '{1}'. - - It is recommended that objects supporting the IDisposable interface are created using the syntax 'new Type(args)', rather than 'Type(args)' or 'Type' as a function value representing the constructor, to indicate that resources may be owned by the generated value - IDisposable インターフェイスをサポートするオブジェクトは、コンストラクターを表す関数値として 'Type(args)' や 'Type' ではなく 'new Type(args)' の構文を使用して作成することをお勧めします。これは、リソースが生成された値に所有される可能性があることを示すためです + + Unexpected empty long identifier + Unexpected empty long identifier - - '{0}' may only be used to construct object types - '{0}' は、オブジェクト型を構築するときにのみ使用できます + + The union type for union case '{0}' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('{1}') in the name you are using. + The union type for union case '{0}' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('{1}') in the name you are using. - - Constructors for the type '{0}' must directly or indirectly call its implicit object constructor. Use a call to the implicit object constructor instead of a record expression. - 型 '{0}' のコンストラクターはその暗黙的なオブジェクト コンストラクターを直接、または間接的に呼び出す必要があります。レコード式ではなく、暗黙的なオブジェクト コンストラクターの呼び出しを使用してください。 + + Failed to inline the value '{0}' marked 'inline', perhaps because a recursive value was marked 'inline' + Failed to inline the value '{0}' marked 'inline', perhaps because a recursive value was marked 'inline' - - The field '{0}' has been given a value, but is not present in the type '{1}' - フィールド '{0}' に値が指定されましたが、このフィールドは型 '{1}' に存在しません + + Local value {0} not found during optimization + Local value {0} not found during optimization - - No assignment given for field '{0}' of type '{1}' - 型 '{1}' のフィールド '{0}' に割り当てが指定されていません + + Recursive ValValue {0} + Recursive ValValue {0} - - Extraneous fields have been given values - 不適切なフィールドに値を指定しました + + The value '{0}' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible + The value '{0}' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible - - Only overrides of abstract and virtual members may be specified in object expressions - オブジェクト式に指定できるのは、抽象メンバーおよび仮想メンバーのオーバーライドのみです。 + + The value '{0}' was marked inline but was not bound in the optimization environment + The value '{0}' was marked inline but was not bound in the optimization environment - - The member '{0}' does not correspond to any abstract or virtual method available to override or implement. - メンバー '{0}' は、無視または実装に使用できるどの抽象メソッドまたは仮想メソッドにも対応していません。 + + A value marked as 'inline' could not be inlined + A value marked as 'inline' could not be inlined - - The type {0} contains the member '{1}' but it is not a virtual or abstract method that is available to override or implement. - 型 {0} にメンバー '{1}' が含まれていますが、このメンバーはオーバーライドまたは実装に使用できる仮想メソッドでも抽象メソッドでもありません。 + + A value marked as 'inline' has an unexpected value + A value marked as 'inline' has an unexpected value - - The member '{0}' does not accept the correct number of arguments. {1} argument(s) are expected, but {2} were given. The required signature is '{3}'.{4} - メンバー '{0}' の引数の数が正しくありません。{1} 個の引数が必要ですが、指定されたのは {2} 個です。必要な署名は '{3}' です。{4} + + Base address for the library to be built + Base address for the library to be built - - The member '{0}' does not accept the correct number of arguments. One overload accepts {1} arguments, but {2} were given. The required signature is '{3}'.{4} - メンバー '{0}' の引数の数が正しくありません。1 つのオーバーロードには {1} 個の引数を指定できますが、{2} 個が指定されました。必要な署名は '{3}' です。{4} + + Build a console executable + Build a console executable - - A simple method name is required here - ここでは単純なメソッド名が必要です + + Build a library (Short form: -a) + Build a library (Short form: -a) - - The types System.ValueType, System.Enum, System.Delegate, System.MulticastDelegate and System.Array cannot be used as super types in an object expression or class - 型 System.ValueType、System.Enum、System.Delegate、System.MulticastDelegate、および System.Array は、オブジェクト式またはクラスのスーパー型として使用できません + + Build a module that can be added to another assembly + Build a module that can be added to another assembly - - 'new' must be used with a named type - 名前付き型には 'new' を使用してください + + Build a Windows executable + Build a Windows executable - - Cannot create an extension of a sealed type - シールド型の拡張は作成できません + + Generate overflow checks + Generate overflow checks - - No arguments may be given when constructing a record value - レコード値を構築するときに指定できる引数はありません + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) - - Interface implementations cannot be given on construction expressions - 構築式ではインターフェイスの実装を指定できません + + The command-line option '--cliroot' has been deprecated. Use an explicit reference to a specific copy of mscorlib.dll instead. + The command-line option '--cliroot' has been deprecated. Use an explicit reference to a specific copy of mscorlib.dll instead. - - Object construction expressions may only be used to implement constructors in class types - オブジェクト構築式は、クラス型のコンストラクターを実装する場合にのみ使用できます + + Use to override where the compiler looks for mscorlib.dll and framework components + Use to override where the compiler looks for mscorlib.dll and framework components - - Only simple bindings of the form 'id = expr' can be used in construction expressions - 構築式に使用できるのは、'id = expr' という形式の単純な束縛のみです + + Specify the codepage used to read source files + Specify the codepage used to read source files - - Objects must be initialized by an object construction expression that calls an inherited object constructor and assigns a value to each field - オブジェクトを初期化するには、継承したオブジェクト コンストラクターを呼び出し、値を各フィールドに割り当てるオブジェクト構築式を使用してください。 + + Reference an assembly or directory containing a design time tool (Short form: -t) + Reference an assembly or directory containing a design time tool (Short form: -t) - - Expected an interface type - インターフェイスの型を指定してください + + Output warning and error messages in color + Output warning and error messages in color - - Constructor expressions for interfaces do not take arguments - インターフェイスのコンストラクター式には引数を使用できません + + Copyright (c) Microsoft Corporation. All Rights Reserved. + Copyright (c) Microsoft Corporation. All Rights Reserved. - - This object constructor requires arguments - このオブジェクト コンストラクターには引数が必要です + + Freely distributed under the MIT Open Source License. https://github.com/Microsoft/visualfsharp/blob/master/License.txt + Freely distributed under the MIT Open Source License. https://github.com/Microsoft/visualfsharp/blob/master/License.txt - - 'new' may only be used with object constructors - 'new' を使用できるのは、オブジェクト コンストラクターのみです + + Enable or disable cross-module optimizations + Enable or disable cross-module optimizations - - At least one override did not correctly implement its corresponding abstract member - 少なくとも 1 つのオーバーライドが対応する抽象メンバーを正しく実装していません + + The command-line option '{0}' has been deprecated. Use '{1}' instead. + The command-line option '{0}' has been deprecated. Use '{1}' instead. - - This numeric literal requires that a module '{0}' defining functions FromZero, FromOne, FromInt32, FromInt64 and FromString be in scope - 数値リテラルの場合、関数 FromZero、FromOne、FromInt32、FromInt64、および FromString を定義するモジュール '{0}' がスコープに含まれている必要があります + + The command-line option '{0}' has been deprecated. HTML document generation is now part of the F# Power Pack, via the tool FsHtmlDoc.exe. + The command-line option '{0}' has been deprecated. HTML document generation is now part of the F# Power Pack, via the tool FsHtmlDoc.exe. - - Invalid record construction - レコードの構造が無効です + + The command-line option '{0}' has been deprecated + The command-line option '{0}' has been deprecated - - The expression form {{ expr with ... }} may only be used with record types. To build object types use {{ new Type(...) with ... }} - {{ expr with ... }} という形式の式を使用できるのはレコード型のみです。オブジェクトの型を構築するには、{{ new Type(...) with ... }} を使用してください。 + + Specify debugging type: full, portable, embedded, pdbonly. ('{0}' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file). + Specify debugging type: full, portable, embedded, pdbonly. ('{0}' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file). - - The inherited type is not an object model type - 継承された型はオブジェクト モデル型ではありません + + Emit debug information (Short form: -g) + Emit debug information (Short form: -g) - - Object construction expressions (i.e. record expressions with inheritance specifications) may only be used to implement constructors in object model types. Use 'new ObjectType(args)' to construct instances of object model types outside of constructors - オブジェクト構築式 (つまり、継承の指定があるレコード式) は、オブジェクト モデル型のコンストラクターを実装する場合にのみ使用できます。コンストラクターの外側でオブジェクト モデル型のインスタンスを構築するには、'new ObjectType(args)' を使用してください。 + + Define conditional compilation symbols (Short form: -d) + Define conditional compilation symbols (Short form: -d) - - '{{ }}' is not a valid expression. Records must include at least one field. Empty sequences are specified by using Seq.empty or an empty list '[]'. - '{{ }}' は有効な式ではありません。レコードには 1 つ以上のフィールドを含める必要があります。空のシーケンスを指定するには、Seq.empty または空のリスト '[]' をご使用ください。 + + Delay-sign the assembly using only the public portion of the strong name key + Delay-sign the assembly using only the public portion of the strong name key - - This type is not a record type. Values of class and struct types must be created using calls to object constructors. - この型はレコード型ではありません。クラス型および構造体型の値は、オブジェクト コンストラクターの呼び出しを使用して作成してください。 + + Produce a deterministic assembly (including module version GUID and timestamp) + Produce a deterministic assembly (including module version GUID and timestamp) - - This type is not a record type - この型はレコード型ではありません + + Embed all source files in the portable PDB file + Embed all source files in the portable PDB file - - This construct is ambiguous as part of a computation expression. Nested expressions may be written using 'let _ = (...)' and nested computations using 'let! res = builder {{ ... }}'. - このコンストラクトはコンピュテーション式の一部としてあいまいです。入れ子の式を記述するには 'let _ = (...)' を使用し、入れ子の計算には 'let! res = builder {{ ... }}' を使用します。 + + Embed specific source files in the portable PDB file + Embed specific source files in the portable PDB file - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - このコンストラクトはシーケンス式の一部としてあいまいです。入れ子の式を記述するには 'let _ = (...)' を使用し、入れ子のシーケンスには 'yield! seq {{... }}' を使用します。 + + --embed switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) + --embed switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - - 'do!' cannot be used within sequence expressions - シーケンス式内には 'do!' を使用できません + + Emit debug information in quotations + Emit debug information in quotations - - The use of 'let! x = coll' in sequence expressions is not permitted. Use 'for x in coll' instead. - シーケンス式では 'let! x = coll' を使用できません。代わりに 'for x in coll' を使用してください。 + + Output messages with fully qualified paths + Output messages with fully qualified paths - - 'try'/'with' cannot be used within sequence expressions - シーケンス式内には 'try'/'with' を使用できません + + Display this usage message (Short form: -?) + Display this usage message (Short form: -?) - - In sequence expressions, multiple results are generated using 'yield!' - シーケンス式で、複数の結果は 'yield!' を使用して生成されます + + - ADVANCED - + - ADVANCED - - - Invalid assignment - 割り当てが無効です + + - CODE GENERATION - + - CODE GENERATION - - - Invalid use of a type name - 型名の使用方法に誤りがあります + + - ERRORS AND WARNINGS - + - ERRORS AND WARNINGS - - - This type has no accessible object constructors - この型にアクセスできるオブジェクト コンストラクターはありません + + - INPUT FILES - + - INPUT FILES - - - Invalid use of an interface type - インターフェイス型の使用方法に誤りがあります + + - LANGUAGE - + - LANGUAGE - - - Invalid use of a delegate constructor. Use the syntax 'new Type(args)' or just 'Type(args)'. - デリゲート コンストラクターの使用方法に誤りがあります。'new Type(args)' か、単に 'Type(args)' という構文を使用してください + + - MISCELLANEOUS - + - MISCELLANEOUS - - - Property '{0}' is not static - プロパティ '{0}' は静的ではありません + + - OUTPUT FILES - + - OUTPUT FILES - - - Property '{0}' is not readable - プロパティ '{0}' は読み取り可能ではありません + + - RESOURCES - + - RESOURCES - - - This lookup cannot be used here - ここでこの参照は使用できません + + The command-line option '{0}' is for test purposes only + The command-line option '{0}' is for test purposes only - - Property '{0}' is static - プロパティ '{0}' は静的です + + Invalid path map. Mappings must be comma separated and of the format 'path=sourcePath' + Invalid path map. Mappings must be comma separated and of the format 'path=sourcePath' - - Property '{0}' cannot be set - プロパティ '{0}' は設定できません + + Invalid response file '{0}' ( '{1}' ) + Invalid response file '{0}' ( '{1}' ) - - Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'. - コンストラクターは引数に適用する必要があり、ファースト クラス値として使用することはできません。必要な場合には、匿名関数 '(fun arg1 ... argN -> new Type(arg1,...,argN))' を使用します。 + + Invalid version '{0}' for '--subsystemversion'. The version must be 4.00 or greater. + Invalid version '{0}' for '--subsystemversion'. The version must be 4.00 or greater. - - The syntax 'expr.id' may only be used with record labels, properties and fields - 構文 'expr.id' を使用できるのは、レコードのラベル、プロパティ、およびフィールドのみです + + Invalid value '{0}' for '--targetprofile', valid values are 'mscorlib', 'netcore' or 'netstandard'. + Invalid value '{0}' for '--targetprofile', valid values are 'mscorlib', 'netcore' or 'netstandard'. - - Event '{0}' is static - イベント '{0}' は静的です + + Invalid warning level '{0}' + Invalid warning level '{0}' - - Event '{0}' is not static - イベント '{0}' は静的ではありません + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' + Display the allowed values for language version, specify language version such as 'latest' or 'preview' - - The named argument '{0}' did not match any argument or mutable property - 名前付き引数 '{0}' と一致する引数または変更可能なプロパティがありませんでした + + Specify a directory for the include path which is used to resolve source files and assemblies (Short form: -I) + Specify a directory for the include path which is used to resolve source files and assemblies (Short form: -I) - - One or more of the overloads of this method has curried arguments. Consider redesigning these members to take arguments in tupled form. - このメソッドのオーバーロードの 1 つまたは複数にカリー化された引数があります。タプル化された形式で引数を使用するようにこれらのメンバーを再設計してください。 + + Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]] + Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]] - - The unnamed arguments do not form a prefix of the arguments of the method called - 名前なしの引数は、呼び出されるメソッドの引数のプレフィックスを形成できません + + Ignore ML compatibility warnings + Ignore ML compatibility warnings - - Static optimization conditionals are only for use within the F# library - 静的最適化の条件は、F# ライブラリ内でのみ使用できます + + Name of the output file (Short form: -o) + Name of the output file (Short form: -o) - - The corresponding formal argument is not optional - 対応する正式な引数はオプションではありません + + Don't copy FSharp.Core.dll along the produced binaries + Don't copy FSharp.Core.dll along the produced binaries - - Invalid optional assignment to a property or field - プロパティまたはフィールドに対するオプションの割り当てが無効です + + Don't add a resource to the generated assembly containing F#-specific metadata + Don't add a resource to the generated assembly containing F#-specific metadata - - A delegate constructor must be passed a single function value - デリゲート コンストラクターには単一の関数値を渡す必要があります + + Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility. + Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility. - - A binding cannot be marked both 'use' and 'rec' - 束縛に 'use' と 'rec' の両方をマークすることはできません + + Do not reference the default CLI assemblies by default + Do not reference the default CLI assemblies by default - - The 'VolatileField' attribute may only be used on 'let' bindings in classes - 'VolatileField' 属性を使用できるのは、クラス内の 'let' 束縛上のみです + - - Attributes are not permitted on 'let' bindings in expressions - 式内の 'let' 束縛では、属性を使用できません + + Disable specific warning messages + Disable specific warning messages - - The 'DefaultValue' attribute may only be used on 'val' declarations - 'DefaultValue' 属性は 'val' 宣言でのみ使用できます + + Do not include the default Win32 manifest + Do not include the default Win32 manifest - - The 'ConditionalAttribute' attribute may only be used on members - 'ConditionalAttribute' 属性はメンバーでのみ使用できます + + Enable optimizations (Short form: -O) + Enable optimizations (Short form: -O) - - This is not a valid name for an active pattern - アクティブ パターンの有効な名前ではありません + + Maps physical paths to source path names output by the compiler + Maps physical paths to source path names output by the compiler - - The 'EntryPointAttribute' attribute may only be used on function definitions in modules - 'EntryPointAttribute' 属性を使用できるのは、モジュールの関数定義のみです + + Name the output debug file + Name the output debug file - - Mutable values cannot be marked 'inline' - 変更可能な値を 'inline' とマークすることはできません + + Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The default is anycpu. + Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The default is anycpu. - - Mutable values cannot have generic parameters - 変更可能な値にジェネリック パラメーターを指定することはできません + + Specify the preferred output language culture name (e.g. es-ES, ja-JP) + Specify the preferred output language culture name (e.g. es-ES, ja-JP) - - Mutable function values should be written 'let mutable f = (fun args -> ...)' - 関数値を変更可能にするには 'let mutable f = (fun args -> ...)' が必要です + + Problem with codepage '{0}': {1} + Problem with codepage '{0}': {1} - - Only functions may be marked 'inline' - 'inline' とマークできるのは関数のみです + + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - - A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes - リテラル値を [<ThreadStatic>] 属性または [<ContextStatic>] 属性に指定することはできません + + Reference an assembly (Short form: -r) + Reference an assembly (Short form: -r) - - A literal value cannot be marked 'mutable' - リテラル値に 'mutable' とマークすることはできません + + Use a resident background compilation service to improve compiler startup times. + Use a resident background compilation service to improve compiler startup times. - - A literal value cannot be marked 'inline' - リテラル値に 'inline' とマークすることはできません + + Embed the specified managed resource + Embed the specified managed resource - - Literal values cannot have generic parameters - リテラル値にジェネリック パラメーターを指定することはできません + + Read response file for more options + Read response file for more options - - This is not a valid constant expression - これは有効な定数式ではありません + + Response file name '{0}' is empty, contains invalid characters, has a drive specification without an absolute path, or is too long + Response file name '{0}' is empty, contains invalid characters, has a drive specification without an absolute path, or is too long - - This type is not accessible from this code location - このコードの場所からこの型にアクセスすることはできません + + Response file '{0}' not found in '{1}' + Response file '{0}' not found in '{1}' - - Unexpected condition in imported assembly: failed to decode AttributeUsage attribute - インポートされたアセンブリに予期しない条件があります。AttributeUsage 属性のデコードに失敗しました: + + Short form of '{0}' + Short form of '{0}' - - Unrecognized attribute target. Valid attribute targets are 'assembly', 'module', 'type', 'method', 'property', 'return', 'param', 'field', 'event', 'constructor'. - 認識されない属性のターゲットです。有効な属性のターゲットは、'assembly'、'module'、'type'、'method'、'property'、'return'、'param'、'field'、'event'、および 'constructor' です。 + + Print the inferred interface of the assembly to a file + Print the inferred interface of the assembly to a file - - This attribute is not valid for use on this language element. Assembly attributes should be attached to a 'do ()' declaration, if necessary within an F# module. - この言語要素では、この属性を使用できません。アセンブリの属性は (必要に応じて F# モジュール内で) 'do ()' 宣言にアタッチする必要があります。 + + Resolve assembly references using directory-based rules rather than MSBuild resolution + Resolve assembly references using directory-based rules rather than MSBuild resolution - - This attribute is not valid for use on this language element - この言語要素では、この属性を使用できません + + Source link information file to embed in the portable PDB file + Source link information file to embed in the portable PDB file - - Optional arguments cannot be used in custom attributes - カスタム属性にはオプションの引数を使用できません + + --sourcelink switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) + --sourcelink switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - - This property cannot be set - このプロパティは設定できません + + Statically link the F# library and all referenced DLLs that depend on it into the assembly being generated + Statically link the F# library and all referenced DLLs that depend on it into the assembly being generated - - This property or field was not found on this custom attribute type - このカスタム属性型に、このプロパティまたはフィールドが見つかりませんでした + + Statically link the given assembly and all referenced DLLs that depend on this assembly. Use an assembly name e.g. mylib, not a DLL name. + Statically link the given assembly and all referenced DLLs that depend on this assembly. Use an assembly name e.g. mylib, not a DLL name. - - A custom attribute must be a reference type - カスタム属性は参照型にする必要があります + + Specify a strong name key container + Specify a strong name key container - - The number of args for a custom attribute does not match the expected number of args for the attribute constructor - カスタム属性の引数の数は、属性コンストラクターの引数に必要な数と一致しません + + Specify a strong name key file + Specify a strong name key file - - A custom attribute must invoke an object constructor - カスタム属性はオブジェクト コンストラクターを呼び出す必要があります + + Specify subsystem version of this assembly + Specify subsystem version of this assembly - - Attribute expressions must be calls to object constructors - 属性式は、オブジェクト コンストラクターに対する呼び出しにしてください + + Supported language versions: + Supported language versions: - - This attribute cannot be used in this version of F# - このバージョンの F# では、この属性を使用できません + + Enable or disable tailcalls + Enable or disable tailcalls - - Invalid inline specification - インラインの指定が無効です + + Specify target framework profile of this assembly. Valid values are mscorlib, netcore or netstandard. Default - mscorlib + Specify target framework profile of this assembly. Valid values are mscorlib, netcore or netstandard. Default - mscorlib - - 'use' bindings must be of the form 'use <var> = <expr>' - 'use' バインディングの形式は 'use <var> = <expr>' でなければなりません + + Unknown --test argument: '{0}' + Unknown --test argument: '{0}' - - Abstract members are not permitted in an augmentation - they must be defined as part of the type itself - 拡張に抽象メンバーは使用できません。型の一部として定義する必要があります。 + + Algorithm '{0}' is not supported + Algorithm '{0}' is not supported - - Method overrides and interface implementations are not permitted here - ここでメソッドのオーバーライドおよびインターフェイスの実装は許可されていません + + Unrecognized platform '{0}', valid values are 'x86', 'x64', 'Itanium', 'anycpu32bitpreferred', and 'anycpu' + Unrecognized platform '{0}', valid values are 'x86', 'x64', 'Itanium', 'anycpu32bitpreferred', and 'anycpu' - - No abstract or interface member was found that corresponds to this override - このオーバーライドに対応する抽象メンバーまたはインターフェイス メンバーが見つかりませんでした + + Unrecognized debug type '{0}', expected 'pdbonly' or 'full' + Unrecognized debug type '{0}', expected 'pdbonly' or 'full' - - This override takes a different number of arguments to the corresponding abstract member. The following abstract members were found:{0} - このオーバーライドでは、対応する抽象メンバーに対して異なる数の引数を使用しています。次の抽象メンバーが見つかりました: {0} + + Unrecognized value '{0}' for --langversion use --langversion:? for complete list + Unrecognized value '{0}' for --langversion use --langversion:? for complete list - - This method already has a default implementation - このメソッドには既に既定の実装があります + + Unrecognized target '{0}', expected 'exe', 'winexe', 'library' or 'module' + Unrecognized target '{0}', expected 'exe', 'winexe', 'library' or 'module' - - The method implemented by this default is ambiguous - この既定で実装されたメソッドはあいまいです + + Enable high-entropy ASLR + Enable high-entropy ASLR - - No abstract property was found that corresponds to this override - このオーバーライドに対応する抽象プロパティが見つかりませんでした + + Output messages in UTF-8 encoding + Output messages in UTF-8 encoding - - This property overrides or implements an abstract property but the abstract property doesn't have a corresponding {0} - このプロパティは、抽象プロパティをオーバーライドまたは実装しますが、抽象プロパティには対応する {0} がありません + + Set a warning level (0-5) + Set a warning level (0-5) - - Invalid signature for set member - set メンバーのシグネチャが無効です + + Enable specific warnings that may be off by default + Enable specific warnings that may be off by default - - This new member hides the abstract member '{0}'. Rename the member or use 'override' instead. - この新しいメンバーは抽象メンバー '{0}' を隠ぺいします。メンバーの名前を変更するか、代わりに 'override' を使用してください。 + + Report specific warnings as errors + Report specific warnings as errors - - This new member hides the abstract member '{0}' once tuples, functions, units of measure and/or provided types are erased. Rename the member or use 'override' instead. - タプル、関数、測定単位、または指定された型が消去されると、この新しいメンバーは抽象メンバー '{0}' を隠ぺいします。メンバーの名前を変更するか、代わりに 'override' を使用してください。 + + Report all warnings as errors + Report all warnings as errors - - Interfaces cannot contain definitions of static initializers - インターフェイスに静的初期化子の定義を含めることはできません + + Specify a Win32 manifest file + Specify a Win32 manifest file - - Interfaces cannot contain definitions of object constructors - インターフェイスにオブジェクト コンストラクターの定義を含めることはできません + + Specify a Win32 resource file (.res) + Specify a Win32 resource file (.res) - - Interfaces cannot contain definitions of member overrides - インターフェイスにメンバーのオーバーライドの定義を含めることはできません + + Write the xmldoc of the assembly to the given file + Write the xmldoc of the assembly to the given file - - Interfaces cannot contain definitions of concrete members. You may need to define a constructor on your type to indicate that the type is a class. - インターフェイスに具象メンバーの定義を含めることはできません。必要に応じて、型にコンストラクターを定義して、型がクラスであることを示してください。 + + The package management feature requires language version 5.0 use /langversion:preview + The package management feature requires language version 5.0 use /langversion:preview - - Constructors cannot be specified in exception augmentations - 例外の拡張にコンストラクターは指定できません + + {0} + {0} - - Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. - 構造体には、引数なしのオブジェクト コンストラクターを使用できません。構造体は既定のコンストラクターを自動的にサポートするため、これはすべての CLI 言語に課せられた制限です。 + + Package manager key '{0}' was not registered in {1}. Currently registered: {2} + Package manager key '{0}' was not registered in {1}. Currently registered: {2} - - Constructors cannot be defined for this type - この型にコンストラクターは定義できません + + Accessibility modifiers are not allowed on this member. Abstract slots always have the same visibility as the enclosing type. + Accessibility modifiers are not allowed on this member. Abstract slots always have the same visibility as the enclosing type. - - Recursive bindings that include member specifications can only occur as a direct augmentation of a type - メンバーの指定を含む再帰的束縛は、型の直接的な拡張としてのみ実行できます + + The '|' character is not permitted in active pattern case identifiers + The '|' character is not permitted in active pattern case identifiers - - Only simple variable patterns can be bound in 'let rec' constructs - 'let rec' コンストラクトでバインドできるのは、単純な変数パターンのみです + + Active pattern case identifiers must begin with an uppercase letter + Active pattern case identifiers must begin with an uppercase letter - - Mutable 'let' bindings can't be recursive or defined in recursive modules or namespaces - Mutable 'let' bindings can't be recursive or defined in recursive modules or namespaces + + All enum fields must be given values + All enum fields must be given values - - This member is not sufficiently generic - このメンバーの総称性が十分ではありません + + The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions. + The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions. - - A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1' - 定数値も指定する場合には宣言を [<Literal>] 属性のみにできます。例: 'val x : int = 1' + + 'assert' may not be used as a first class value. Use 'assert <expr>' instead. + 'assert' may not be used as a first class value. Use 'assert <expr>' instead. - - A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute - 宣言に [<Literal>] 属性が設定されている場合には宣言によって値を指定できるのはシグネチャ内のみです + + Cannot find code target for this attribute, possibly because the code after the attribute is incomplete. + Cannot find code target for this attribute, possibly because the code after the attribute is incomplete. - - Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread - Thread-static 変数および context-static 変数は静的にし、[<DefaultValue>] 属性を指定し、新しいスレッドごとに値が既定値に初期化されることを示す必要があります + + Attributes are not permitted on interface implementations + Attributes are not permitted on interface implementations - - Volatile fields must be marked 'mutable' and cannot be thread-static - volatile フィールドは 'mutable' とマークしてください。また、thread-static にすることはできません。 + + Attributes have been ignored in this construct + Attributes have been ignored in this construct - - Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field. - 初期化されていない 'val' フィールドは変更可能で、'[<DefaultValue>]' 属性によってマークされている必要があります。'val' フィールドの代わりに 'let' バインディングの使用を検討してください。 + + Attributes are not allowed here + Attributes are not allowed here - - Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type. - 型の静的な 'val' フィールドは変更可能で、プライベートで、さらには'[<DefaultValue>]' 属性でマークされている必要があります。これらの型では、'null' 値または 'zero' 値に初期化されます。クラス型で 'static let mutable' バインディングを使用することも検討してください。 + + Attributes are not permitted on 'inherit' declarations + Attributes are not permitted on 'inherit' declarations - - This field requires a name - このフィールドには名前が必要です + + Attributes should be placed before 'val' + Attributes should be placed before 'val' - - Invalid namespace, module, type or union case name - 名前空間、モジュール、型、または共用体ケースの名前が無効です + + Augmentations are not permitted on delegate type moduleDefns + Augmentations are not permitted on delegate type moduleDefns - - Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy' - コンストラクターの明示的な型宣言の形式は 'ty1 * ... * tyN -> resTy' でなければなりません。'resTy' をかっこで囲まなければならない場合があります + + Consider using a separate record type instead + Consider using a separate record type instead - - Return types of union cases must be identical to the type being defined, up to abbreviations - 共用体ケースの戻り値の型は、省略形に従い、定義されている型と同じにする必要があります + + Accessibility modifiers are not permitted on 'do' bindings, but '{0}' was given. + Accessibility modifiers are not permitted on 'do' bindings, but '{0}' was given. - - This is not a valid value for an enumeration literal - 列挙型リテラルの有効な値ではありません + + Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected. + Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected. - - The type '{0}' is not an interface type - 型 '{0}' はインターフェイス型ではありません + + A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. + A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. - - Duplicate specification of an interface - インターフェイスの指定に重複があります + + Accessibility modifiers are not permitted on enumeration fields + Accessibility modifiers are not permitted on enumeration fields - - A field/val declaration is not permitted here - ここでは field/val の宣言を使用できません + + Accessibility modifiers are not permitted in this position for enum types + Accessibility modifiers are not permitted in this position for enum types - - A inheritance declaration is not permitted here - ここでは継承の宣言を使用できません + + End of file in comment begun at or before here + End of file in comment begun at or before here - - This declaration opens the module '{0}', which is marked as 'RequireQualifiedAccess'. Adjust your code to use qualified references to the elements of the module instead, e.g. 'List.map' instead of 'map'. This change will ensure that your code is robust as new constructs are added to libraries. - この宣言は 'RequireQualifiedAccess' とマークされているモジュール '{0}' を開きます。代わりにモジュールの要素に対する限定参照を使用するようにコードを変更してください (たとえば、'map' の代わりに 'List.map')。この変更によってコードが堅牢になり、新しいコンストラクターがライブラリに追加された場合にも対応できます。 + + End of file in directive begun at or before here + End of file in directive begun at or before here - - This declaration opens the namespace or module '{0}' through a partially qualified path. Adjust this code to use the full path of the namespace. This change will make your code more robust as new constructs are added to the F# and CLI libraries. - この宣言は部分的な修飾パスを介して名前空間またはモジュール '{0}' を開きます。名前空間の完全パスを使用するようにコードを変更してください。この変更によってコードが堅牢になり、新しいコンストラクターが F# ライブラリや CLI ライブラリに追加された場合にも対応できます。 + + End of file in #if section begun at or after here + End of file in #if section begun at or after here - - Local class bindings cannot be marked inline. Consider lifting the definition out of the class or else do not mark it as inline. - ローカル クラスの束縛に 'inline' とマークすることはできません。クラスから定義を取り除くか、'inline' とマークしないでください。 + + End of file in IF-OCAML section begun at or before here + End of file in IF-OCAML section begun at or before here - - Type abbreviations cannot have members - 型略称にメンバーを含めることはできません + + Incomplete interpolated string begun at or before here + Incomplete interpolated string begun at or before here - - As of F# 4.1, the accessibility of type abbreviations is checked at compile-time. Consider changing the accessibility of the type abbreviation. Ignoring this warning might lead to runtime errors. - F# 4.1 まででは、型略称のアクセシビリティはコンパイル時に確認されます。型略称のアクセシビリティを変更することを検討してください。この警告を無視すると、ランタイム エラーが発生する可能性があります。 + + Incomplete interpolated string expression fill begun at or before here + Incomplete interpolated string expression fill begun at or before here - - Enumerations cannot have members - 列挙型にメンバーを含めることはできません + + Incomplete interpolated triple-quote string begun at or before here + Incomplete interpolated triple-quote string begun at or before here - - Measure declarations may have only static members - 単位の宣言に使用できるのは静的なメンバーのみです + + Incomplete interpolated verbatim string begun at or before here + Incomplete interpolated verbatim string begun at or before here - - Structs cannot contain 'do' bindings because the default constructor for structs would not execute these bindings - 構造体の既定のコンストラクターは束縛を実行しないため、構造体には 'do' 束縛を含むことができません + + End of file in string begun at or before here + End of file in string begun at or before here - - Structs cannot contain value definitions because the default constructor for structs will not execute these bindings. Consider adding additional arguments to the primary constructor for the type. - 構造体の既定のコンストラクターは束縛を実行しないため、構造体には値の定義を含むことができません。型のプライマリ コンストラクターに引数を追加してください。 + + End of file in string embedded in comment begun at or before here + End of file in string embedded in comment begun at or before here - - Static value definitions may only be used in types with a primary constructor. Consider adding arguments to the type definition, e.g. 'type X(args) = ...'. - 静的な値の定義は、プライマリ コンストラクターを含む型でのみ使用できます。型定義に引数を追加してください ( たとえば、'type X(args) = ...')。 + + End of file in triple-quote string begun at or before here + End of file in triple-quote string begun at or before here - - Measure declarations may have only static members: constructors are not available - 単位の宣言に使用できるのは静的なメンバーのみです。コンストラクターは使用できません。 + + End of file in triple-quote string embedded in comment begun at or before here + End of file in triple-quote string embedded in comment begun at or before here - - A member and a local class binding both have the name '{0}' - メンバーとローカル クラスの束縛はどちらも '{0}' という名前を使用しています + + End of file in verbatim string begun at or before here + End of file in verbatim string begun at or before here - - Type abbreviations cannot have interface declarations - 型略称にインターフェイスの宣言を含めることはできません + + End of file in verbatim string embedded in comment begun at or before here + End of file in verbatim string embedded in comment begun at or before here - - Enumerations cannot have interface declarations - 列挙型にインターフェイスの宣言を含めることはできません + + Error in the return expression for this 'let'. Possible incorrect indentation. + Error in the return expression for this 'let'. Possible incorrect indentation. - - This type is not an interface type - この型はインターフェイス型ではありません + + Attempted to parse this as an operator name, but failed + Attempted to parse this as an operator name, but failed - - All implemented interfaces should be declared on the initial declaration of the type - 実装したすべてのインターフェイスは、型の最初の宣言で宣言する必要があります + + The block following this '{0}' is unfinished. Every code block is an expression and must have a result. '{1}' cannot be the final code element in a block. Consider giving this block an explicit result. + The block following this '{0}' is unfinished. Every code block is an expression and must have a result. '{1}' cannot be the final code element in a block. Consider giving this block an explicit result. - - A default implementation of this interface has already been added because the explicit implementation of the interface was not specified at the definition of the type - インターフェイスの明示的な実装が型の定義時に指定されなかったため、このインターフェイスの既定の実装が追加されました。 + + Expected an expression after this point + Expected an expression after this point - - This member is not permitted in an interface implementation - インターフェイスの実装では、このメンバーは使用できません + + Unexpected end of type. Expected a name after this point. + Unexpected end of type. Expected a name after this point. - - This declaration element is not permitted in an augmentation - 拡張にこの宣言の要素は使用できません + + Expected a type after this point + Expected a type after this point - - Types cannot contain nested type definitions - 型に入れ子の型定義を含めることはできません + + Field bindings must have the form 'id = expr;' + Field bindings must have the form 'id = expr;' - - type, exception or module - 型、例外、またはモジュール + + Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'. + Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'. - - type or module - 型またはモジュール + + 'get' and/or 'set' required + 'get' and/or 'set' required - - The struct, record or union type '{0}' implements the interface 'System.IStructuralEquatable' explicitly. Apply the 'CustomEquality' attribute to the type. - 構造体型、レコード型、または共用体型の '{0}' はインターフェイス 'System.IStructuralEquatable' を明示的に実装しています。この型には 'CustomEquality' 属性を適用してください。 + + 'get', 'set' or 'get,set' required + 'get', 'set' or 'get,set' required - - The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'. - 構造体型、レコード型、共用体型の '{0}' がインターフェース 'System.IEquatable<_>' を明示的に実装しています。この型に 'CustomEquality' 属性を適用し、非ジェネリック オーバーライド 'System.Object.Equals(obj)' の整合性のある実装を用意します。 + + A getter property may have at most one argument group + A getter property may have at most one argument group - - Explicit type specifications cannot be used for exception constructors - 明示的な型の指定は、例外のコンストラクターには使用できません + + A getter property is expected to be a function, e.g. 'get() = ...' or 'get(index) = ...' + A getter property is expected to be a function, e.g. 'get() = ...' or 'get(index) = ...' - - Exception abbreviations should not have argument lists - 例外の省略形に引数リストを含めることはできません + + Identifier expected + Identifier expected - - Abbreviations for Common IL exceptions cannot take arguments - Common IL の例外型の場合、省略形には引数を使用できません + + Ignoring attributes on module abbreviation + Ignoring attributes on module abbreviation - - Exception abbreviations must refer to existing exceptions or F# types deriving from System.Exception - 例外の省略形は、既存の例外、または System.Exception から派生した F# 型を参照する必要があります + + The '{0}' accessibility attribute is not allowed on module abbreviation. Module abbreviations are always private. + The '{0}' accessibility attribute is not allowed on module abbreviation. Module abbreviations are always private. - - Abbreviations for Common IL exception types must have a matching object constructor - Common IL の例外型の場合、省略形には対応するオブジェクト コンストラクターが必要です + + The '{0}' visibility attribute is not allowed on module abbreviation. Module abbreviations are always private. + The '{0}' visibility attribute is not allowed on module abbreviation. Module abbreviations are always private. - - Not an exception - 例外ではありません + + Denominator must not be 0 in unit-of-measure exponent + Denominator must not be 0 in unit-of-measure exponent - - Invalid module name - モジュール名が無効です + + Neither 'member val' nor 'override val' definitions are permitted in object expressions. + Neither 'member val' nor 'override val' definitions are permitted in object expressions. - - Invalid type extension - 型の拡張が無効です + + 'in' or '=' expected + 'in' or '=' expected - - The attributes of this type specify multiple kinds for the type - この型の属性は、その型に対して複数の種類を指定しています + + Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. + Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. - - The kind of the type specified by its attributes does not match the kind implied by its definition - この属性によって指定された型の種類は、定義が示す種類と一致しません + + An indexer property must be given at least one argument + An indexer property must be given at least one argument - - Measure definitions cannot have type parameters - 単位の定義に型パラメーターは使用できません + + 'inherit' declarations cannot have 'as' bindings. To access members of the base class when overriding a method, the syntax 'base.SomeMember' may be used; 'base' is a keyword. Remove this 'as' binding. + 'inherit' declarations cannot have 'as' bindings. To access members of the base class when overriding a method, the syntax 'base.SomeMember' may be used; 'base' is a keyword. Remove this 'as' binding. - - This type requires a definition - この型には定義が必要です + + Accessibility modifiers are not permitted on inline assembly code types + Accessibility modifiers are not permitted on inline assembly code types - - This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'. - この型の省略形では、省略される型に出現しない型パラメーターが 1 つまたは複数宣言されました。型の省略形には、省略される型のすべての宣言済み型パラメーターを使用する必要があります。1 つまたは複数のパラメーターを削除するか、基底となる型をラップする具象型定義を使用してください (たとえば、'type C<'a> = C of ...')。 + + An integer for loop must use a simple identifier + An integer for loop must use a simple identifier - - Structs, interfaces, enums and delegates cannot inherit from other types - 構造体、インターフェイス、列挙型、およびデリゲートは、他の型から継承できません + + Interfaces always have the same visibility as the enclosing type + Interfaces always have the same visibility as the enclosing type - - Types cannot inherit from multiple concrete types - 型は複数の具象型から継承できません + + Invalid anonymous record expression + Invalid anonymous record expression - - Records, union, abbreviations and struct types cannot have the 'AllowNullLiteral' attribute - レコード型、共用体型、省略形型、および構造体型に 'AllowNullLiteral' 属性を指定することはできません + + Invalid anonymous record type + Invalid anonymous record type - - Types with the 'AllowNullLiteral' attribute may only inherit from or implement types which also allow the use of the null literal - 'AllowNullLiteral' 属性を持つ型が継承または実装できるのは、null のリテラルも使用できる型のみです + + Invalid declaration syntax + Invalid declaration syntax - - Generic types cannot be given the 'StructLayout' attribute - ジェネリック型に 'StructLayout' 属性を指定することはできません + + Invalid literal in type + Invalid literal in type - - Only structs and classes without primary constructors may be given the 'StructLayout' attribute - 'StructLayout' 属性を指定できるのは、プライマリ コンストラクターなしの構造体およびクラスのみです + + Invalid prefix operator + Invalid prefix operator - - The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type. - この種の表現は、シグネチャによって非表示になります。この種の特性を示すには、[<Sealed>]、[<Class>]、または [<Interface>] などの属性を指定する必要があります。 + + Invalid operator definition. Prefix operator definitions must use a valid prefix operator name. + Invalid operator definition. Prefix operator definitions must use a valid prefix operator name. - - Only classes may be given the 'AbstractClass' attribute - 'AbstractClass' 属性を指定できるのはクラスのみです + + Invalid property getter or setter + Invalid property getter or setter - - Only types representing units-of-measure may be given the 'Measure' attribute - 'Measure' 属性を指定できるのは、単位を表す型のみです + + Invalid use of 'rec' keyword + Invalid use of 'rec' keyword - - Accessibility modifiers are not permitted on overrides or interface implementations - オーバーライドまたはインターフェイスの実装にはアクセシビリティ修飾子を使用できません + + The declaration form 'let ... and ...' for non-recursive bindings is not used in F# code. Consider using a sequence of 'let' bindings + The declaration form 'let ... and ...' for non-recursive bindings is not used in F# code. Consider using a sequence of 'let' bindings - - Discriminated union types are always sealed - 判別された共用体型は常にシールドです + + This member is not permitted in an object implementation + This member is not permitted in an object implementation - - Record types are always sealed - レコード型は常にシールドです + + Mismatched quotation operator name, beginning with '{0}' + Mismatched quotation operator name, beginning with '{0}' - - Assembly code types are always sealed - アセンブリ コード型は常にシールドです + + Mismatched quotation, beginning with '{0}' + Mismatched quotation, beginning with '{0}' - - Struct types are always sealed - 構造体型は常にシールドです + + Missing function body + Missing function body - - Delegate types are always sealed - デリゲート型は常にシールドです + + Unmatched '<'. Expected closing '>' + Unmatched '<'. Expected closing '>' - - Enum types are always sealed - 列挙型は常にシールドです + + Missing qualification after '.' + Missing qualification after '.' - - Interface types and delegate types cannot contain fields - インターフェイス型またはデリゲート型にフィールドを含めることはできません + + Expected type argument or static argument + Expected type argument or static argument - - Abbreviated types cannot be given the 'Sealed' attribute - 省略された型に 'Sealed' 属性を指定することはできません + + A module abbreviation must be a simple name, not a path + A module abbreviation must be a simple name, not a path - - Cannot inherit a sealed type - シールド型を継承できません + + A module name must be a simple name, not a path + A module name must be a simple name, not a path - - Cannot inherit from interface type. Use interface ... with instead. - インターフェイスの型から継承できません。代わりに interface ... with を使用してください。 + + The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead + The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead - - Struct types cannot contain abstract members - 構造体型に抽象メンバーを含むことはできません + + Multiple accessibilities given for property getter or setter + Multiple accessibilities given for property getter or setter - - Interface types cannot be sealed - インターフェイス型をシールドにすることはできません + + Property definitions may not be declared mutable. To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. + Property definitions may not be declared mutable. To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. - - Delegate specifications must be of the form 'typ -> typ' - デリゲート仕様の形式は、'typ -> typ' でなければなりません + + To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. + To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. - - Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values. - デリゲートにはカリー化された型を指定しないでください。複数引数のデリゲートには 'typ * ... * typ -> typ' を使用し、関数値を返すデリゲートには 'typ -> (typ -> typ)' を使用します。 + + Files should begin with either a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule', but not both. To define a module within a namespace use 'module SomeModule = ...' + Files should begin with either a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule', but not both. To define a module within a namespace use 'module SomeModule = ...' - - Literal enumerations must have type int, uint, int16, uint16, int64, uint64, byte, sbyte or char - リテラル列挙値の型は、int、uint、int16、uint16、int64、uint64、byte、sbyte、または char にする必要があります + + No '=' symbol should follow a 'namespace' declaration + No '=' symbol should follow a 'namespace' declaration - - This type definition involves an immediate cyclic reference through an abbreviation - この型定義では、省略形による直接的な循環参照が発生します + + No #endif found for #if or #else + No #endif found for #if or #else - - This type definition involves an immediate cyclic reference through a struct field or inheritance relation - この型定義では、構造体フィールドまたは継承の関係による直接的な循環参照が発生します + + No matching 'in' found for this 'let' + No matching 'in' found for this 'let' - - The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature - 構文 'type X with ...' は拡張用に予約されています。これらは非表示になっていますが、'type X = ...' を使用してシグネチャでメンバーが宣言されています。シグネチャの型定義に '[<Sealed>] 属性を追加しなければならない場合があります + + Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name. + Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name. - - Members that extend interface, delegate or enum types must be placed in a module separate to the definition of the type. This module must either have the AutoOpen attribute or be opened explicitly by client code to bring the extension members into scope. - インターフェイス型、デリゲート型、または列挙型を拡張するメンバーは、型の定義とは別のモジュールに配置する必要があります。このモジュールに AutoOpen 属性を指定するか、クライアント コードで明示的にモジュールを開いて、拡張メンバーをスコープに含める必要があります。 + + Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name. + Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name. - - One or more of the declared type parameters for this type extension have a missing or wrong type constraint not matching the original type constraints on '{0}' - この型の拡張の 1 つ以上の宣言された型パラメーターについて、型の制約が見つからないか、型の制約が '{0}' の元の型の制約に一致しないため正しくありません。 + + The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>' + The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>' - - Type definitions may only have one 'inherit' specification and it must be the first declaration - 型定義に含めることができる 'inherit' 指定は 1 つのみであり、これを最初の宣言にする必要があります。 + + Only class types may take value arguments + Only class types may take value arguments - - 'let' and 'do' bindings must come before member and interface definitions in type definitions - 型定義内のメンバーとインターフェイスの定義の前に、'let' および 'do' 束縛を含める必要があります + + Only '#' compiler directives may occur prior to the first 'namespace' declaration + Only '#' compiler directives may occur prior to the first 'namespace' declaration - - This 'inherit' declaration specifies the inherited type but no arguments. Consider supplying arguments, e.g. 'inherit BaseType(args)'. - この 'inherit' 宣言は継承された型を指定していますが、引数がありません。引数を指定してください (たとえば、'inherit BaseType(args)')。 + + At most one 'with' augmentation is permitted + At most one 'with' augmentation is permitted - - This 'inherit' declaration has arguments, but is not in a type with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - この 'inherit' 宣言には引数が含まれていますが、これはプライマリ コンストラクターを含む型ではありません。型定義に引数を追加してください (たとえば、'type X(args) = ...')。 + + In F# code you may use 'expr.[expr]'. A type annotation may be required to indicate the first expression is an array + In F# code you may use 'expr.[expr]'. A type annotation may be required to indicate the first expression is an array - - This definition may only be used in a type with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - この定義は、プライマリ コンストラクターを含む型でのみ使用できます。型定義に引数を追加してください (たとえば、'type X(args) = ...')。 + + Accessibility modifiers are not permitted on record fields. Use 'type R = internal ...' or 'type R = private ...' to give an accessibility to the whole representation. + Accessibility modifiers are not permitted on record fields. Use 'type R = internal ...' or 'type R = private ...' to give an accessibility to the whole representation. - - Type abbreviations cannot have augmentations - 型略称に拡張を含めることはできません + + Property setters must be defined using 'set value = ', 'set idx value = ' or 'set (idx1,...,idxN) value = ... ' + Property setters must be defined using 'set value = ', 'set idx value = ' or 'set (idx1,...,idxN) value = ... ' - - The path '{0}' is a namespace. A module abbreviation may not abbreviate a namespace. - パス '{0}' は名前空間です。モジュールの省略形は名前空間の省略形にはできません。 + + A setter property may have at most two argument groups + A setter property may have at most two argument groups - - The type '{0}' is used in an invalid way. A value prior to '{1}' has an inferred type involving '{2}', which is an invalid forward reference. - 型 '{0}' の使用方法に誤りがあります。'{1}' の前の値に、'{2}' と推論されるような型があります。これは無効な前方参照です。 + + Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized + Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized - - The member '{0}' is used in an invalid way. A use of '{1}' has been inferred prior to the definition of '{2}', which is an invalid forward reference. - メンバー '{0}' の使用方法に誤りがあります。'{2}' の定義の前に '{1}' の使用が推論されました。これは無効な前方参照です。 + + Successive patterns should be separated by spaces or tupled + Successive patterns should be separated by spaces or tupled - - The attribute 'AutoOpen(\"{0}\")' in the assembly '{1}' did not refer to a valid module or namespace in that assembly and has been ignored - アセンブリ '{1}' の属性 'AutoOpen(\"{0}\")' は、このアセンブリ内の有効なモジュールまたは名前空間を参照していないため、無視されました + + Syntax error + Syntax error - - Undefined value '{0}' - 未定義の値 '{0}' + + Syntax error in labelled type argument + Syntax error in labelled type argument - - Label {0} not found - ラベル {0} が見つかりません + + The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end' + The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end' - - Incorrect number of type arguments to local call - ローカルの呼び出しに対する型引数の数が正しくありません + + The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end' + The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end' - - Dynamic invocation of {0} is not supported - {0} の動的呼び出しはサポートされません + + Accessibility modifiers are not permitted in this position for type abbreviations + Accessibility modifiers are not permitted in this position for type abbreviations - - Taking the address of a literal field is invalid - リテラル フィールドのアドレスは使用できません + + Type annotations on property getters and setters must be given after the 'get()' or 'set(v)', e.g. 'with get() : string = ...' + Type annotations on property getters and setters must be given after the 'get()' or 'set(v)', e.g. 'with get() : string = ...' - - This operation involves taking the address of a value '{0}' represented using a local variable or other special representation. This is invalid. - この操作には、ローカル変数または他の特殊な表現を使用して表された値 '{0}' のアドレスが使用されています。これは無効です。 + + Type name cannot be empty. + Type name cannot be empty. - - Custom marshallers cannot be specified in F# code. Consider using a C# helper function. - F# コードではカスタム マーシャラーを指定できません。C# ヘルパー関数を使用してください。 + + Unclosed block + Unclosed block - - The MarshalAs attribute could not be decoded - MarshalAs 属性をデコードできませんでした + + '_' cannot be used as field name + '_' cannot be used as field name - - The signature for this external function contains type parameters. Constrain the argument and return types to indicate the types of the corresponding C function. - この外部関数のシグネチャには型パラメーターが含まれます。引数を制限し、対応する C 関数の型を示す型を戻してください。 + + Unexpected empty type moduleDefn list + Unexpected empty type moduleDefn list - - The DllImport attribute could not be decoded - DllImport 属性をデコードできませんでした + + Unexpected end of input + Unexpected end of input - - Literal fields cannot be set - リテラル フィールドを設定できません + + Unexpected end of input in value, function or member definition + Unexpected end of input in value, function or member definition - - GenSetStorage: {0} was represented as a static method but was not an appropriate lambda expression - GenSetStorage: {0} は静的メソッドとして表現されましたが、適切なラムダ式ではありません + + Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. + Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. - - Mutable variables cannot escape their method - 変更可能な変数ではメソッドをエスケープできません + + Unexpected end of input in expression + Unexpected end of input in expression - - Compiler error: unexpected unrealized value - コンパイラ エラー: 予期しない認識されない値 + + Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'. + Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'. - - Main module of program is empty: nothing will happen when it is run - プログラムのメイン モジュールが空です。実行しても何も処理されません + + Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'. + Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'. - - This type cannot be used for a literal field - リテラル フィールドにこの型は使用できません + + Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'. + Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'. - - Unexpected GetSet annotation on a property - プロパティに予期しない GetSet 注釈がありました: + + Unexpected end of input in object members + Unexpected end of input in object members - - The FieldOffset attribute could not be decoded - FieldOffset 属性をデコードできませんでした + + Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. + Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'. - - The StructLayout attribute could not be decoded - StructLayout 属性をデコードできませんでした + + Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'. + Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'. - - The DefaultAugmentation attribute could not be decoded - DefaultAugmentation 属性をデコードできませんでした + + Unexpected end of input in type arguments + Unexpected end of input in type arguments - - Reflected definitions cannot contain uses of the prefix splice operator '%' - リフレクションされた定義には、プレフィックスのスプライス演算子 '%' を使用できません + + Unexpected end of input in type definition + Unexpected end of input in type definition - - Problem with codepage '{0}': {1} - コードページ '{0}' に問題があります: {1} + + Unexpected end of input in type signature + Unexpected end of input in type signature - - Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (C) Microsoft Corporation. All rights reserved. + + Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'. + Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'. - - Freely distributed under the MIT Open Source License. https://github.com/Microsoft/visualfsharp/blob/master/License.txt - MIT のオープン ソース ライセンスで無料配布されています。https://github.com/Microsoft/visualfsharp/blob/master/License.txt + + Unexpected end of input in 'match' or 'try' expression + Unexpected end of input in 'match' or 'try' expression - - Name of the output file (Short form: -o) - 出力ファイルの名前 (短い形式: -o) + + Unexpected identifier: '{0}' + Unexpected identifier: '{0}' - - Build a console executable - コンソール実行可能ファイルをビルドします + + Unexpected infix operator in type expression + Unexpected infix operator in type expression - - Build a Windows executable - Windows 実行可能ファイルをビルドします + + Unexpected integer literal in unit-of-measure expression + Unexpected integer literal in unit-of-measure expression - - Build a library (Short form: -a) - ライブラリをビルドします (短い形式: -a) + + Unexpected infix operator in unit-of-measure expression. Legal operators are '*', '/' and '^'. + Unexpected infix operator in unit-of-measure expression. Legal operators are '*', '/' and '^'. - - Build a module that can be added to another assembly - 別のアセンブリに追加できるモジュールをビルドします + + Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters. + Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters. - - Delay-sign the assembly using only the public portion of the strong name key - 厳密名キーのパブリックな部分のみを使ってアセンブリを遅延署名します + + A semicolon is not expected at this point + A semicolon is not expected at this point - - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - 厳密な名前のキーの公開部分のみを使ってアセンブリを公開署名し、アセンブリを署名済みとしてマークします + + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. + Unexpected symbol '.' in member definition. Expected 'with', '=' or other token. - - Write the xmldoc of the assembly to the given file - 指定したファイルにアセンブリの xmldoc を書き込みます + + Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead? + Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead? - - Specify a strong name key file - 厳密名キー ファイルを指定します + + Syntax error: unexpected type parameter specification + Syntax error: unexpected type parameter specification - - Specify a strong name key container - 厳密名キー コンテナーを指定します + + Accessibility modifiers are not permitted here, but '{0}' was given. + Accessibility modifiers are not permitted here, but '{0}' was given. - - Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The default is anycpu. - このコードが実行されるプラットフォームの制限: x86、Itanium、x64、anycpu32bitpreferred、または anycpu。既定は anycpu です。 + + Unexpected token '{0}' or incomplete expression + Unexpected token '{0}' or incomplete expression - - Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility. - インライン コンストラクトの実装に必要な最適化情報のみを含めてください。モジュール間のインライン処理を禁止し、バイナリの互換性を改善してください。 + + Accessibility modifiers are not permitted on union cases. Use 'type U = internal ...' or 'type U = private ...' to give an accessibility to the whole representation. + Accessibility modifiers are not permitted on union cases. Use 'type U = internal ...' or 'type U = private ...' to give an accessibility to the whole representation. - - Don't add a resource to the generated assembly containing F#-specific metadata - F# 固有のメタデータを含む生成済みアセンブリにリソースを追加しないでください + + Unmatched '{0}' + Unmatched '{0}' - - Print the inferred interface of the assembly to a file - アセンブリの推論されたインターフェイスをファイルに出力します + + Unmatched 'begin' + Unmatched 'begin' - - Reference an assembly (Short form: -r) - アセンブリを参照します (短い形式: -r) + + Unmatched 'begin' or 'struct' + Unmatched 'begin' or 'struct' - - Specify a Win32 resource file (.res) - Win32 リソース ファイル (.res) を指定します + + Unmatched '{{' + Unmatched '{{' - - Specify a Win32 manifest file - Win32 マニフェスト ファイルを指定します + + Unmatched '{{|' + Unmatched '{{|' - - Do not include the default Win32 manifest - 既定の Win32 マニフェストを含めないでください + + Unmatched '[' + Unmatched '[' - - Embed all source files in the portable PDB file - 移植可能な PDB ファイル内にすべてのソース ファイルを埋め込む + + Unmatched '[|' + Unmatched '[|' - - Embed specific source files in the portable PDB file - 移植可能な PDB ファイル内に特定のソース ファイルを埋め込む + + Unmatched 'class', 'interface' or 'struct' + Unmatched 'class', 'interface' or 'struct' - - Source link information file to embed in the portable PDB file - 移植可能な PDB ファイルに埋め込むソース リンク情報ファイル + + Unmatched '[<'. Expected closing '>]' + Unmatched '[<'. Expected closing '>]' - - --embed switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - --embed スイッチは、移植可能な PDB の生成時にのみサポートされます (--debug:portable または --debug:embedded) + + Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. + Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. - - --sourcelink switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - --sourcelink スイッチは、移植可能な PDB の生成時にのみサポートされます (--debug:portable または --debug:embedded) + + Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let!' keyword. + Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let!' keyword. - - Source file is too large to embed in a portable PDB - ソース ファイルが大きすぎるので、移植可能な PDB 内に埋め込めません + + Unmatched '(' + Unmatched '(' - - Embed the specified managed resource - 指定したマネージド リソースを埋め込みます + + Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use' keyword. + Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use' keyword. - - Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]] - 指定されたリソースを、resinfo 形式が <file>[,<string name>[,public|private]] のこのアセンブリにリンクします + + Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use!' keyword. + Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use!' keyword. - - Emit debug information (Short form: -g) - デバッグ情報を生成します (短い形式: -g) + + Unmatched 'with' or badly formatted 'with' block + Unmatched 'with' or badly formatted 'with' block - - Specify debugging type: full, portable, embedded, pdbonly. ('{0}' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file). - デバッグの種類 full、portable、pdbonly を指定します (デバッグの種類が指定されない場合には '{0}' が既定で、実行中のプログラムにデバッガーを付加することができます。'portable' はクロスプラットフォーム形式、'embedded' は出力ファイルに埋め込まれたクロスプラットフォーム形式です)。 + + 'use' bindings are not permitted in primary constructors + 'use' bindings are not permitted in primary constructors - - Enable optimizations (Short form: -O) - 最適化を有効にします (短い形式: -O) + + 'use' bindings are not permitted in modules and are treated as 'let' bindings + 'use' bindings are not permitted in modules and are treated as 'let' bindings - - Enable or disable tailcalls - tail の呼び出しを有効または無効にします + + Accessibility modifiers should come immediately prior to the identifier naming a construct + Accessibility modifiers should come immediately prior to the identifier naming a construct - - Produce a deterministic assembly (including module version GUID and timestamp) - 決定論的アセンブリを作成します (モジュール バージョン GUID やタイムスタンプなど) + + Accessibility modifiers are not permitted on an 'inherits' declaration + Accessibility modifiers are not permitted on an 'inherits' declaration - - Enable or disable cross-module optimizations - モジュール間の最適化を有効または無効にします + + Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'. + Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'. - - Report all warnings as errors - すべての警告をエラーとして報告する + + Missing variable '{0}' + Missing variable '{0}' - - Report specific warnings as errors - 指定した警告をエラーとして報告する + + Partial active patterns may only generate one result + Partial active patterns may only generate one result - - Set a warning level (0-5) - 警告レベル (0 ~ 5) を設定します + + Problem with filename '{0}': Illegal characters in path. + Problem with filename '{0}': Illegal characters in path. - - Disable specific warning messages - 指定の警告メッセージを無効にする + + A pattern match guard must be of type 'bool', but this 'when' expression is of type '{0}'. + A pattern match guard must be of type 'bool', but this 'when' expression is of type '{0}'. - - Enable specific warnings that may be off by default - 既定でオフにすることができる特定の警告を有効にします + + Error reading/writing metadata for the F# compiled DLL '{0}'. Was the DLL compiled with an earlier version of the F# compiler? (error: '{1}'). + Error reading/writing metadata for the F# compiled DLL '{0}'. Was the DLL compiled with an earlier version of the F# compiler? (error: '{1}'). - - Generate overflow checks - オーバーフロー チェックの生成 + + An error occurred while reading the F# metadata node at position {0} in table '{1}' of assembly '{2}'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using. + An error occurred while reading the F# metadata node at position {0} in table '{1}' of assembly '{2}'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using. - - Define conditional compilation symbols (Short form: -d) - 条件付きコンパイル シンボルを定義します (短い形式: -d) + + An error occurred while reading the F# metadata of assembly '{0}'. A reserved construct was utilized. You may need to upgrade your F# compiler or use an earlier version of the assembly that doesn't make use of a specific construct. + An error occurred while reading the F# metadata of assembly '{0}'. A reserved construct was utilized. You may need to upgrade your F# compiler or use an earlier version of the assembly that doesn't make use of a specific construct. - - Ignore ML compatibility warnings - ML 互換性に関する警告を無視します + + #i is not supported by the registered PackageManagers + #i is not supported by the registered PackageManagers -