未验证 提交 cf4aa642 编写于 作者: F Florian Verdonck 提交者: GitHub

Add trivia for SynTypeDefnSig. (#13483)

上级 441077d2
......@@ -4523,7 +4523,7 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d
| SynModuleSigDecl.Exception (exnSig=SynExceptionSig(exnRepr=exnRepr; withKeyword=withKeyword; members=members)) ->
let ( SynExceptionDefnRepr(synAttrs, SynUnionCase(ident=SynIdent(id,_)), _, xmlDoc, vis, m)) = exnRepr
let compInfo = SynComponentInfo(synAttrs, None, [], [id], xmlDoc, false, vis, id.idRange)
let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, None, SynTypeDefnSigRepr.Exception exnRepr, withKeyword, members, m)) ]
let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m, { TypeKeyword = None; WithKeyword = withKeyword; EqualsRange = None })) ]
decls, (false, false)
| SynModuleSigDecl.Val (vspec, _) ->
......
......@@ -1218,11 +1218,10 @@ type SynTypeDefnSig =
| SynTypeDefnSig of
typeInfo: SynComponentInfo *
equalsRange: range option *
typeRepr: SynTypeDefnSigRepr *
withKeyword: range option *
members: SynMemberSig list *
range: range
range: range *
trivia: SynTypeDefnSigTrivia
member this.Range =
match this with
......
......@@ -1383,11 +1383,10 @@ type SynTypeDefnSig =
/// The information for a type definition in a signature
| SynTypeDefnSig of
typeInfo: SynComponentInfo *
equalsRange: range option *
typeRepr: SynTypeDefnSigRepr *
withKeyword: range option *
members: SynMemberSig list *
range: range
range: range *
trivia: SynTypeDefnSigTrivia
/// Gets the syntax range of this construct
member Range: range
......
......@@ -137,6 +137,21 @@ type SynTypeDefnTrivia =
WithKeyword = None
}
[<NoEquality; NoComparison>]
type SynTypeDefnSigTrivia =
{
TypeKeyword: range option
EqualsRange: range option
WithKeyword: range option
}
static member Zero: SynTypeDefnSigTrivia =
{
TypeKeyword = None
EqualsRange = None
WithKeyword = None
}
[<NoEquality; NoComparison>]
type SynBindingTrivia =
{
......
......@@ -215,6 +215,22 @@ type SynTypeDefnTrivia =
static member Zero: SynTypeDefnTrivia
/// Represents additional information for SynTypeDefnSig
[<NoEquality; NoComparison>]
type SynTypeDefnSigTrivia =
{
/// The syntax range of the `type` keyword.
TypeKeyword: range option
/// The syntax range of the `=` token.
EqualsRange: range option
/// The syntax range of the `with` keyword
WithKeyword: range option
}
static member Zero: SynTypeDefnSigTrivia
/// Represents additional information for SynBinding
[<NoEquality; NoComparison>]
type SynBindingTrivia =
......
......@@ -826,7 +826,7 @@ moduleSpfn:
| opt_attributes opt_declVisibility typeKeyword tyconSpfn tyconSpfnList
{ if Option.isSome $2 then errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2))
let (SynTypeDefnSig (SynComponentInfo (cas, a, cs, b, _xmlDoc, d, d2, d3), equalsRange, typeRepr, withKeyword, members, range)) = $4
let (SynTypeDefnSig (SynComponentInfo (cas, a, cs, b, _xmlDoc, d, d2, d3), typeRepr, members, range, trivia)) = $4
_xmlDoc.MarkAsInvalid()
let attrs = $1 @ cas
let xmlDoc = grabXmlDoc(parseState, $1, 1)
......@@ -834,7 +834,8 @@ moduleSpfn:
(d3, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
|> unionRanges range
|> unionRangeWithXmlDoc xmlDoc
let tc = SynTypeDefnSig(SynComponentInfo(attrs, a, cs, b, xmlDoc, d, d2, d3), equalsRange, typeRepr, withKeyword, members, mDefn)
let trivia = { trivia with TypeKeyword = Some (rhs parseState 3) }
let tc = (SynTypeDefnSig(SynComponentInfo(attrs, a, cs, b, xmlDoc, d, d2, d3), typeRepr, members, mDefn, trivia))
let m = (mDefn, $5) ||> unionRangeWithListBy (fun (a: SynTypeDefnSig) -> a.Range) |> unionRanges (rhs parseState 3)
SynModuleSigDecl.Types (tc :: $5, m) }
......@@ -901,18 +902,18 @@ tyconSpfnList:
| AND tyconSpfn tyconSpfnList
{ let xmlDoc = grabXmlDoc(parseState, [], 1)
let tyconSpfn =
let (SynTypeDefnSig(componentInfo, equalsRange, typeRepr, withKeyword, members, range)) = $2
let (SynTypeDefnSig(componentInfo, typeRepr, members, range, trivia)) = $2
let (SynComponentInfo(a, typars, c, lid, _xmlDoc, fixity, vis, mLongId)) = componentInfo
if xmlDoc.IsEmpty then
if _xmlDoc.IsEmpty then $2 else
let range = unionRangeWithXmlDoc _xmlDoc range
SynTypeDefnSig(componentInfo, equalsRange, typeRepr, withKeyword, members, range)
SynTypeDefnSig(componentInfo, typeRepr, members, range, trivia)
else
_xmlDoc.MarkAsInvalid()
let range = unionRangeWithXmlDoc xmlDoc range
let componentInfo = SynComponentInfo (a, typars, c, lid, xmlDoc, fixity, vis, mLongId)
SynTypeDefnSig(componentInfo, equalsRange, typeRepr, withKeyword, members, range)
SynTypeDefnSig(componentInfo, typeRepr, members, range, trivia)
tyconSpfn :: $3 }
|
......@@ -936,7 +937,8 @@ tyconSpfn:
| Some mWithKwd -> unionRanges range mWithKwd
| decls ->
(range, decls) ||> unionRangeWithListBy (fun (s: SynMemberSig) -> s.Range)
SynTypeDefnSig($1, None, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None m, m), mWithKwd, members, m) }
let trivia: SynTypeDefnSigTrivia = { TypeKeyword = None; EqualsRange = None; WithKeyword = mWithKwd }
SynTypeDefnSig($1, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None m, m), members, m, trivia) }
/* The right-hand-side of a type definition in a signature */
......@@ -968,7 +970,8 @@ tyconSpfnRhs:
{ (fun mLhs nameInfo mEquals augmentation ->
let declRange = unionRanges mLhs $1.Range
let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range)
SynTypeDefnSig(nameInfo, mEquals, SynTypeDefnSigRepr.Simple ($1, $1.Range), None, augmentation, mWhole)) }
let trivia: SynTypeDefnSigTrivia = { TypeKeyword = None; WithKeyword = None; EqualsRange = mEquals }
SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.Simple ($1, $1.Range), augmentation, mWhole, trivia)) }
| tyconClassSpfn
{ let needsCheck, (kind, decls) = $1
......@@ -985,7 +988,8 @@ tyconSpfnRhs:
let declRange = unionRanges nameRange objectModelRange
let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range)
SynTypeDefnSig(nameInfo, mEquals, SynTypeDefnSigRepr.ObjectModel (kind, decls, objectModelRange), None, augmentation, mWhole)) }
let trivia: SynTypeDefnSigTrivia = { TypeKeyword = None; WithKeyword = None; EqualsRange = mEquals }
SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (kind, decls, objectModelRange), augmentation, mWhole, trivia)) }
| DELEGATE OF topType
{ let m = lhs parseState
......@@ -994,7 +998,8 @@ tyconSpfnRhs:
(fun nameRange nameInfo mEquals augmentation ->
if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType())
let mWhole = unionRanges nameRange m
SynTypeDefnSig(nameInfo, mEquals, SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), None, [], mWhole)) }
let trivia: SynTypeDefnSigTrivia = { TypeKeyword = None; WithKeyword = None; EqualsRange = mEquals }
SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), [], mWhole, trivia)) }
/* The right-hand-side of an object type definition in a signature */
......@@ -1675,7 +1680,7 @@ tyconDefn:
let mWhole = (declRange, members)
||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range)
|> unionRangeWithXmlDoc xmlDoc
let trivia = { TypeKeyword = None; EqualsRange = Some mEquals; WithKeyword = mWith }
let trivia: SynTypeDefnTrivia = { TypeKeyword = None; EqualsRange = Some mEquals; WithKeyword = mWith }
SynTypeDefn($1, tcDefRepr, members, Some memberCtorPattern, mWhole, trivia) }
......
......@@ -8799,9 +8799,11 @@ FSharp.Compiler.Syntax.SynTypeDefnRepr: System.String ToString()
FSharp.Compiler.Syntax.SynTypeDefnSig
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo()
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo typeInfo
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynComponentInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynTypeDefnSigRepr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia)
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr get_typeRepr()
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr typeRepr
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia get_trivia()
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia trivia
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range Range
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range get_Range()
FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range get_range()
......@@ -8810,10 +8812,6 @@ FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 Tag
FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 get_Tag()
FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_members()
FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] members
FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange
FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange()
FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_withKeyword()
FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] withKeyword
FSharp.Compiler.Syntax.SynTypeDefnSig: System.String ToString()
FSharp.Compiler.Syntax.SynTypeDefnSigRepr
FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_repr()
......@@ -9457,6 +9455,17 @@ FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia: FSharp.Compiler.Text.Range BarRange
FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia: FSharp.Compiler.Text.Range get_BarRange()
FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia: Void .ctor(FSharp.Compiler.Text.Range)
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia get_Zero()
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] EqualsRange
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TypeKeyword
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] WithKeyword
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_EqualsRange()
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_TypeKeyword()
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_WithKeyword()
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynTypeDefnSigTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range])
FSharp.Compiler.SyntaxTrivia.SynTypeDefnTrivia
FSharp.Compiler.SyntaxTrivia.SynTypeDefnTrivia: FSharp.Compiler.SyntaxTrivia.SynTypeDefnTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynTypeDefnTrivia: FSharp.Compiler.SyntaxTrivia.SynTypeDefnTrivia get_Zero()
......
......@@ -173,7 +173,7 @@ type X = delegate of string -> string
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [
SynModuleSigDecl.Types(
types = [ SynTypeDefnSig(equalsRange = Some mEquals
types = [ SynTypeDefnSig(trivia = { EqualsRange = Some mEquals }
typeRepr = SynTypeDefnSigRepr.ObjectModel(kind = SynTypeDefnKind.Delegate _)) ]
)
]) ])) ->
......@@ -195,7 +195,7 @@ type Foobar =
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [
SynModuleSigDecl.Types(
types = [ SynTypeDefnSig(equalsRange = Some mEquals
types = [ SynTypeDefnSig(trivia = { EqualsRange = Some mEquals }
typeRepr = SynTypeDefnSigRepr.ObjectModel(kind = SynTypeDefnKind.Class)) ]
)
]) ])) ->
......@@ -217,7 +217,7 @@ type Bear =
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [
SynModuleSigDecl.Types(
types = [ SynTypeDefnSig(equalsRange = Some mEquals
types = [ SynTypeDefnSig(trivia = { EqualsRange = Some mEquals }
typeRepr = SynTypeDefnSigRepr.Simple(repr =
SynTypeDefnSimpleRepr.Enum(cases = [
SynEnumCase(trivia={ EqualsRange = mEqualsEnumCase1 })
......@@ -245,7 +245,7 @@ type Shape =
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [
SynModuleSigDecl.Types(
types = [ SynTypeDefnSig(equalsRange = Some mEquals
types = [ SynTypeDefnSig(trivia = { EqualsRange = Some mEquals }
typeRepr = SynTypeDefnSigRepr.Simple(repr = SynTypeDefnSimpleRepr.Union _)) ]
)
]) ])) ->
......@@ -267,7 +267,7 @@ member Meh : unit -> unit
| ParsedInput.SigFile (ParsedSigFileInput (modules =[ SynModuleOrNamespaceSig(decls =[
SynModuleSigDecl.Types(
types=[ SynTypeDefnSig(typeRepr=SynTypeDefnSigRepr.Simple _
withKeyword=Some mWithKeyword) ]
trivia = { WithKeyword = Some mWithKeyword }) ]
)
]) ])) ->
assertRange (4, 9) (4, 13) mWithKeyword
......@@ -425,3 +425,49 @@ type X =
assertRange (5, 19) (5, 20) mEquals
assertRange (5, 4) (5, 23) mMember
| _ -> Assert.Fail "Could not get valid AST"
[<Test>]
let ``Trivia is present in SynTypeDefnSig`` () =
let parseResults =
getParseResultsOfSignatureFile
"""
module Meh
type X =
member a : int = 10
/// Represents a line number when using zero-based line counting (used by Visual Studio)
#if CHECK_LINE0_TYPES
#else
type Y = int
#endif
type Z with
static member P : int -> int
"""
match parseResults with
| ParsedInput.SigFile (ParsedSigFileInput (modules=[
SynModuleOrNamespaceSig(decls=[
SynModuleSigDecl.Types(types = [
SynTypeDefnSig(trivia = { TypeKeyword = Some mType1
EqualsRange = Some mEq1
WithKeyword = None }) ])
SynModuleSigDecl.Types(types = [
SynTypeDefnSig(trivia = { TypeKeyword = Some mType2
EqualsRange = Some mEq2
WithKeyword = None }) ])
SynModuleSigDecl.Types(types = [
SynTypeDefnSig(trivia = { TypeKeyword = Some mType3
EqualsRange = None
WithKeyword = Some mWith3 }) ])
] ) ])) ->
()
assertRange (4, 0) (4, 4) mType1
assertRange (4, 7) (4, 8) mEq1
assertRange (11, 0) (11, 4) mType2
assertRange (11, 7) (11, 8) mEq2
assertRange (14, 0) (14, 4) mType3
assertRange (14, 7) (14, 11) mWith3
| _ -> Assert.Fail $"Could not get valid AST, got {parseResults}"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册