diff --git a/src/Compiler/Checking/AugmentWithHashCompare.fs b/src/Compiler/Checking/AugmentWithHashCompare.fs index 59d74eb0335..dd81dc0a575 100644 --- a/src/Compiler/Checking/AugmentWithHashCompare.fs +++ b/src/Compiler/Checking/AugmentWithHashCompare.fs @@ -7,7 +7,6 @@ open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.DiagnosticsLogger open FSharp.Compiler.Syntax -open FSharp.Compiler.SyntaxTrivia open FSharp.Compiler.Xml open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree @@ -856,8 +855,7 @@ let slotImplMethod (final, c, slotsig) : ValMemberInfo = IsFinal=final IsOverrideOrExplicitImpl=true GetterOrSetterIsCompilerGenerated=false - MemberKind=SynMemberKind.Member - Trivia=SynMemberFlagsTrivia.Zero} + MemberKind=SynMemberKind.Member } IsImplemented=false ApparentEnclosingEntity=c} @@ -868,8 +866,7 @@ let nonVirtualMethod c : ValMemberInfo = IsFinal=false IsOverrideOrExplicitImpl=false GetterOrSetterIsCompilerGenerated=false - MemberKind=SynMemberKind.Member - Trivia=SynMemberFlagsTrivia.Zero} + MemberKind=SynMemberKind.Member } IsImplemented=false ApparentEnclosingEntity=c} diff --git a/src/Compiler/Checking/CheckDeclarations.fs b/src/Compiler/Checking/CheckDeclarations.fs index 3bb776b2399..11a372bb5c5 100644 --- a/src/Compiler/Checking/CheckDeclarations.fs +++ b/src/Compiler/Checking/CheckDeclarations.fs @@ -452,13 +452,13 @@ module TcRecdUnionAndEnumDeclarations = | _ -> () rfspec - let TcAnonFieldDecl cenv env parent tpenv nm (SynField(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m)) = + let TcAnonFieldDecl cenv env parent tpenv nm (SynField(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m, _)) = let mName = m.MakeSynthetic() let id = match idOpt with None -> mkSynId mName nm | Some id -> id let xmlDoc = xmldoc.ToXmlDoc(true, Some []) TcFieldDecl cenv env parent false tpenv (isStatic, attribs, id, idOpt.IsNone, ty, isMutable, xmlDoc, vis, m) - let TcNamedFieldDecl cenv env parent isIncrClass tpenv (SynField(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m)) = + let TcNamedFieldDecl cenv env parent isIncrClass tpenv (SynField(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m, _)) = match id with | None -> error (Error(FSComp.SR.tcFieldRequiresName(), m)) | Some id -> @@ -494,10 +494,10 @@ module TcRecdUnionAndEnumDeclarations = match seen.TryGetValue f.LogicalName with | true, synField -> match sf, synField with - | SynField(_, _, Some id, _, _, _, _, _), SynField(_, _, Some _, _, _, _, _, _) -> + | SynField(idOpt = Some id), SynField(idOpt = Some _) -> error(Error(FSComp.SR.tcFieldNameIsUsedModeThanOnce(id.idText), id.idRange)) - | SynField(_, _, Some id, _, _, _, _, _), SynField(_, _, None, _, _, _, _, _) - | SynField(_, _, None, _, _, _, _, _), SynField(_, _, Some id, _, _, _, _, _) -> + | SynField(idOpt = Some id), SynField(idOpt = None) + | SynField(idOpt = None), SynField(idOpt = Some id) -> error(Error(FSComp.SR.tcFieldNameConflictsWithGeneratedNameForAnonymousField(id.idText), id.idRange)) | _ -> assert false | _ -> @@ -2377,7 +2377,7 @@ module EstablishTypeDefinitionCores = for SynUnionCase (caseType=args; range=m) in unionCases do match args with | SynUnionCaseKind.Fields flds -> - for SynField(_, _, _, ty, _, _, _, m) in flds do + for SynField(fieldType = ty; range = m) in flds do let tyR, _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType WarnOnIWSAM.Yes env tpenv ty yield (tyR, m) @@ -2394,7 +2394,7 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.General (_, _, _, fields, _, _, implicitCtorSynPats, _) when tycon.IsFSharpStructOrEnumTycon -> // for structs for field in fields do - let (SynField(_, isStatic, _, ty, _, _, _, m)) = field + let (SynField(isStatic = isStatic; fieldType = ty; range = m)) = field if not isStatic then let tyR, _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType WarnOnIWSAM.Yes env tpenv ty yield (tyR, m) @@ -2414,7 +2414,7 @@ module EstablishTypeDefinitionCores = yield (ty, m) | SynTypeDefnSimpleRepr.Record (_, fields, _) -> - for SynField(_, _, _, ty, _, _, _, m) in fields do + for SynField(fieldType = ty; range = m) in fields do let tyR, _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType WarnOnIWSAM.Yes env tpenv ty yield (tyR, m) @@ -3998,7 +3998,7 @@ module TcDeclarations = | SynTypeDefnRepr.ObjectModel(kind, cspec, m) -> let cspec = desugarGetSetMembers cspec CheckMembersForm cspec - let fields = cspec |> List.choose (function SynMemberDefn.ValField (f, _) -> Some f | _ -> None) + let fields = cspec |> List.choose (function SynMemberDefn.ValField (fieldInfo = f) -> Some f | _ -> None) let implements2 = cspec |> List.choose (function SynMemberDefn.Interface (interfaceType=ty) -> Some(ty, ty.Range) | _ -> None) let inherits = cspec |> List.choose (function @@ -4056,7 +4056,7 @@ module TcDeclarations = // Convert auto properties to member bindings in the post-list let rec postAutoProps memb = match memb with - | SynMemberDefn.AutoProperty(attributes=Attributes attribs; isStatic=isStatic; ident=id; typeOpt=tyOpt; propKind=propKind; memberFlags=memberFlags; memberFlagsForSet=memberFlagsForSet; xmlDoc=xmlDoc; accessibility=access; getSetRange=mGetSetOpt) -> + | SynMemberDefn.AutoProperty(attributes=Attributes attribs; isStatic=isStatic; ident=id; typeOpt=tyOpt; propKind=propKind; memberFlags=memberFlags; memberFlagsForSet=memberFlagsForSet; xmlDoc=xmlDoc; accessibility=access; trivia = { GetSetKeyword = mGetSetOpt }) -> let mMemberPortion = id.idRange // Only the keep the non-field-targeted attributes let attribs = attribs |> List.filter (fun a -> match a.Target with Some t when t.idText = "field" -> false | _ -> true) diff --git a/src/Compiler/Checking/CheckExpressions.fs b/src/Compiler/Checking/CheckExpressions.fs index a83ef7d669b..9e6524f2627 100644 --- a/src/Compiler/Checking/CheckExpressions.fs +++ b/src/Compiler/Checking/CheckExpressions.fs @@ -6705,7 +6705,7 @@ and TcObjectExprBinding (cenv: cenv) (env: TcEnv) implTy tpenv (absSlotInfo, bin | SynPat.Named (SynIdent(id,_), _, _, _), None -> let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar (ident (CompilerGeneratedName "this", id.idRange))) bindingRhs let logicalMethId = id - let memberFlags = OverrideMemberFlags SynMemberFlagsTrivia.Zero SynMemberKind.Member + let memberFlags = OverrideMemberFlags SynMemberKind.Member bindingRhs, logicalMethId, memberFlags | SynPat.InstanceMember(thisId, memberId, _, _, _), Some memberFlags -> @@ -8579,7 +8579,7 @@ and TcImplicitOpItemThen (cenv: cenv) overallTy env id sln tpenv mItem delayed = let vs, ves = argTys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg" + string i) ty) |> List.unzip - let memberFlags = StaticMemberFlags SynMemberFlagsTrivia.Zero SynMemberKind.Member + let memberFlags = StaticMemberFlags SynMemberKind.Member let logicalCompiledName = ComputeLogicalName id memberFlags let traitInfo = TTrait(argTys, logicalCompiledName, memberFlags, argTys, Some retTy, sln) diff --git a/src/Compiler/Checking/CheckIncrementalClasses.fs b/src/Compiler/Checking/CheckIncrementalClasses.fs index c58414dfb00..893cdc4e193 100644 --- a/src/Compiler/Checking/CheckIncrementalClasses.fs +++ b/src/Compiler/Checking/CheckIncrementalClasses.fs @@ -14,7 +14,6 @@ open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.DiagnosticsLogger open FSharp.Compiler.NameResolution open FSharp.Compiler.Syntax -open FSharp.Compiler.SyntaxTrivia open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.Text open FSharp.Compiler.Xml @@ -122,7 +121,7 @@ let TcImplicitCtorLhs_Phase2A(cenv: cenv, env, tpenv, tcref: TyconRef, vis, attr // NOTE: no attributes can currently be specified for the implicit constructor let attribs = TcAttributes cenv env (AttributeTargets.Constructor ||| AttributeTargets.Method) attrs - let memberFlags = CtorMemberFlags SynMemberFlagsTrivia.Zero + let memberFlags = CtorMemberFlags let synArgInfos = List.map (SynInfo.InferSynArgInfoFromSimplePat []) spats let valSynData = SynValInfo([synArgInfos], SynInfo.unnamedRetVal) @@ -150,8 +149,8 @@ let TcImplicitCtorLhs_Phase2A(cenv: cenv, env, tpenv, tcref: TyconRef, vis, attr let cctorTy = mkFunTy g g.unit_ty g.unit_ty let valSynData = SynValInfo([[]], SynInfo.unnamedRetVal) let id = ident ("cctor", m) - CheckForNonAbstractInterface ModuleOrMemberBinding tcref (ClassCtorMemberFlags SynMemberFlagsTrivia.Zero) id.idRange - let memberInfo = MakeMemberDataAndMangledNameForMemberVal(g, tcref, false, [], [], (ClassCtorMemberFlags SynMemberFlagsTrivia.Zero), valSynData, id, false) + CheckForNonAbstractInterface ModuleOrMemberBinding tcref ClassCtorMemberFlags id.idRange + let memberInfo = MakeMemberDataAndMangledNameForMemberVal(g, tcref, false, [], [], ClassCtorMemberFlags, valSynData, id, false) let prelimValReprInfo = TranslateSynValInfo m (TcAttributes cenv env) valSynData let prelimTyschemeG = GeneralizedType(copyOfTyconTypars, cctorTy) let valReprInfo = InferGenericArityFromTyScheme prelimTyschemeG prelimValReprInfo @@ -323,7 +322,7 @@ type IncrClassReprInfo = let tps, _, argInfos, _, _ = GetValReprTypeInCompiledForm g valReprInfo 0 v.Type v.Range let valSynInfo = SynValInfo(argInfos |> List.mapSquared (fun (_, argInfo) -> SynArgInfo([], false, argInfo.Name)), SynInfo.unnamedRetVal) - let memberFlags = (if isStatic then StaticMemberFlags else NonVirtualMemberFlags) SynMemberFlagsTrivia.Zero SynMemberKind.Member + let memberFlags = (if isStatic then StaticMemberFlags else NonVirtualMemberFlags) SynMemberKind.Member let id = mkSynId v.Range name let memberInfo = MakeMemberDataAndMangledNameForMemberVal(g, tcref, false, [], [], memberFlags, valSynInfo, mkSynId v.Range name, true) diff --git a/src/Compiler/Service/ServiceInterfaceStubGenerator.fs b/src/Compiler/Service/ServiceInterfaceStubGenerator.fs index bf28a121d43..a5a3f8d844a 100644 --- a/src/Compiler/Service/ServiceInterfaceStubGenerator.fs +++ b/src/Compiler/Service/ServiceInterfaceStubGenerator.fs @@ -841,7 +841,7 @@ module InterfaceStubGenerator = | None, Some binding -> walkBinding binding | Some getBinding, Some setBinding -> walkBinding getBinding |> Option.orElseWith (fun () -> walkBinding setBinding) | SynMemberDefn.NestedType (typeDef, _access, _range) -> walkSynTypeDefn typeDef - | SynMemberDefn.ValField (_field, _range) -> None + | SynMemberDefn.ValField _ -> None | SynMemberDefn.LetBindings (bindings, _isStatic, _isRec, _range) -> List.tryPick walkBinding bindings | SynMemberDefn.Open _ | SynMemberDefn.ImplicitCtor _ diff --git a/src/Compiler/Service/ServiceNavigation.fs b/src/Compiler/Service/ServiceNavigation.fs index c38ce9793e2..8f5a4acb2b1 100755 --- a/src/Compiler/Service/ServiceNavigation.fs +++ b/src/Compiler/Service/ServiceNavigation.fs @@ -118,7 +118,7 @@ module NavigationImpl = match fldspec with | SynUnionCaseKind.Fields (flds) -> flds - |> List.fold (fun st (SynField (_, _, _, _, _, _, _, m)) -> unionRangesChecked m st) range.Zero + |> List.fold (fun st (SynField (range = m)) -> unionRangesChecked m st) range.Zero | SynUnionCaseKind.FullType (ty, _) -> ty.Range let bodyRange mBody decls = @@ -292,7 +292,7 @@ module NavigationImpl = | SynTypeDefnSimpleRepr.Record (_, fields, mBody) -> let fields = [ - for SynField (_, _, id, _, _, _, _, m) in fields do + for SynField (idOpt = id; range = m) in fields do match id with | Some ident -> yield createMember (ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) | _ -> () @@ -328,7 +328,7 @@ module NavigationImpl = | SynMemberDefn.GetSetMember (Some bind, None, _, _) | SynMemberDefn.GetSetMember (None, Some bind, _, _) | SynMemberDefn.Member (bind, _) -> processBinding true enclosingEntityKind false bind - | SynMemberDefn.ValField (SynField (_, _, Some (rcid), _, _, _, access, range), _) -> + | SynMemberDefn.ValField(fieldInfo = SynField (idOpt = Some rcid; accessibility = access; range = range)) -> [ createMember (rcid, NavigationItemKind.Field, FSharpGlyph.Field, range, enclosingEntityKind, false, access) ] @@ -534,7 +534,7 @@ module NavigationImpl = | SynTypeDefnSimpleRepr.Record (_, fields, mBody) -> let fields = [ - for SynField (_, _, id, _, _, _, _, m) in fields do + for SynField (idOpt = id; range = m) in fields do match id with | Some ident -> yield createMember (ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) | _ -> () @@ -559,7 +559,7 @@ module NavigationImpl = match memb with | SynMemberSig.Member (SynValSig.SynValSig (ident = SynIdent (id, _); accessibility = access; range = m), _, _) -> createMember (id, NavigationItemKind.Method, FSharpGlyph.Method, m, NavigationEntityKind.Class, false, access) - | SynMemberSig.ValField (SynField (_, _, Some (rcid), ty, _, _, access, _), _) -> + | SynMemberSig.ValField (SynField (idOpt = Some rcid; fieldType = ty; accessibility = access), _) -> createMember (rcid, NavigationItemKind.Field, FSharpGlyph.Field, ty.Range, NavigationEntityKind.Class, false, access) | _ -> () ] @@ -767,7 +767,7 @@ module NavigateTo = addIdent kind id isSig container let addField synField isSig container = - let (SynField (_, _, id, _, _, _, _, _)) = synField + let (SynField (idOpt = id)) = synField match id with | Some id -> addIdent NavigableItemKind.Field id isSig container @@ -993,7 +993,7 @@ module NavigateTo = Option.iter (fun b -> addBinding b None container) getBinding Option.iter (fun b -> addBinding b None container) setBinding | SynMemberDefn.NestedType (typeDef, _, _) -> walkSynTypeDefn typeDef container - | SynMemberDefn.ValField (field, _) -> addField field false container + | SynMemberDefn.ValField (fieldInfo = field) -> addField field false container | SynMemberDefn.LetBindings (bindings, _, _, _) -> bindings |> List.iter (fun binding -> addBinding binding (Some NavigableItemKind.Field) container) diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fs b/src/Compiler/Service/ServiceParseTreeWalk.fs index 274d2741365..25e7544fb03 100755 --- a/src/Compiler/Service/ServiceParseTreeWalk.fs +++ b/src/Compiler/Service/ServiceParseTreeWalk.fs @@ -941,7 +941,7 @@ module SyntaxTraversal = |> pick x | ok -> ok | SynMemberDefn.Inherit (synType, _identOption, range) -> traverseInherit (synType, range) - | SynMemberDefn.ValField (_synField, _range) -> None + | SynMemberDefn.ValField _ -> None | SynMemberDefn.NestedType (synTypeDefn, _synAccessOption, _range) -> traverseSynTypeDefn path synTypeDefn and traverseSynMatchClause origPath mc = diff --git a/src/Compiler/Service/ServiceParsedInputOps.fs b/src/Compiler/Service/ServiceParsedInputOps.fs index 3ff647478a8..7317df67378 100644 --- a/src/Compiler/Service/ServiceParsedInputOps.fs +++ b/src/Compiler/Service/ServiceParsedInputOps.fs @@ -857,7 +857,7 @@ module ParsedInput = | _ -> None and walkField synField = - let (SynField (Attributes attrs, _, _, t, _, _, _, _)) = synField + let (SynField (attributes = Attributes attrs; fieldType = t)) = synField List.tryPick walkAttribute attrs |> Option.orElseWith (fun () -> walkType t) and walkValSig synValSig = @@ -906,7 +906,7 @@ module ParsedInput = | SynMemberDefn.Inherit (t, _, _) -> walkType t - | SynMemberDefn.ValField (field, _) -> walkField field + | SynMemberDefn.ValField (fieldInfo = field) -> walkField field | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef @@ -1853,7 +1853,7 @@ module ParsedInput = walkType t | _ -> () - and walkField (SynField (Attributes attrs, _, _, t, _, _, _, _)) = + and walkField (SynField (attributes = Attributes attrs; fieldType = t)) = List.iter walkAttribute attrs walkType t @@ -1904,7 +1904,7 @@ module ParsedInput = walkType t members |> Option.iter (List.iter walkMember) | SynMemberDefn.Inherit (t, _, _) -> walkType t - | SynMemberDefn.ValField (field, _) -> walkField field + | SynMemberDefn.ValField (fieldInfo = field) -> walkField field | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef | SynMemberDefn.AutoProperty (attributes = Attributes attrs; typeOpt = t; synExpr = e) -> List.iter walkAttribute attrs diff --git a/src/Compiler/Service/ServiceStructure.fs b/src/Compiler/Service/ServiceStructure.fs index 210f3f4f9e8..5e381130ed8 100644 --- a/src/Compiler/Service/ServiceStructure.fs +++ b/src/Compiler/Service/ServiceStructure.fs @@ -639,7 +639,7 @@ module Structure = | SynTypeDefnSimpleRepr.Record (_, fields, rr) -> rcheck Scope.RecordDefn Collapse.Same rr rr - for SynField (attrs, _, _, _, _, _, _, fr) in fields do + for SynField (attributes = attrs; range = fr) in fields do rcheck Scope.RecordField Collapse.Below fr fr parseAttributes attrs @@ -893,7 +893,7 @@ module Structure = | SynMemberSig.Member (valSigs, _, r) -> let collapse = Range.endToEnd valSigs.RangeOfId r rcheck Scope.Member Collapse.Below r collapse - | SynMemberSig.ValField (SynField (attrs, _, _, _, _, _, _, fr), mFull) -> + | SynMemberSig.ValField (SynField (attributes = attrs; range = fr), mFull) -> let collapse = Range.endToEnd fr mFull rcheck Scope.Val Collapse.Below mFull collapse parseAttributes attrs diff --git a/src/Compiler/SyntaxTree/ParseHelpers.fs b/src/Compiler/SyntaxTree/ParseHelpers.fs index ca0b858a0ba..b97bfe2f7c8 100644 --- a/src/Compiler/SyntaxTree/ParseHelpers.fs +++ b/src/Compiler/SyntaxTree/ParseHelpers.fs @@ -428,7 +428,7 @@ let mkSynMemberDefnGetSet (propertyNameBindingPat: SynPat) (optPropertyType: SynReturnInfo option) (visNoLongerUsed: SynAccess option) - (memFlagsBuilder: SynMemberKind -> SynMemberFlags) + flagsBuilderAndLeadingKeyword (attrs: SynAttributeList list) (rangeStart: range) : SynMemberDefn list = @@ -436,6 +436,7 @@ let mkSynMemberDefnGetSet let mutable hasGet = false let mutable hasSet = false + let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword let xmlDoc = grabXmlDocAtRangeStart (parseState, attrs, rangeStart) let tryMkSynMemberDefnMember @@ -467,9 +468,8 @@ let mkSynMemberDefnGetSet let trivia: SynBindingTrivia = { - LetKeyword = None + LeadingKeyword = leadingKeyword EqualsRange = mEquals - ExternKeyword = None } let binding = @@ -540,13 +540,6 @@ let mkSynMemberDefnGetSet | _ -> optReturnType // REDO with the correct member kind - let trivia: SynBindingTrivia = - { - LetKeyword = None - EqualsRange = mEquals - ExternKeyword = None - } - let binding = mkSynBinding (PreXmlDoc.Empty, bindingPat) @@ -627,14 +620,6 @@ let mkSynMemberDefnGetSet // replacing the get/set identifier. A little gross. let (bindingPatAdjusted, getOrSetIdentOpt), xmlDocAdjusted = - - let trivia: SynBindingTrivia = - { - LetKeyword = None - EqualsRange = mEquals - ExternKeyword = None - } - let bindingOuter = mkSynBinding (xmlDoc, propertyNameBindingPat) @@ -894,7 +879,7 @@ let mkUnderscoreRecdField m = let mkRecdField (lidwd: SynLongIdent) = lidwd, true // Used for 'do expr' in a class. -let mkSynDoBinding (vis: SynAccess option, expr, m) = +let mkSynDoBinding (vis: SynAccess option, mDo, expr, m) = match vis with | Some vis -> errorR (Error(FSComp.SR.parsDoCannotHaveVisibilityDeclarations (vis.ToString()), m)) | None -> () @@ -912,7 +897,10 @@ let mkSynDoBinding (vis: SynAccess option, expr, m) = expr, m, DebugPointAtBinding.NoneAtDo, - SynBindingTrivia.Zero + { + LeadingKeyword = SynLeadingKeyword.Do mDo + EqualsRange = None + } ) let mkSynExprDecl (e: SynExpr) = SynModuleDecl.Expr(e, e.Range) @@ -997,6 +985,30 @@ let mkClassMemberLocalBindings if isUse then errorR (Error(FSComp.SR.parsUseBindingsIllegalInImplicitClassConstructors (), mWhole)) + let decls = + match initialRangeOpt, decls with + | _, [] -> [] + | Some mStatic, SynBinding (a0, k, il, im, a, x, v, h, ri, e, m, dp, trivia) :: rest -> + // prepend static keyword to existing leading keyword. + let trivia = + match trivia.LeadingKeyword with + | SynLeadingKeyword.LetRec (mLet, mRec) -> + { trivia with + LeadingKeyword = SynLeadingKeyword.StaticLetRec(mStatic, mLet, mRec) + } + | SynLeadingKeyword.Let mLet -> + { trivia with + LeadingKeyword = SynLeadingKeyword.StaticLet(mStatic, mLet) + } + | SynLeadingKeyword.Do mDo -> + { trivia with + LeadingKeyword = SynLeadingKeyword.StaticDo(mStatic, mDo) + } + | _ -> trivia + + SynBinding(a0, k, il, im, a, x, v, h, ri, e, m, dp, trivia) :: rest + | None, decls -> decls + SynMemberDefn.LetBindings(decls, isStatic, isRec, mWhole) let mkLocalBindings (mWhole, BindingSetPreAttrs (_, isRec, isUse, declsPreAttrs, _), mIn, body: SynExpr) = @@ -1056,3 +1068,11 @@ let checkForMultipleAugmentations m a1 a2 = let rangeOfLongIdent (lid: LongIdent) = System.Diagnostics.Debug.Assert(not lid.IsEmpty, "the parser should never produce a long-id that is the empty list") (lid.Head.idRange, lid) ||> unionRangeWithListBy (fun id -> id.idRange) + +let appendValToLeadingKeyword mVal leadingKeyword = + match leadingKeyword with + | SynLeadingKeyword.StaticMember (mStatic, mMember) -> SynLeadingKeyword.StaticMemberVal(mStatic, mMember, mVal) + | SynLeadingKeyword.Member mMember -> SynLeadingKeyword.MemberVal(mMember, mVal) + | SynLeadingKeyword.Override mOverride -> SynLeadingKeyword.OverrideVal(mOverride, mVal) + | SynLeadingKeyword.Default (mDefault) -> SynLeadingKeyword.DefaultVal(mDefault, mVal) + | _ -> leadingKeyword diff --git a/src/Compiler/SyntaxTree/ParseHelpers.fsi b/src/Compiler/SyntaxTree/ParseHelpers.fsi index b5f9bac57f9..1192608dbfb 100644 --- a/src/Compiler/SyntaxTree/ParseHelpers.fsi +++ b/src/Compiler/SyntaxTree/ParseHelpers.fsi @@ -4,6 +4,7 @@ module internal FSharp.Compiler.ParseHelpers open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTrivia open FSharp.Compiler.Features open FSharp.Compiler.Text open FSharp.Compiler.Xml @@ -84,7 +85,7 @@ module LexbufIfdefStore = val SaveEndIfHash: lexbuf: UnicodeLexing.Lexbuf * lexed: string * range: range -> unit - val GetTrivia: lexbuf: UnicodeLexing.Lexbuf -> SyntaxTrivia.ConditionalDirectiveTrivia list + val GetTrivia: lexbuf: UnicodeLexing.Lexbuf -> ConditionalDirectiveTrivia list module LexbufCommentStore = @@ -92,7 +93,7 @@ module LexbufCommentStore = val SaveBlockComment: lexbuf: UnicodeLexing.Lexbuf * startRange: range * endRange: range -> unit - val GetComments: lexbuf: UnicodeLexing.Lexbuf -> SyntaxTrivia.CommentTrivia list + val GetComments: lexbuf: UnicodeLexing.Lexbuf -> CommentTrivia list val ClearComments: lexbuf: UnicodeLexing.Lexbuf -> unit @@ -171,10 +172,10 @@ val mkSynMemberDefnGetSet: propertyNameBindingPat: SynPat -> optPropertyType: SynReturnInfo option -> visNoLongerUsed: SynAccess option -> - memFlagsBuilder: (SynMemberKind -> SynMemberFlags) -> - attrs: SynAttributeList list -> - rangeStart: range -> - SynMemberDefn list + flagsBuilderAndLeadingKeyword: (SynMemberKind -> SynMemberFlags) * SynLeadingKeyword -> + attrs: SynAttributeList list -> + rangeStart: range -> + SynMemberDefn list /// Incorporate a '^' for an qualified access to a generic type parameter val adjustHatPrefixToTyparLookup: mFull: range -> rightExpr: SynExpr -> SynExpr @@ -201,7 +202,7 @@ val mkUnderscoreRecdField: m: range -> SynLongIdent * bool val mkRecdField: lidwd: SynLongIdent -> SynLongIdent * bool -val mkSynDoBinding: vis: SynAccess option * expr: SynExpr * m: range -> SynBinding +val mkSynDoBinding: vis: SynAccess option * mDo: range * expr: SynExpr * m: range -> SynBinding val mkSynExprDecl: e: SynExpr -> SynModuleDecl @@ -233,3 +234,5 @@ val idOfPat: parseState: IParseState -> m: range -> p: SynPat -> Ident val checkForMultipleAugmentations: m: range -> a1: 'a list -> a2: 'a list -> 'a list val rangeOfLongIdent: lid: LongIdent -> range + +val appendValToLeadingKeyword: mVal: range -> leadingKeyword: SynLeadingKeyword -> SynLeadingKeyword diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fs b/src/Compiler/SyntaxTree/SyntaxTree.fs index 051bb1e7af8..bdbf10665d0 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fs +++ b/src/Compiler/SyntaxTree/SyntaxTree.fs @@ -1082,8 +1082,6 @@ type SynMemberFlags = GetterOrSetterIsCompilerGenerated: bool MemberKind: SynMemberKind - - Trivia: SynMemberFlagsTrivia } override this.Equals other = @@ -1273,7 +1271,8 @@ type SynField = isMutable: bool * xmlDoc: PreXmlDoc * accessibility: SynAccess option * - range: range + range: range * + trivia: SynFieldTrivia [] type SynComponentInfo = @@ -1440,11 +1439,9 @@ type SynMemberDefn = memberFlagsForSet: SynMemberFlags * xmlDoc: PreXmlDoc * accessibility: SynAccess option * - equalsRange: range * synExpr: SynExpr * - withKeyword: range option * - getSetRange: range option * - range: range + range: range * + trivia: SynMemberDefnAutoPropertyTrivia member d.Range = match d with diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fsi b/src/Compiler/SyntaxTree/SyntaxTree.fsi index 4ecffe92ef4..eeee35985e0 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTree.fsi @@ -1232,9 +1232,6 @@ type SynMemberFlags = /// The kind of the member MemberKind: SynMemberKind - - /// Additional information - Trivia: SynMemberFlagsTrivia } /// Note the member kind is actually computed partially by a syntax tree transformation in tc.fs @@ -1429,7 +1426,8 @@ type SynField = isMutable: bool * xmlDoc: PreXmlDoc * accessibility: SynAccess option * - range: range + range: range * + trivia: SynFieldTrivia /// Represents the syntax tree associated with the name of a type definition or module /// in signature or implementation. @@ -1623,11 +1621,9 @@ type SynMemberDefn = memberFlagsForSet: SynMemberFlags * xmlDoc: PreXmlDoc * accessibility: SynAccess option * - equalsRange: range * synExpr: SynExpr * - withKeyword: range option * - getSetRange: range option * - range: range + range: range * + trivia: SynMemberDefnAutoPropertyTrivia /// Gets the syntax range of this construct member Range: range diff --git a/src/Compiler/SyntaxTree/SyntaxTreeOps.fs b/src/Compiler/SyntaxTree/SyntaxTreeOps.fs index fda76bc0e47..56eb08fee4f 100644 --- a/src/Compiler/SyntaxTree/SyntaxTreeOps.fs +++ b/src/Compiler/SyntaxTree/SyntaxTreeOps.fs @@ -172,10 +172,10 @@ let inline unionRangeWithXmlDoc (xmlDoc: PreXmlDoc) range = unionRanges xmlDoc.Range range let mkSynAnonField (ty: SynType, xmlDoc) = - SynField([], false, None, ty, false, xmlDoc, None, unionRangeWithXmlDoc xmlDoc ty.Range) + SynField([], false, None, ty, false, xmlDoc, None, unionRangeWithXmlDoc xmlDoc ty.Range, SynFieldTrivia.Zero) let mkSynNamedField (ident, ty: SynType, xmlDoc, m) = - SynField([], false, Some ident, ty, false, xmlDoc, None, m) + SynField([], false, Some ident, ty, false, xmlDoc, None, m, SynFieldTrivia.Zero) let mkSynPatVar vis (id: Ident) = SynPat.Named(SynIdent(id, None), false, vis, id.idRange) @@ -690,7 +690,7 @@ let mkSynBinding let mBind = unionRangeWithXmlDoc xmlDoc mBind SynBinding(vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, rhsExpr, mBind, spBind, trivia) -let NonVirtualMemberFlags trivia k : SynMemberFlags = +let NonVirtualMemberFlags k : SynMemberFlags = { MemberKind = k IsInstance = true @@ -698,10 +698,9 @@ let NonVirtualMemberFlags trivia k : SynMemberFlags = IsOverrideOrExplicitImpl = false IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia } -let CtorMemberFlags trivia : SynMemberFlags = +let CtorMemberFlags: SynMemberFlags = { MemberKind = SynMemberKind.Constructor IsInstance = false @@ -709,10 +708,9 @@ let CtorMemberFlags trivia : SynMemberFlags = IsOverrideOrExplicitImpl = false IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia } -let ClassCtorMemberFlags trivia : SynMemberFlags = +let ClassCtorMemberFlags: SynMemberFlags = { MemberKind = SynMemberKind.ClassConstructor IsInstance = false @@ -720,10 +718,9 @@ let ClassCtorMemberFlags trivia : SynMemberFlags = IsOverrideOrExplicitImpl = false IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia } -let OverrideMemberFlags trivia k : SynMemberFlags = +let OverrideMemberFlags k : SynMemberFlags = { MemberKind = k IsInstance = true @@ -731,10 +728,9 @@ let OverrideMemberFlags trivia k : SynMemberFlags = IsOverrideOrExplicitImpl = true IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia } -let AbstractMemberFlags isInstance trivia k : SynMemberFlags = +let AbstractMemberFlags isInstance k : SynMemberFlags = { MemberKind = k IsInstance = isInstance @@ -742,10 +738,9 @@ let AbstractMemberFlags isInstance trivia k : SynMemberFlags = IsOverrideOrExplicitImpl = false IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia } -let StaticMemberFlags trivia k : SynMemberFlags = +let StaticMemberFlags k : SynMemberFlags = { MemberKind = k IsInstance = false @@ -753,10 +748,9 @@ let StaticMemberFlags trivia k : SynMemberFlags = IsOverrideOrExplicitImpl = false IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia } -let ImplementStaticMemberFlags trivia k : SynMemberFlags = +let ImplementStaticMemberFlags k : SynMemberFlags = { MemberKind = k IsInstance = false @@ -764,79 +758,6 @@ let ImplementStaticMemberFlags trivia k : SynMemberFlags = IsOverrideOrExplicitImpl = true IsFinal = false GetterOrSetterIsCompilerGenerated = false - Trivia = trivia - } - -let MemberSynMemberFlagsTrivia (mMember: range) : SynMemberFlagsTrivia = - { - MemberRange = Some mMember - OverrideRange = None - AbstractRange = None - StaticRange = None - DefaultRange = None - } - -let OverrideSynMemberFlagsTrivia (mOverride: range) : SynMemberFlagsTrivia = - { - MemberRange = None - OverrideRange = Some mOverride - AbstractRange = None - StaticRange = None - DefaultRange = None - } - -let StaticMemberSynMemberFlagsTrivia (mStatic: range) (mMember: range) : SynMemberFlagsTrivia = - { - MemberRange = Some mMember - OverrideRange = None - AbstractRange = None - StaticRange = Some mStatic - DefaultRange = None - } - -let DefaultSynMemberFlagsTrivia (mDefault: range) : SynMemberFlagsTrivia = - { - MemberRange = None - OverrideRange = None - AbstractRange = None - StaticRange = None - DefaultRange = Some mDefault - } - -let AbstractSynMemberFlagsTrivia (mAbstract: range) : SynMemberFlagsTrivia = - { - MemberRange = None - OverrideRange = None - AbstractRange = Some mAbstract - StaticRange = None - DefaultRange = None - } - -let AbstractMemberSynMemberFlagsTrivia (mAbstract: range) (mMember: range) : SynMemberFlagsTrivia = - { - MemberRange = Some mMember - OverrideRange = None - AbstractRange = Some mAbstract - StaticRange = None - DefaultRange = None - } - -let StaticAbstractSynMemberFlagsTrivia mStatic mAbstract = - { - MemberRange = None - OverrideRange = None - AbstractRange = Some mAbstract - StaticRange = Some mStatic - DefaultRange = None - } - -let StaticAbstractMemberSynMemberFlagsTrivia mStatic mAbstract mMember = - { - MemberRange = Some mMember - OverrideRange = None - AbstractRange = Some mAbstract - StaticRange = Some mStatic - DefaultRange = None } let inferredTyparDecls = SynValTyparDecls(None, true) diff --git a/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi b/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi index bb72345971e..5c9df2c48d7 100644 --- a/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTreeOps.fsi @@ -288,36 +288,19 @@ val mkSynBinding: trivia: SynBindingTrivia -> SynBinding -val NonVirtualMemberFlags: trivia: SynMemberFlagsTrivia -> k: SynMemberKind -> SynMemberFlags +val NonVirtualMemberFlags: k: SynMemberKind -> SynMemberFlags -val CtorMemberFlags: trivia: SynMemberFlagsTrivia -> SynMemberFlags +val CtorMemberFlags: SynMemberFlags -val ClassCtorMemberFlags: trivia: SynMemberFlagsTrivia -> SynMemberFlags +val ClassCtorMemberFlags: SynMemberFlags -val OverrideMemberFlags: trivia: SynMemberFlagsTrivia -> k: SynMemberKind -> SynMemberFlags +val OverrideMemberFlags: k: SynMemberKind -> SynMemberFlags -val AbstractMemberFlags: isInstance: bool -> trivia: SynMemberFlagsTrivia -> k: SynMemberKind -> SynMemberFlags +val AbstractMemberFlags: isInstance: bool -> k: SynMemberKind -> SynMemberFlags -val StaticMemberFlags: trivia: SynMemberFlagsTrivia -> k: SynMemberKind -> SynMemberFlags +val StaticMemberFlags: k: SynMemberKind -> SynMemberFlags -val ImplementStaticMemberFlags: SynMemberFlagsTrivia -> k: SynMemberKind -> SynMemberFlags - -val MemberSynMemberFlagsTrivia: mMember: range -> SynMemberFlagsTrivia - -val OverrideSynMemberFlagsTrivia: mOverride: range -> SynMemberFlagsTrivia - -val StaticMemberSynMemberFlagsTrivia: mStatic: range -> mMember: range -> SynMemberFlagsTrivia - -val DefaultSynMemberFlagsTrivia: mDefault: range -> SynMemberFlagsTrivia - -val AbstractSynMemberFlagsTrivia: mAbstract: range -> SynMemberFlagsTrivia - -val AbstractMemberSynMemberFlagsTrivia: mAbstract: range -> mMember: range -> SynMemberFlagsTrivia - -val StaticAbstractSynMemberFlagsTrivia: mStatic: range -> mAbstract: range -> SynMemberFlagsTrivia - -val StaticAbstractMemberSynMemberFlagsTrivia: - mStatic: range -> mAbstract: range -> mMember: range -> SynMemberFlagsTrivia +val ImplementStaticMemberFlags: k: SynMemberKind -> SynMemberFlags val inferredTyparDecls: SynValTyparDecls diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fs b/src/Compiler/SyntaxTree/SyntaxTrivia.fs index 7c15170e74f..5fe77d929a1 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fs +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fs @@ -155,40 +155,77 @@ type SynTypeDefnSigTrivia = WithKeyword = None } +[] +type SynLeadingKeyword = + | Let of letRange: range + | LetRec of letRange: range * recRange: range + | And of andRange: range + | Use of useRange: range + | UseRec of useRange: range * recRange: range + | Extern of externRange: range + | Member of memberRange: range + | MemberVal of memberRange: range * valRange: range + | Override of overrideRange: range + | OverrideVal of overrideRange: range * valRange: range + | Abstract of abstractRange: range + | AbstractMember of abstractRange: range * memberRange: range + | StaticMember of staticRange: range * memberRange: range + | StaticMemberVal of staticRange: range * memberRange: range * valRange: range + | StaticAbstract of staticRange: range * abstractRange: range + | StaticAbstractMember of staticRange: range * abstractMember: range * memberRange: range + | StaticVal of staticRange: range * valRange: range + | StaticLet of staticRange: range * letRange: range + | StaticLetRec of staticRange: range * letRange: range * recRange: range + | StaticDo of staticRange: range * doRange: range + | Default of defaultRange: range + | DefaultVal of defaultRange: range * valRange: range + | Val of valRange: range + | New of newRange: range + | Do of doRange: range + | Synthetic + + member this.Range = + match this with + | Let m + | And m + | Use m + | Extern m + | Member m + | Override m + | Abstract m + | Default m + | Val m + | New m + | Do m -> m + | LetRec (m1, m2) + | UseRec (m1, m2) + | AbstractMember (m1, m2) + | StaticMember (m1, m2) + | StaticAbstract (m1, m2) + | StaticAbstractMember (m1, _, m2) + | StaticVal (m1, m2) + | StaticLet (m1, m2) + | StaticLetRec (m1, _, m2) + | StaticDo (m1, m2) + | DefaultVal (m1, m2) + | MemberVal (m1, m2) + | OverrideVal (m1, m2) + | StaticMemberVal (m1, _, m2) -> Range.unionRanges m1 m2 + | Synthetic -> Range.Zero + [] type SynBindingTrivia = { - LetKeyword: range option - ExternKeyword: range option + LeadingKeyword: SynLeadingKeyword EqualsRange: range option } static member Zero: SynBindingTrivia = { - LetKeyword = None - ExternKeyword = None + LeadingKeyword = SynLeadingKeyword.Synthetic EqualsRange = None } -[] -type SynMemberFlagsTrivia = - { - MemberRange: range option - OverrideRange: range option - AbstractRange: range option - StaticRange: range option - DefaultRange: range option - } - - static member Zero: SynMemberFlagsTrivia = - { - MemberRange = None - OverrideRange = None - AbstractRange = None - StaticRange = None - DefaultRange = None - } - [] type SynExprAndBangTrivia = { @@ -239,14 +276,14 @@ type SynModuleOrNamespaceSigTrivia = [] type SynValSigTrivia = { - ValKeyword: range option + LeadingKeyword: SynLeadingKeyword WithKeyword: range option EqualsRange: range option } static member Zero: SynValSigTrivia = { - ValKeyword = None + LeadingKeyword = SynLeadingKeyword.Synthetic WithKeyword = None EqualsRange = None } @@ -267,4 +304,20 @@ type SynMemberGetSetTrivia = type SynArgPatsNamePatPairsTrivia = { ParenRange: range } [] +type SynMemberDefnAutoPropertyTrivia = + { + LeadingKeyword: SynLeadingKeyword + WithKeyword: range option + EqualsRange: range option + GetSetKeyword: range option + } + +[] +type SynFieldTrivia = + { + LeadingKeyword: SynLeadingKeyword option + } + + static member Zero: SynFieldTrivia = { LeadingKeyword = None } + type SynTypeOrTrivia = { OrKeyword: range } diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fsi b/src/Compiler/SyntaxTree/SyntaxTrivia.fsi index c52cacea7b2..cae5db553e6 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fsi @@ -239,15 +239,44 @@ type SynTypeDefnSigTrivia = static member Zero: SynTypeDefnSigTrivia +/// Represents the leading keyword in a SynBinding or SynValSig +[] +type SynLeadingKeyword = + | Let of letRange: range + | LetRec of letRange: range * recRange: range + | And of andRange: range + | Use of useRange: range + | UseRec of useRange: range * recRange: range + | Extern of externRange: range + | Member of memberRange: range + | MemberVal of memberRange: range * valRange: range + | Override of overrideRange: range + | OverrideVal of overrideRange: range * valRange: range + | Abstract of abstractRange: range + | AbstractMember of abstractRange: range * memberRange: range + | StaticMember of staticRange: range * memberRange: range + | StaticMemberVal of staticRange: range * memberRange: range * valRange: range + | StaticAbstract of staticRange: range * abstractRange: range + | StaticAbstractMember of staticRange: range * abstractMember: range * memberRange: range + | StaticVal of staticRange: range * valRange: range + | StaticLet of staticRange: range * letRange: range + | StaticLetRec of staticRange: range * letRange: range * recRange: range + | StaticDo of staticRange: range * doRange: range + | Default of defaultRange: range + | DefaultVal of defaultRange: range * valRange: range + | Val of valRange: range + | New of newRange: range + | Do of doRange: range + | Synthetic + + member Range: range + /// Represents additional information for SynBinding [] type SynBindingTrivia = { - /// The syntax range of the `let` keyword. - LetKeyword: range option - - /// The syntax range of the `extern` keyword. - ExternKeyword: range option + /// Used leading keyword of SynBinding + LeadingKeyword: SynLeadingKeyword /// The syntax range of the `=` token. EqualsRange: range option @@ -255,28 +284,6 @@ type SynBindingTrivia = static member Zero: SynBindingTrivia -/// Represents additional information for SynMemberFlags -[] -type SynMemberFlagsTrivia = - { - /// The syntax range of the `member` keyword - MemberRange: range option - - /// The syntax range of the `override` keyword - OverrideRange: range option - - /// The syntax range of the `abstract` keyword - AbstractRange: range option - - /// The syntax range of the `member` keyword - StaticRange: range option - - /// The syntax range of the `default` keyword - DefaultRange: range option - } - - static member Zero: SynMemberFlagsTrivia - /// Represents additional information for SynExprAndBang [] type SynExprAndBangTrivia = @@ -340,8 +347,10 @@ type SynModuleOrNamespaceSigTrivia = [] type SynValSigTrivia = { - /// The syntax range of the `val` keyword - ValKeyword: range option + /// Used leading keyword of SynValSig + /// In most cases this will be `val`, + /// but in case of `SynMemberDefn.AutoProperty` or `SynMemberDefn.AbstractSlot` it could be something else. + LeadingKeyword: SynLeadingKeyword /// The syntax range of the `with` keyword WithKeyword: range option @@ -385,6 +394,33 @@ type SynArgPatsNamePatPairsTrivia = ParenRange: range } +/// Represents additional information for SynMemberDefn.AutoProperty +[] +type SynMemberDefnAutoPropertyTrivia = + { + /// Used leading keyword of AutoProperty + LeadingKeyword: SynLeadingKeyword + + /// The syntax range of the `with` keyword + WithKeyword: range option + + /// The syntax range of the `=` token + EqualsRange: range option + + /// The syntax range of 'get, set' + GetSetKeyword: range option + } + +/// Represents additional information for SynField +[] +type SynFieldTrivia = + { + /// Used leading keyword of SynField + LeadingKeyword: SynLeadingKeyword option + } + + static member Zero: SynFieldTrivia + /// Represents additional information for SynType.Or [] type SynTypeOrTrivia = diff --git a/src/Compiler/TypedTree/TypedTreePickle.fs b/src/Compiler/TypedTree/TypedTreePickle.fs index c367865dbc2..90fd15fa1e2 100644 --- a/src/Compiler/TypedTree/TypedTreePickle.fs +++ b/src/Compiler/TypedTree/TypedTreePickle.fs @@ -21,7 +21,6 @@ open FSharp.Compiler.DiagnosticsLogger open FSharp.Compiler.Text.Position open FSharp.Compiler.Text.Range open FSharp.Compiler.Syntax -open FSharp.Compiler.SyntaxTrivia open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.Text open FSharp.Compiler.Xml @@ -1500,8 +1499,7 @@ let u_MemberFlags st : SynMemberFlags= IsOverrideOrExplicitImpl=x5 IsFinal=x6 GetterOrSetterIsCompilerGenerated=false - MemberKind=x7 - Trivia = SynMemberFlagsTrivia.Zero } + MemberKind=x7 } let fill_u_Expr_hole, u_expr_fwd = u_hole() let fill_p_Expr_hole, p_expr_fwd = p_hole() diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 1dc110accee..3114c476616 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -702,7 +702,8 @@ valSpfn: | None -> m | Some e -> unionRanges m e.Range let mVal = rhs parseState 3 - let valSpfn = SynValSig((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m, { ValKeyword = Some mVal; WithKeyword = None; EqualsRange = mEquals }) + let trivia: SynValSigTrivia = { LeadingKeyword = SynLeadingKeyword.Val mVal; WithKeyword = None; EqualsRange = mEquals } + let valSpfn = SynValSig((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m, trivia) SynModuleSigDecl.Val(valSpfn, m) } @@ -832,7 +833,7 @@ tyconSpfnRhs: | DELEGATE OF topType { let m = lhs parseState let ty, arity = $3 - let flags = AbstractMemberFlags true SynMemberFlagsTrivia.Zero SynMemberKind.Member + let flags = AbstractMemberFlags true SynMemberKind.Member let valSig = SynValSig([], (SynIdent(mkSynId m "Invoke", None)), inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m, SynValSigTrivia.Zero) let invoke = SynMemberSig.Member(valSig, flags, m) (fun nameRange nameInfo mEquals augmentation -> @@ -921,9 +922,11 @@ classMemberSpfn: match optLiteralValue with | None -> m | Some e -> unionRanges m e.Range - let trivia = { ValKeyword = None; WithKeyword = mWith; EqualsRange = mEquals } + + let flags, leadingKeyword = $3 + let flags = flags (getSetAdjuster arity) + let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = mEquals } let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, mWhole, trivia) - let flags = $3 (getSetAdjuster arity) SynMemberSig.Member(valSpfn, flags, mWhole) } | opt_attributes opt_access interfaceMember appType @@ -937,14 +940,17 @@ classMemberSpfn: | opt_attributes opt_access VAL fieldDecl { let mWhole = rhs2 parseState 1 4 if Option.isSome $2 then errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) - let (SynField(_, _, _, _, _, xmlDoc, _, _)) as field = $4 $1 false mWhole + let mVal = rhs parseState 3 + let (SynField(xmlDoc = xmlDoc)) as field = $4 $1 false mWhole (Some (SynLeadingKeyword.Val mVal)) let mWhole = unionRangeWithXmlDoc xmlDoc mWhole SynMemberSig.ValField (field, mWhole) } | opt_attributes opt_access STATIC VAL fieldDecl { let mWhole = rhs2 parseState 1 5 if Option.isSome $2 then errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) - let (SynField(_, _, _, _, _, xmlDoc, _, _)) as field = $5 $1 true mWhole + let mStatic = rhs parseState 3 + let mVal = rhs parseState 4 + let (SynField(xmlDoc = xmlDoc)) as field = $5 $1 true mWhole (Some (SynLeadingKeyword.StaticVal(mStatic, mVal))) let mWhole = unionRangeWithXmlDoc xmlDoc mWhole SynMemberSig.ValField(field, mWhole) } @@ -954,10 +960,12 @@ classMemberSpfn: | opt_attributes opt_access NEW COLON topTypeWithTypeConstraints { let vis, doc, (ty, valSynInfo) = $2, grabXmlDoc(parseState, $1, 1), $5 + let mNew = rhs parseState 3 let m = unionRanges (rhs parseState 1) ty.Range |> unionRangeWithXmlDoc doc - let isInline = false - let valSpfn = SynValSig ($1, (SynIdent(mkSynId (rhs parseState 3) "new", None)), noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m, SynValSigTrivia.Zero) - SynMemberSig.Member(valSpfn, CtorMemberFlags SynMemberFlagsTrivia.Zero, m) } + let isInline = false + let trivia: SynValSigTrivia = { LeadingKeyword = SynLeadingKeyword.New mNew; WithKeyword = None; EqualsRange = None } + let valSpfn = SynValSig ($1, (SynIdent(mkSynId (rhs parseState 3) "new", None)), noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m, trivia) + SynMemberSig.Member(valSpfn, CtorMemberFlags, m) } /* The optional "with get, set" on a member in a signature */ @@ -1438,16 +1446,16 @@ memberFlags: | STATIC MEMBER { let mStatic = rhs parseState 1 let mMember = rhs parseState 2 - StaticMemberFlags(StaticMemberSynMemberFlagsTrivia mStatic mMember) } + StaticMemberFlags, (SynLeadingKeyword.StaticMember(mStatic, mMember)) } | MEMBER { let mMember = rhs parseState 1 - NonVirtualMemberFlags(MemberSynMemberFlagsTrivia mMember) } + NonVirtualMemberFlags, (SynLeadingKeyword.Member mMember) } | OVERRIDE { let mOverride = rhs parseState 1 - OverrideMemberFlags(OverrideSynMemberFlagsTrivia mOverride) } + OverrideMemberFlags, (SynLeadingKeyword.Override mOverride) } | DEFAULT { let mDefault = rhs parseState 1 - OverrideMemberFlags(DefaultSynMemberFlagsTrivia mDefault) } + OverrideMemberFlags, (SynLeadingKeyword.Default mDefault) } /* The name of a type in a signature or implementation, possibly with type parameters and constraints */ typeNameInfo: @@ -1584,7 +1592,7 @@ tyconDefnRhs: let ty, arity = $3 (fun nameRange augmentation -> let valSig = SynValSig([], (SynIdent(mkSynId m "Invoke", None)), inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m, SynValSigTrivia.Zero) - let flags = AbstractMemberFlags true SynMemberFlagsTrivia.Zero SynMemberKind.Member + let flags = AbstractMemberFlags true SynMemberKind.Member let invoke = SynMemberDefn.AbstractSlot(valSig, flags, m) if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), []) } @@ -1702,12 +1710,13 @@ memberCore: let optReturnType = $3 let mEquals = rhs parseState 4 let bindingPat, mBindLhs = $2 - (fun vis memFlagsBuilder attrs rangeStart -> + (fun vis flagsBuilderAndLeadingKeyword attrs rangeStart -> let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart) - let memberFlags = Some (memFlagsBuilder SynMemberKind.Member) + let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword + let memberFlags = memFlagsBuilder SynMemberKind.Member let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let trivia: SynBindingTrivia = { LetKeyword = None; EqualsRange = Some mEquals; ExternKeyword = None } - let binding = mkSynBinding (xmlDoc, bindingPat) (vis, $1, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, $5, mRhs, [], attrs, memberFlags, trivia) + let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; EqualsRange = Some mEquals } + let binding = mkSynBinding (xmlDoc, bindingPat) (vis, $1, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, $5, mRhs, [], attrs, Some memberFlags, trivia) let memberRange = unionRanges rangeStart mRhs |> unionRangeWithXmlDoc xmlDoc [ SynMemberDefn.Member (binding, memberRange) ]) } @@ -1717,17 +1726,26 @@ memberCore: let mWhole = (rhs parseState 2, classDefnMemberGetSetElements) ||> unionRangeWithListBy (fun (_, _, _, _, _, _, m2) -> m2) let propertyNameBindingPat, _ = $2 let optPropertyType = $3 - mkSynMemberDefnGetSet parseState $1 mWith classDefnMemberGetSetElements mAnd mWhole propertyNameBindingPat optPropertyType } + + mkSynMemberDefnGetSet + parseState + $1 + mWith + classDefnMemberGetSetElements + mAnd + mWhole + propertyNameBindingPat + optPropertyType } abstractMemberFlags: | ABSTRACT { let mAbstract = rhs parseState 1 - AbstractMemberFlags true (AbstractSynMemberFlagsTrivia mAbstract) } + AbstractMemberFlags true, SynLeadingKeyword.Abstract mAbstract } | ABSTRACT MEMBER { let mAbstract = rhs parseState 1 let mMember = rhs parseState 2 - AbstractMemberFlags true (AbstractMemberSynMemberFlagsTrivia mAbstract mMember) } + AbstractMemberFlags true, SynLeadingKeyword.AbstractMember(mAbstract, mMember) } | STATIC ABSTRACT { let mWhole = rhs2 parseState 1 2 @@ -1736,7 +1754,7 @@ abstractMemberFlags: warning(Error(FSComp.SR.tcUsingInterfacesWithStaticAbstractMethods(), mWhole)) let mStatic = rhs parseState 1 let mAbstract = rhs parseState 2 - AbstractMemberFlags false (StaticAbstractSynMemberFlagsTrivia mStatic mAbstract) } + AbstractMemberFlags false, SynLeadingKeyword.StaticAbstract(mStatic, mAbstract) } | STATIC ABSTRACT MEMBER { let mWhole = rhs2 parseState 1 2 @@ -1746,7 +1764,7 @@ abstractMemberFlags: let mStatic = rhs parseState 1 let mAbstract = rhs parseState 2 let mMember = rhs parseState 3 - AbstractMemberFlags false (StaticAbstractMemberSynMemberFlagsTrivia mStatic mAbstract mMember) } + AbstractMemberFlags false, SynLeadingKeyword.StaticAbstractMember(mStatic, mAbstract, mMember) } /* A member definition */ classDefnMember: @@ -1786,9 +1804,11 @@ classDefnMember: | Some m2 -> unionRanges m m2 |> unionRangeWithXmlDoc doc if Option.isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(), mWhole)) - let trivia = { ValKeyword = None; WithKeyword = mWith; EqualsRange = None } + let mkFlags, leadingKeyword = $3 + let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = None } let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, mWhole, trivia) - [ SynMemberDefn.AbstractSlot(valSpfn, $3 (getSetAdjuster arity), mWhole) ] } + + [ SynMemberDefn.AbstractSlot(valSpfn, mkFlags (getSetAdjuster arity), mWhole) ] } | opt_attributes opt_access inheritsDefn { if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesIllegalOnInherit(), rhs parseState 1)) @@ -1798,12 +1818,13 @@ classDefnMember: | opt_attributes opt_access valDefnDecl opt_ODECLEND { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) let rangeStart = rhs parseState 1 - $3 rangeStart $1 false } + $3 rangeStart $1 None } | opt_attributes opt_access STATIC valDefnDecl opt_ODECLEND { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) + let mStatic = rhs parseState 3 let rangeStart = rhs parseState 1 - $4 rangeStart $1 true } + $4 rangeStart $1 (Some mStatic) } | opt_attributes opt_access memberFlags autoPropsDefnDecl opt_ODECLEND { let rangeStart = rhs parseState 1 @@ -1814,16 +1835,17 @@ classDefnMember: | opt_attributes opt_access NEW atomicPattern optAsSpec EQUALS typedSequentialExprBlock opt_ODECLEND { let mWholeBindLhs = rhs2 parseState 1 (if Option.isSome $5 then 5 else 4) + let mNew = rhs parseState 3 let xmlDoc = grabXmlDoc(parseState, $1, 1) let m = unionRanges mWholeBindLhs $7.Range |> unionRangeWithXmlDoc xmlDoc let mEquals = rhs parseState 6 let expr = $7 - let valSynData = SynValData (Some (CtorMemberFlags SynMemberFlagsTrivia.Zero), SynValInfo([SynInfo.InferSynArgInfoFromPat $4], SynInfo.unnamedRetVal), $5) + let valSynData = SynValData (Some CtorMemberFlags, SynValInfo([SynInfo.InferSynArgInfoFromPat $4], SynInfo.unnamedRetVal), $5) let vis = $2 let declPat = SynPat.LongIdent (SynLongIdent([mkSynId (rhs parseState 3) "new"], [], [None]), None, Some noInferredTypars, SynArgPats.Pats [$4], vis, rhs parseState 3) // Check that 'SynPatForConstructorDecl' matches this correctly assert (match declPat with SynPatForConstructorDecl _ -> true | _ -> false) - let synBindingTrivia: SynBindingTrivia = { LetKeyword = None; EqualsRange = Some mEquals; ExternKeyword = None } + let synBindingTrivia: SynBindingTrivia = { LeadingKeyword = SynLeadingKeyword.New mNew; EqualsRange = Some mEquals } [ SynMemberDefn.Member(SynBinding (None, SynBindingKind.Normal, false, false, $1, xmlDoc, valSynData, declPat, None, expr, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, synBindingTrivia), m) ] } | opt_attributes opt_access STATIC typeKeyword tyconDefn @@ -1834,29 +1856,39 @@ classDefnMember: /* A 'val' definition in an object type definition */ valDefnDecl: | VAL opt_mutable opt_access ident COLON typ - { let mRhs = rhs2 parseState 4 6 + { let mVal = rhs parseState 1 + let mRhs = rhs2 parseState 4 6 let mValDecl = rhs2 parseState 1 6 - (fun rangeStart attribs isStatic -> + (fun rangeStart attribs mStaticOpt -> + let isStatic = Option.isSome mStaticOpt let xmlDoc = grabXmlDocAtRangeStart(parseState, attribs, rangeStart) let mValDecl = unionRanges rangeStart mValDecl |> unionRangeWithXmlDoc xmlDoc - let fld = SynField(attribs, isStatic, Some $4, $6, $2, xmlDoc, $3, mRhs) + let leadingKeyword = + match mStaticOpt with + | None -> SynLeadingKeyword.Val mVal + | Some mStatic -> SynLeadingKeyword.StaticVal(mStatic, mVal) + let fld = SynField(attribs, isStatic, Some $4, $6, $2, xmlDoc, $3, mRhs, { LeadingKeyword = Some leadingKeyword }) [ SynMemberDefn.ValField(fld, mValDecl) ]) } /* An auto-property definition in an object type definition */ autoPropsDefnDecl: | VAL opt_mutable opt_access ident opt_typ EQUALS typedSequentialExprBlock classMemberSpfnGetSet - { let mWith, mGetSetOpt, getSet = $8 + { let mVal = rhs parseState 1 + let mWith, mGetSetOpt, getSet = $8 let mEquals = rhs parseState 6 if $2 then errorR (Error (FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet (), rhs parseState 3)) (fun attribs flags rangeStart -> let xmlDoc = grabXmlDocAtRangeStart(parseState, attribs, rangeStart) let memberRange = unionRanges rangeStart $7.Range |> unionRangeWithXmlDoc xmlDoc + let flags, leadingKeyword = flags + let leadingKeyword = appendValToLeadingKeyword mVal leadingKeyword let memberFlags = flags SynMemberKind.Member let memberFlagsForSet = flags SynMemberKind.PropertySet let isStatic = not memberFlags.IsInstance - [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, memberFlags, memberFlagsForSet, xmlDoc, $3, mEquals, $7, mWith, mGetSetOpt, memberRange) ]) } + let trivia = { LeadingKeyword = leadingKeyword; WithKeyword = mWith; EqualsRange = Some mEquals; GetSetKeyword = mGetSetOpt } + [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, memberFlags, memberFlagsForSet, xmlDoc, $3, $7, memberRange, trivia) ]) } /* An optional type on an auto-property definition */ opt_typ: @@ -2026,13 +2058,13 @@ staticMemberOrMemberOrOverride: | STATIC MEMBER { let mStatic = rhs parseState 1 let mMember = rhs parseState 2 - ImplementStaticMemberFlags(StaticMemberSynMemberFlagsTrivia mStatic mMember) } + ImplementStaticMemberFlags, (SynLeadingKeyword.StaticMember(mStatic, mMember)) } | MEMBER { let mMember = rhs parseState 1 - OverrideMemberFlags(MemberSynMemberFlagsTrivia mMember) } + OverrideMemberFlags, (SynLeadingKeyword.Member mMember) } | OVERRIDE { let mOverride = rhs parseState 1 - OverrideMemberFlags(OverrideSynMemberFlagsTrivia mOverride) } + OverrideMemberFlags, (SynLeadingKeyword.Override mOverride) } /* The core of the right-hand-side of a simple type definition */ @@ -2415,18 +2447,18 @@ recdFieldDeclList: recdFieldDecl: | opt_attributes fieldDecl { let mWhole = rhs2 parseState 1 2 - let fld = $2 $1 false mWhole - let (SynField (a, b, c, d, e, xmlDoc, vis, mWhole)) = fld + let fld = $2 $1 false mWhole None + let (SynField (a, b, c, d, e, xmlDoc, vis, mWhole, trivia)) = fld if Option.isSome vis then errorR (Error (FSComp.SR.parsRecordFieldsCannotHaveVisibilityDeclarations (), rhs parseState 2)) let mWhole = unionRangeWithXmlDoc xmlDoc mWhole - SynField (a, b, c, d, e, xmlDoc, None, mWhole) } + SynField (a, b, c, d, e, xmlDoc, None, mWhole, trivia) } /* Part of a field or val declaration in a record type or object type */ fieldDecl: | opt_mutable opt_access ident COLON typ - { fun attrs stat mWhole -> + { fun attrs stat mWhole leadingKeyword -> let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, mWhole) - SynField(attrs, stat, Some $3, $5, $1, xmlDoc, $2, mWhole) } + SynField(attrs, stat, Some $3, $5, $1, xmlDoc, $2, mWhole, { LeadingKeyword = leadingKeyword }) } /* An exception definition */ exconDefn: @@ -2465,7 +2497,13 @@ defnBindings: | LET opt_rec localBindings { let mLetKwd = rhs parseState 1 let isUse = $1 - let isRec = $2 + let isRec = $2 + let leadingKeyword = + if isRec then + SynLeadingKeyword.LetRec(mLetKwd, rhs parseState 2) + else + SynLeadingKeyword.Let(mLetKwd) + let localBindingsLastRangeOpt, localBindingsBuilder = $3 // Calculate the precise range of the binding set, up to the end of the last r.h.s. expression @@ -2479,7 +2517,7 @@ defnBindings: (fun attrs vis -> let xmlDoc = grabXmlDoc(parseState, attrs, 1) // apply the builder - let binds = localBindingsBuilder xmlDoc attrs vis mLetKwd + let binds = localBindingsBuilder xmlDoc attrs vis leadingKeyword if not isRec && not (isNilOrSingleton binds) then reportParseErrorAt mLetKwd (FSComp.SR.parsLetAndForNonRecBindings()) [], binds), @@ -2497,7 +2535,7 @@ doBinding: let mWhole = unionRanges mDoKwd $2.Range // any attributes prior to the 'let' are left free, e.g. become top-level attributes // associated with the module, 'main' function or assembly depending on their target - BindingSetPreAttrs(mDoKwd, false, false, (fun attrs vis -> attrs, [mkSynDoBinding (vis, $2, mWhole)]), mWhole) } + BindingSetPreAttrs(mDoKwd, false, false, (fun attrs vis -> attrs, [mkSynDoBinding (vis, mDoKwd, $2, mWhole)]), mWhole) } /* A 'let ....' binding in the #light syntax */ @@ -2506,6 +2544,16 @@ hardwhiteLetBindings: { let mLetKwd = rhs parseState 1 let isUse = $1 let isRec = $2 + let leadingKeyword = + if not isUse && isRec then + SynLeadingKeyword.LetRec(mLetKwd, rhs parseState 2) + elif isUse && not isRec then + SynLeadingKeyword.Use mLetKwd + elif isUse && isRec then + SynLeadingKeyword.UseRec(mLetKwd, rhs parseState 2) + else + SynLeadingKeyword.Let(mLetKwd) + let report, mIn = $4 report (if isUse then "use" else "let") mLetKwd // report unterminated error @@ -2521,7 +2569,7 @@ hardwhiteLetBindings: BindingSetPreAttrs(mLetKwd, isRec, isUse, (fun attrs vis -> let xmlDoc = grabXmlDoc(parseState, attrs, 1) - let binds = localBindingsBuilder xmlDoc attrs vis mLetKwd + let binds = localBindingsBuilder xmlDoc attrs vis leadingKeyword if not isRec && not (isNilOrSingleton binds) then reportParseErrorAt mLetKwd (FSComp.SR.parsLetAndForNonRecBindings()) [], binds), @@ -2533,12 +2581,12 @@ hardwhiteLetBindings: /* A 'do ...' statement */ hardwhiteDoBinding: | ODO typedSequentialExprBlock hardwhiteDefnBindingsTerminator - { let mLetKwd = rhs parseState 1 - let bindingSetRange = unionRanges mLetKwd $2.Range + { let mDoKwd = rhs parseState 1 + let bindingSetRange = unionRanges mDoKwd $2.Range let seqPt = DebugPointAtBinding.NoneAtDo // any attributes prior to the 'let' are left free, e.g. become top-level attributes // associated with the module, 'main' function or assembly depending on their target - BindingSetPreAttrs(mLetKwd, false, false, (fun attrs vis -> attrs, [mkSynDoBinding (vis, $2, bindingSetRange)]), bindingSetRange), $2 } + BindingSetPreAttrs(mDoKwd, false, false, (fun attrs vis -> attrs, [mkSynDoBinding (vis, mDoKwd, $2, bindingSetRange)]), bindingSetRange), $2 } /* The bindings in a class type definition */ @@ -2595,7 +2643,7 @@ cPrototype: let bindingPat = SynPat.LongIdent (SynLongIdent([nm], [], [None]), None, Some noInferredTypars, SynArgPats.Pats [SynPat.Tuple(false, args, argsm)], vis, nmm) let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let xmlDoc = grabXmlDoc(parseState, attrs, 1) - let trivia = { LetKeyword = None; ExternKeyword = Some mExtern; EqualsRange = None } + let trivia = { LeadingKeyword = SynLeadingKeyword.Extern mExtern; EqualsRange = None } let binding = mkSynBinding (xmlDoc, bindingPat) @@ -2673,19 +2721,19 @@ localBindings: match moreLocalBindingsLastRange with | None -> localBindingRange | Some m -> m - Some lastRange, (fun xmlDoc attrs vis mLetKwd -> attrLocalBindingBuilder xmlDoc attrs vis mLetKwd true :: moreBindings) + Some lastRange, (fun xmlDoc attrs vis leadingKeyword -> attrLocalBindingBuilder xmlDoc attrs vis leadingKeyword true :: moreBindings) | None -> - moreLocalBindingsLastRange, (fun _xmlDoc _attrs _vis _letm -> moreBindings) } + moreLocalBindingsLastRange, (fun _xmlDoc _attrs _vis _leadingKeyword -> moreBindings) } moreLocalBindings: | AND attr_localBinding moreLocalBindings - { let mLetKwd = rhs parseState 1 + { let leadingKeyword = SynLeadingKeyword.And(rhs parseState 1) (match $2 with | Some (localBindingRange, attrLocalBindingBuilder) -> let xmlDoc = grabXmlDoc(parseState, [], 1) let xmlDoc = if xmlDoc.IsEmpty then grabXmlDoc(parseState, [], 2) else xmlDoc - (attrLocalBindingBuilder xmlDoc [] None mLetKwd false, localBindingRange) :: $3 + (attrLocalBindingBuilder xmlDoc [] None leadingKeyword false, localBindingRange) :: $3 | None -> $3) } | %prec prec_no_more_attr_bindings @@ -2697,7 +2745,7 @@ attr_localBinding: | opt_attributes localBinding { let attrs2 = $1 let localBindingRange, localBindingBuilder = $2 - let attrLocalBindingBuilder = (fun xmlDoc attrs vis mLetKwd _ -> localBindingBuilder xmlDoc (attrs@attrs2) vis mLetKwd) + let attrLocalBindingBuilder = (fun xmlDoc attrs vis leadingKeyword _ -> localBindingBuilder xmlDoc (attrs@attrs2) vis leadingKeyword) Some(localBindingRange, attrLocalBindingBuilder) } | error @@ -2714,11 +2762,11 @@ localBinding: let bindingPat, mBindLhs = $3 let localBindingRange = unionRanges (rhs2 parseState 1 5) mRhs let localBindingBuilder = - (fun xmlDoc attrs vis mLetKwd -> - let mWhole = (unionRanges mLetKwd mRhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + (fun xmlDoc attrs vis (leadingKeyword: SynLeadingKeyword) -> + let mWhole = (unionRanges leadingKeyword.Range mRhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let spBind = if IsDebugPointBinding bindingPat expr then DebugPointAtBinding.Yes mWhole else DebugPointAtBinding.NoneAtLet let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let trivia: SynBindingTrivia = { LetKeyword = Some mLetKwd; EqualsRange = Some mEquals; ExternKeyword = None } + let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; EqualsRange = Some mEquals } mkSynBinding (xmlDoc, bindingPat) (vis, $1, $2, mWholeBindLhs, spBind, optReturnType, expr, mRhs, opts, attrs, None, trivia)) localBindingRange, localBindingBuilder } @@ -2728,12 +2776,12 @@ localBinding: let optReturnType = $4 let bindingPat, mBindLhs = $3 let localBindingBuilder = - (fun xmlDoc attrs vis mLetKwd -> + (fun xmlDoc attrs vis leadingKeyword -> let mEquals = rhs parseState 5 let zeroWidthAtEnd = mEquals.EndRange let rhsExpr = arbExpr("localBinding1", zeroWidthAtEnd) let spBind = if IsDebugPointBinding bindingPat rhsExpr then DebugPointAtBinding.Yes mWhole else DebugPointAtBinding.NoneAtLet - let trivia: SynBindingTrivia = { LetKeyword = Some mLetKwd; EqualsRange = Some mEquals; ExternKeyword = None } + let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; EqualsRange = Some mEquals } mkSynBinding (xmlDoc, bindingPat) (vis, $1, $2, mBindLhs, spBind, optReturnType, rhsExpr, mRhs, [], attrs, None, trivia)) mWhole, localBindingBuilder } @@ -2744,9 +2792,9 @@ localBinding: let mRhs = mWhole.EndRange // zero-width range at end of last good token let bindingPat, mBindLhs = $3 let localBindingBuilder = - (fun xmlDoc attrs vis mLetKwd -> - let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) - let trivia = { LetKeyword = Some mLetKwd; EqualsRange = None; ExternKeyword = None } + (fun xmlDoc attrs vis (leadingKeyword: SynLeadingKeyword) -> + let spBind = DebugPointAtBinding.Yes (unionRanges leadingKeyword.Range mRhs) + let trivia = { LeadingKeyword = leadingKeyword; EqualsRange = None } let rhsExpr = arbExpr("localBinding2", mRhs) mkSynBinding (xmlDoc, bindingPat) (vis, $1, $2, mBindLhs, spBind, optReturnType, rhsExpr, mRhs, [], attrs, None, trivia)) mWhole, localBindingBuilder } @@ -4793,12 +4841,12 @@ objExprBindings: | WITH localBindings { let mWithKwd = (rhs parseState 1) let _localBindingsLastRange, localBindingsBuilder = $2 - mWithKwd, (localBindingsBuilder PreXmlDoc.Empty [] None mWithKwd), [] } + mWithKwd, (localBindingsBuilder PreXmlDoc.Empty [] None SynLeadingKeyword.Synthetic), [] } | OWITH localBindings OEND { let mWithKwd = (rhs parseState 1) let _localBindingsLastRange, localBindingsBuilder = $2 - mWithKwd, (localBindingsBuilder PreXmlDoc.Empty [] None mWithKwd), [] } + mWithKwd, (localBindingsBuilder PreXmlDoc.Empty [] None SynLeadingKeyword.Synthetic), [] } | WITH objectImplementationBlock opt_declEnd { let mWithKwd = rhs parseState 1 @@ -5252,7 +5300,7 @@ atomTypeOrAnonRecdType: { let flds, isStruct = $1 let flds2 = flds |> List.choose (function - | (SynField([], false, Some id, ty, false, _xmldoc, None, _m)) -> Some (id, ty) + | (SynField([], false, Some id, ty, false, _xmldoc, None, _m, _trivia)) -> Some (id, ty) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) SynType.AnonRecd (isStruct, flds2, rhs parseState 1) } diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index c5b206ed9e6..279296ec02c 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -128,6 +128,9 @@ SyntaxTree\ExternTests.fs + + SyntaxTree\LeadingKeywordTests.fs + FileSystemTests.fs diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected b/tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected index d7f8a490d26..66c52c10aed 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected @@ -7157,9 +7157,11 @@ FSharp.Compiler.Syntax.SynField: Boolean get_isMutable() FSharp.Compiler.Syntax.SynField: Boolean get_isStatic() FSharp.Compiler.Syntax.SynField: Boolean isMutable FSharp.Compiler.Syntax.SynField: Boolean isStatic -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynField NewSynField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Syntax.SynType, Boolean, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynField NewSynField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Syntax.SynType, Boolean, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynFieldTrivia) FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynType fieldType FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynType get_fieldType() +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.SyntaxTrivia.SynFieldTrivia get_trivia() +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.SyntaxTrivia.SynFieldTrivia trivia FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() @@ -7374,8 +7376,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMem FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberFlags memberFlagsForSet FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberKind get_propKind() FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberKind propKind -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range equalsRange -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range get_equalsRange() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia get_trivia() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia trivia FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() @@ -7386,10 +7388,6 @@ FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpO FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_typeOpt() FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] typeOpt -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] getSetRange -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_getSetRange() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_withKeyword() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] withKeyword FSharp.Compiler.Syntax.SynMemberDefn+GetSetMember: FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia get_trivia() FSharp.Compiler.Syntax.SynMemberDefn+GetSetMember: FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia trivia FSharp.Compiler.Syntax.SynMemberDefn+GetSetMember: FSharp.Compiler.Text.Range get_range() @@ -7495,7 +7493,7 @@ FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsNestedType() FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsOpen() FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsValField() FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAbstractSlot(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberKind, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberKind, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia) FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewGetSetMember(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBinding], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia) FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) @@ -7538,11 +7536,9 @@ FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsInstance() FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsOverrideOrExplicitImpl() FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.Syntax.SynMemberKind MemberKind FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.Syntax.SynMemberKind get_MemberKind() -FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia Trivia -FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia get_Trivia() FSharp.Compiler.Syntax.SynMemberFlags: Int32 GetHashCode() FSharp.Compiler.Syntax.SynMemberFlags: System.String ToString() -FSharp.Compiler.Syntax.SynMemberFlags: Void .ctor(Boolean, Boolean, Boolean, Boolean, Boolean, FSharp.Compiler.Syntax.SynMemberKind, FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia) +FSharp.Compiler.Syntax.SynMemberFlags: Void .ctor(Boolean, Boolean, Boolean, Boolean, Boolean, FSharp.Compiler.Syntax.SynMemberKind) FSharp.Compiler.Syntax.SynMemberKind FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 ClassConstructor FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 Constructor @@ -9417,14 +9413,12 @@ FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia: Void .ctor(FSharp.Com FSharp.Compiler.SyntaxTrivia.SynBindingTrivia FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: FSharp.Compiler.SyntaxTrivia.SynBindingTrivia Zero FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: FSharp.Compiler.SyntaxTrivia.SynBindingTrivia get_Zero() +FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword LeadingKeyword +FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword get_LeadingKeyword() FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] EqualsRange -FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ExternKeyword -FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] LetKeyword FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_EqualsRange() -FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_ExternKeyword() -FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_LetKeyword() FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: System.String ToString() -FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: 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.SynBindingTrivia: Void .ctor(FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) FSharp.Compiler.SyntaxTrivia.SynEnumCaseTrivia FSharp.Compiler.SyntaxTrivia.SynEnumCaseTrivia: FSharp.Compiler.Text.Range EqualsRange FSharp.Compiler.SyntaxTrivia.SynEnumCaseTrivia: FSharp.Compiler.Text.Range get_EqualsRange() @@ -9503,6 +9497,234 @@ FSharp.Compiler.SyntaxTrivia.SynExprTryWithTrivia: FSharp.Compiler.Text.Range ge FSharp.Compiler.SyntaxTrivia.SynExprTryWithTrivia: FSharp.Compiler.Text.Range get_WithToEndRange() FSharp.Compiler.SyntaxTrivia.SynExprTryWithTrivia: System.String ToString() FSharp.Compiler.SyntaxTrivia.SynExprTryWithTrivia: Void .ctor(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia: FSharp.Compiler.SyntaxTrivia.SynFieldTrivia Zero +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia: FSharp.Compiler.SyntaxTrivia.SynFieldTrivia get_Zero() +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword] LeadingKeyword +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword] get_LeadingKeyword() +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia: System.String ToString() +FSharp.Compiler.SyntaxTrivia.SynFieldTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword]) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Abstract: FSharp.Compiler.Text.Range abstractRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Abstract: FSharp.Compiler.Text.Range get_abstractRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+AbstractMember: FSharp.Compiler.Text.Range abstractRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+AbstractMember: FSharp.Compiler.Text.Range get_abstractRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+AbstractMember: FSharp.Compiler.Text.Range get_memberRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+AbstractMember: FSharp.Compiler.Text.Range memberRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+And: FSharp.Compiler.Text.Range andRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+And: FSharp.Compiler.Text.Range get_andRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Default: FSharp.Compiler.Text.Range defaultRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Default: FSharp.Compiler.Text.Range get_defaultRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+DefaultVal: FSharp.Compiler.Text.Range defaultRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+DefaultVal: FSharp.Compiler.Text.Range get_defaultRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+DefaultVal: FSharp.Compiler.Text.Range get_valRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+DefaultVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Do: FSharp.Compiler.Text.Range doRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Do: FSharp.Compiler.Text.Range get_doRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Extern: FSharp.Compiler.Text.Range externRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Extern: FSharp.Compiler.Text.Range get_externRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Let: FSharp.Compiler.Text.Range get_letRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Let: FSharp.Compiler.Text.Range letRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+LetRec: FSharp.Compiler.Text.Range get_letRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+LetRec: FSharp.Compiler.Text.Range get_recRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+LetRec: FSharp.Compiler.Text.Range letRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+LetRec: FSharp.Compiler.Text.Range recRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Member: FSharp.Compiler.Text.Range get_memberRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Member: FSharp.Compiler.Text.Range memberRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+MemberVal: FSharp.Compiler.Text.Range get_memberRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+MemberVal: FSharp.Compiler.Text.Range get_valRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+MemberVal: FSharp.Compiler.Text.Range memberRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+MemberVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+New: FSharp.Compiler.Text.Range get_newRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+New: FSharp.Compiler.Text.Range newRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Override: FSharp.Compiler.Text.Range get_overrideRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Override: FSharp.Compiler.Text.Range overrideRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range get_overrideRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range get_valRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range overrideRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range abstractRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range get_abstractRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember: FSharp.Compiler.Text.Range abstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember: FSharp.Compiler.Text.Range get_abstractMember() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember: FSharp.Compiler.Text.Range get_memberRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember: FSharp.Compiler.Text.Range memberRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo: FSharp.Compiler.Text.Range doRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo: FSharp.Compiler.Text.Range get_doRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLet: FSharp.Compiler.Text.Range get_letRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLet: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLet: FSharp.Compiler.Text.Range letRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLet: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec: FSharp.Compiler.Text.Range get_letRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec: FSharp.Compiler.Text.Range get_recRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec: FSharp.Compiler.Text.Range letRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec: FSharp.Compiler.Text.Range recRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMember: FSharp.Compiler.Text.Range get_memberRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMember: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMember: FSharp.Compiler.Text.Range memberRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMember: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal: FSharp.Compiler.Text.Range get_memberRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal: FSharp.Compiler.Text.Range get_valRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal: FSharp.Compiler.Text.Range memberRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticVal: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticVal: FSharp.Compiler.Text.Range get_valRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticVal: FSharp.Compiler.Text.Range staticRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Abstract +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 AbstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 And +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Default +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 DefaultVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Do +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Extern +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Let +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 LetRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Member +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 MemberVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 New +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Override +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 OverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticAbstract +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticAbstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticDo +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticLet +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticLetRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticMemberVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Synthetic +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Use +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 UseRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Val +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Use: FSharp.Compiler.Text.Range get_useRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Use: FSharp.Compiler.Text.Range useRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+UseRec: FSharp.Compiler.Text.Range get_recRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+UseRec: FSharp.Compiler.Text.Range get_useRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+UseRec: FSharp.Compiler.Text.Range recRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+UseRec: FSharp.Compiler.Text.Range useRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Val: FSharp.Compiler.Text.Range get_valRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Val: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsAbstract +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsAbstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsAnd +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsDefault +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsDefaultVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsDo +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsExtern +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsLet +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsLetRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsMemberVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsNew +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsOverride +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsOverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticAbstract +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticAbstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticDo +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticLet +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticLetRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticMemberVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsSynthetic +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsUse +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsUseRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsAbstract() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsAbstractMember() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsAnd() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsDefault() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsDefaultVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsDo() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsExtern() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsLet() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsLetRec() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsMember() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsMemberVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsNew() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsOverride() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsOverrideVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticAbstract() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticAbstractMember() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticDo() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticLet() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticLetRec() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticMember() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticMemberVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsSynthetic() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsUse() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsUseRec() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewAbstract(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewAbstractMember(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewAnd(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewDefault(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewDefaultVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewDo(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewExtern(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewLet(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewLetRec(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewMember(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewMemberVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewNew(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewOverride(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewOverrideVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticAbstract(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticAbstractMember(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticDo(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticLet(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticLetRec(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticMember(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticMemberVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewUse(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewUseRec(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewVal(FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword Synthetic +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword get_Synthetic() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Abstract +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+AbstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+And +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Default +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+DefaultVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Do +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Extern +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Let +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+LetRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Member +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+MemberVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+New +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Override +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLet +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticLetRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMember +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticMemberVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Use +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+UseRec +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Val +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.Text.Range Range +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Int32 Tag +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Int32 get_Tag() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: System.String ToString() FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia Zero FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia get_Zero() @@ -9512,21 +9734,17 @@ FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: Microsoft.FSharp.Core.FSharpO FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_BarRange() FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: System.String ToString() FSharp.Compiler.SyntaxTrivia.SynMatchClauseTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia Zero -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia get_Zero() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] AbstractRange -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] DefaultRange -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] MemberRange -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] OverrideRange -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] StaticRange -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_AbstractRange() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_DefaultRange() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_MemberRange() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_OverrideRange() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_StaticRange() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: System.String ToString() -FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia: 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], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword LeadingKeyword +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword get_LeadingKeyword() +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] EqualsRange +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] GetSetKeyword +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] WithKeyword +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_EqualsRange() +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_GetSetKeyword() +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_WithKeyword() +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: System.String ToString() +FSharp.Compiler.SyntaxTrivia.SynMemberDefnAutoPropertyTrivia: Void .ctor(FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword, 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.SynMemberGetSetTrivia FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: FSharp.Compiler.Text.Range WithKeyword FSharp.Compiler.SyntaxTrivia.SynMemberGetSetTrivia: FSharp.Compiler.Text.Range get_WithKeyword() @@ -9608,8 +9826,13 @@ FSharp.Compiler.SyntaxTrivia.SynTypeFunTrivia: FSharp.Compiler.Text.Range get_Ar FSharp.Compiler.SyntaxTrivia.SynTypeFunTrivia: System.String ToString() FSharp.Compiler.SyntaxTrivia.SynTypeFunTrivia: Void .ctor(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia +FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: Boolean Equals(FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia) +FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: FSharp.Compiler.Text.Range OrKeyword FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: FSharp.Compiler.Text.Range get_OrKeyword() +FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: Int32 GetHashCode() +FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: System.String ToString() FSharp.Compiler.SyntaxTrivia.SynTypeOrTrivia: Void .ctor(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynUnionCaseTrivia @@ -9618,16 +9841,16 @@ FSharp.Compiler.SyntaxTrivia.SynUnionCaseTrivia: Microsoft.FSharp.Core.FSharpOpt FSharp.Compiler.SyntaxTrivia.SynUnionCaseTrivia: System.String ToString() FSharp.Compiler.SyntaxTrivia.SynUnionCaseTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) FSharp.Compiler.SyntaxTrivia.SynValSigTrivia +FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword LeadingKeyword +FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword get_LeadingKeyword() FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: FSharp.Compiler.SyntaxTrivia.SynValSigTrivia Zero FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: FSharp.Compiler.SyntaxTrivia.SynValSigTrivia get_Zero() FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] EqualsRange -FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ValKeyword FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] WithKeyword FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_EqualsRange() -FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_ValKeyword() FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_WithKeyword() FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: System.String ToString() -FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: 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.SynValSigTrivia: Void .ctor(FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) FSharp.Compiler.Text.ISourceText FSharp.Compiler.Text.ISourceText: Boolean ContentEquals(FSharp.Compiler.Text.ISourceText) FSharp.Compiler.Text.ISourceText: Boolean SubTextEquals(System.String, Int32) diff --git a/tests/service/SyntaxTreeTests/BindingTests.fs b/tests/service/SyntaxTreeTests/BindingTests.fs index 95ea6685947..5a05af975e2 100644 --- a/tests/service/SyntaxTreeTests/BindingTests.fs +++ b/tests/service/SyntaxTreeTests/BindingTests.fs @@ -2,6 +2,7 @@ module FSharp.Compiler.Service.Tests.SyntaxTreeTests.BindingTestsTests open FSharp.Compiler.Service.Tests.Common open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTrivia open NUnit.Framework [] @@ -329,7 +330,7 @@ let ``Range of let keyword should be present in SynModuleDecl.Let binding`` () = match parseResults with | ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [SynBinding(trivia={ LetKeyword = Some mLet })]) + SynModuleDecl.Let(bindings = [SynBinding(trivia={ LeadingKeyword = SynLeadingKeyword.Let mLet })]) ]) ])) -> assertRange (1, 0) (1, 3) mLet | _ -> Assert.Fail "Could not get valid AST" @@ -346,7 +347,7 @@ let v = 12 match parseResults with | ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [SynBinding(trivia={ LetKeyword = Some mLet })]) + SynModuleDecl.Let(bindings = [SynBinding(trivia={ LeadingKeyword = SynLeadingKeyword.Let mLet })]) ]) ])) -> assertRange (5, 0) (5, 3) mLet | _ -> Assert.Fail "Could not get valid AST" @@ -362,7 +363,7 @@ let a = match parseResults with | ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [SynBinding(expr=SynExpr.LetOrUse(bindings=[SynBinding(trivia={ LetKeyword = Some mLet })]))]) + SynModuleDecl.Let(bindings = [SynBinding(expr=SynExpr.LetOrUse(bindings=[SynBinding(trivia={ LeadingKeyword = SynLeadingKeyword.Let mLet })]))]) ]) ])) -> assertRange (3, 4) (3, 7) mLet | _ -> Assert.Fail "Could not get valid AST" diff --git a/tests/service/SyntaxTreeTests/ExternTests.fs b/tests/service/SyntaxTreeTests/ExternTests.fs index 0599307d994..43ea6e5435a 100644 --- a/tests/service/SyntaxTreeTests/ExternTests.fs +++ b/tests/service/SyntaxTreeTests/ExternTests.fs @@ -13,7 +13,7 @@ let ``extern keyword is present in trivia`` () = | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Let(bindings = [ - SynBinding(trivia = { ExternKeyword = Some mExtern }) + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Extern mExtern }) ]) ]) ])) -> diff --git a/tests/service/SyntaxTreeTests/LeadingKeywordTests.fs b/tests/service/SyntaxTreeTests/LeadingKeywordTests.fs new file mode 100644 index 00000000000..c247376436b --- /dev/null +++ b/tests/service/SyntaxTreeTests/LeadingKeywordTests.fs @@ -0,0 +1,561 @@ +module FSharp.Compiler.Service.Tests.SyntaxTreeTests.LeadingKeywordTests + +open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTrivia +open NUnit.Framework + +[] +let ``let keyword`` () = + let parseResults = getParseResults "let a b = b + 1" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Let mLet }) + ]) + ]) + ])) -> + assertRange (1, 0) (1, 3) mLet + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``let rec keyword`` () = + let parseResults = getParseResults "let rec a b = b + 1" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.LetRec(mLet, mRec) }) + ]) + ]) + ])) -> + assertRange (1, 0) (1, 3) mLet + assertRange (1, 4) (1, 7) mRec + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``and keyword`` () = + let parseResults = + getParseResults """ +let rec a b = b + 1 +and d e = e + 1 +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ + SynBinding _ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.And mAnd }) + ]) + ]) + ])) -> + assertRange (3, 0) (3, 3) mAnd + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``use keyword`` () = + let parseResults = + getParseResults """ +do + use x = X() + () +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Expr(expr = + SynExpr.Do(expr = + SynExpr.LetOrUse(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Use mUse }) + ]) + ) + ) + ]) + ])) -> + assertRange (3, 4) (3, 7) mUse + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``use rec keyword`` () = + let parseResults = + getParseResults """ +do + use rec x = X() + () +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Expr(expr = + SynExpr.Do(expr = + SynExpr.LetOrUse(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.UseRec(mUse, mRec) }) + ]) + ) + ) + ]) + ])) -> + assertRange (3, 4) (3, 7) mUse + assertRange (3, 8) (3, 11) mRec + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``extern keyword`` () = + let parseResults = getParseResults "extern void Meh()" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Extern mExtern }) + ]) + ]) + ])) -> + assertRange (1, 0) (1, 6) mExtern + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``member keyword`` () = + let parseResults = getParseResults """ +type X = + member this.Y () = () +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.Member(memberDefn = SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Member mMember })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mMember + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``member val keyword`` () = + let parseResults = getParseResults """ +type X = + member val Y : int = 1 +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AutoProperty(trivia = { LeadingKeyword = SynLeadingKeyword.MemberVal(mMember, mVal) }) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mMember + assertRange (3, 11) (3, 14) mVal + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``override keyword`` () = + let parseResults = getParseResults """ +type D = + override E : string = "" +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.Member(memberDefn = SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Override(mOverride) })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 12) mOverride + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``override val keyword`` () = + let parseResults = getParseResults """ +type X = + override val Y : int = 1 +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AutoProperty(trivia = { LeadingKeyword = SynLeadingKeyword.OverrideVal(mOverride, mVal) }) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 12) mOverride + assertRange (3, 13) (3, 16) mVal + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``abstract keyword`` () = + let parseResults = getParseResults """ +type X = + abstract Y : int +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AbstractSlot(slotSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Abstract mAbstract })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 12) mAbstract + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``abstract member keyword`` () = + let parseResults = getParseResults """ +type X = + abstract member Y : int +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AbstractSlot(slotSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.AbstractMember(mAbstract, mMember) })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 12) mAbstract + assertRange (3, 13) (3, 19) mMember + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``static member keyword`` () = + let parseResults = getParseResults """ +type X = + static member Y : int = 1 +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.Member(memberDefn = SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.StaticMember(mStatic, mMember) })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 17) mMember + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``static member val keyword`` () = + let parseResults = getParseResults """ +type X = + static member val Y : int = 1 +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AutoProperty(trivia = { LeadingKeyword = SynLeadingKeyword.StaticMemberVal(mStatic, mMember, mVal) }) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 17) mMember + assertRange (3, 18) (3, 21) mVal + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``static abstract keyword`` () = + let parseResults = getParseResults """ +type X = + static abstract Y : int -> int +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AbstractSlot(slotSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.StaticAbstract(mStatic, mAbstract) })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 19) mAbstract + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``static abstract member keyword`` () = + let parseResults = getParseResults """ +type X = + static abstract member Y : int -> int +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.AbstractSlot(slotSig = SynValSig(trivia = { + LeadingKeyword = SynLeadingKeyword.StaticAbstractMember(mStatic, mAbstract, mMember) + })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 19) mAbstract + assertRange (3,20) (3, 26) mMember + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``static val keyword`` () = + let parseResults = getParseResultsOfSignatureFile """ +namespace Meh + +type X = + static val Y : int -> int +""" + + match parseResults with + | ParsedInput.SigFile(ParsedSigFileInput(contents = [ + SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types(types = [ + SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.ObjectModel(memberSigs = [ + SynMemberSig.ValField(field = + SynField(trivia = { LeadingKeyword = Some (SynLeadingKeyword.StaticVal(mStatic, mVal)) })) + ])) + ]) + ]) + ])) -> + assertRange (5, 4) (5, 10) mStatic + assertRange (5, 11) (5, 14) mVal + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``default keyword`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace X + +type Y = + default F : int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (contents = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types(types =[ + SynTypeDefnSig(typeRepr=SynTypeDefnSigRepr.ObjectModel(memberSigs=[ + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Default mDefault })) + ])) + ]) + ]) ])) -> + assertRange (5, 4) (5, 11) mDefault + | _ -> Assert.Fail "Could not get valid AST" + +[] +let ``default val keyword`` () = + let ast = """ +type Foo = + default val A : int = 1 +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types ([ + SynTypeDefn.SynTypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members=[ + SynMemberDefn.AutoProperty(trivia = { LeadingKeyword = SynLeadingKeyword.DefaultVal(mDefault , mVal) }) + ])) + ], _) + ]) + ])) -> + assertRange (3, 4) (3, 11) mDefault + assertRange (3, 12) (3, 15) mVal + | _ -> + Assert.Fail "Could not get valid AST" + +[] +let ``val keyword`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace X + +type Y = + val F : int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (contents = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types(types =[ + SynTypeDefnSig(typeRepr=SynTypeDefnSigRepr.ObjectModel(memberSigs=[ + SynMemberSig.ValField(field = SynField(trivia = { LeadingKeyword = Some (SynLeadingKeyword.Val mVal) })) + ])) + ]) + ]) ])) -> + assertRange (5, 4) (5, 7) mVal + | _ -> Assert.Fail "Could not get valid AST" + +[] +let ``new keyword`` () = + let parseResults = getParseResults """ +type Y() = + new (message:string) = Y() +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.ImplicitCtor _ + SynMemberDefn.Member(memberDefn = SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.New mNew })) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 7) mNew + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let ``synthetic keyword`` () = + let parseResults = + getParseResults """ +{ new ISomething with + a = () } +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Expr(expr = + SynExpr.ObjExpr(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Synthetic }) + ]) + ) + ]) + ])) -> + Assert.Pass() + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let `` static let keyword`` () = + let parseResults = + getParseResults """ +type X = + static let PI = 3.14 +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.LetBindings(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.StaticLet(mStatic, mLet) }) + ]) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 14) mLet + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let `` static let rec keyword`` () = + let parseResults = + getParseResults """ +type X = + static let rec forever () = forever() +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.LetBindings(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.StaticLetRec(mStatic, mLet, mRec) }) + ]) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 14) mLet + assertRange (3, 15) (3, 18) mRec + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let `` do keyword`` () = + let parseResults = + getParseResults """ +type X = + do () +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.LetBindings(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Do(mDo) }) + ]) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 6) mDo + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" + +[] +let `` do static keyword`` () = + let parseResults = + getParseResults """ +type X = + static do () +""" + + match parseResults with + | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.LetBindings(bindings = [ + SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.StaticDo(mStatic, mDo) }) + ]) + ])) + ]) + ]) + ])) -> + assertRange (3, 4) (3, 10) mStatic + assertRange (3, 11) (3, 13) mDo + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" diff --git a/tests/service/SyntaxTreeTests/MemberFlagTests.fs b/tests/service/SyntaxTreeTests/MemberFlagTests.fs index c29aad29300..c1c55b3a07c 100644 --- a/tests/service/SyntaxTreeTests/MemberFlagTests.fs +++ b/tests/service/SyntaxTreeTests/MemberFlagTests.fs @@ -2,6 +2,7 @@ module FSharp.Compiler.Service.Tests.SyntaxTreeTests.MemberFlagTestsTests open FSharp.Compiler.Service.Tests.Common open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTrivia open NUnit.Framework @@ -25,14 +26,12 @@ type Y = | ParsedInput.SigFile (ParsedSigFileInput (contents = [ SynModuleOrNamespaceSig(decls = [ SynModuleSigDecl.Types(types =[ SynTypeDefnSig(typeRepr=SynTypeDefnSigRepr.ObjectModel(memberSigs=[ - SynMemberSig.Member(flags={ Trivia= { AbstractRange = Some mAbstract1 } }) - SynMemberSig.Member(flags={ Trivia= { AbstractRange = Some mAbstract2 - MemberRange = Some mMember1 } }) - SynMemberSig.Member(flags={ Trivia= { StaticRange = Some mStatic3 - MemberRange = Some mMember3 } }) - SynMemberSig.Member(flags={ Trivia= { MemberRange = Some mMember4 } }) - SynMemberSig.Member(flags={ Trivia= { OverrideRange = Some mOverride5 } }) - SynMemberSig.Member(flags={ Trivia= { DefaultRange = Some mDefault6 } }) + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Abstract mAbstract1 })) + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.AbstractMember(mAbstract2, mMember1) })) + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.StaticMember(mStatic3, mMember3) })) + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Member mMember4 })) + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Override mOverride5 })) + SynMemberSig.Member(memberSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Default mDefault6 })) ])) ]) ]) ])) -> @@ -60,9 +59,8 @@ type Foo = SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Types ([ SynTypeDefn.SynTypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members=[ - SynMemberDefn.AbstractSlot(flags={ Trivia = { AbstractRange = Some mAbstract1 } }) - SynMemberDefn.AbstractSlot(flags={ Trivia = { AbstractRange = Some mAbstract2 - MemberRange = Some mMember2 } }) + SynMemberDefn.AbstractSlot(slotSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Abstract mAbstract1 })) + SynMemberDefn.AbstractSlot(slotSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.AbstractMember(mAbstract2, mMember2) })) ])) ], _) ]) @@ -84,31 +82,36 @@ type Foo = """ |> getParseResults + let (|LeadingKeyword|_|) md = + match md with + | SynMemberDefn.AutoProperty(trivia = { LeadingKeyword = lk }) -> Some lk + | _ -> None + match ast with | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Types ([ SynTypeDefn.SynTypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members=[ - SynMemberDefn.AutoProperty(memberFlags= flags1) - SynMemberDefn.AutoProperty(memberFlags= flags2) - SynMemberDefn.AutoProperty(memberFlags= flags3) - SynMemberDefn.AutoProperty(memberFlags= flags4) + LeadingKeyword(SynLeadingKeyword.StaticMemberVal(mStatic1, mMember1, mVal1)) + LeadingKeyword(SynLeadingKeyword.MemberVal(mMember2, mVal2)) + LeadingKeyword(SynLeadingKeyword.OverrideVal(mOverride3, mVal3)) + LeadingKeyword(SynLeadingKeyword.DefaultVal(mDefault4, mVal4)) ])) ], _) ]) ])) -> - let ({ Trivia = flagsTrivia1 } : SynMemberFlags) = flags1 - assertRange (3, 4) (3, 10) flagsTrivia1.StaticRange.Value - assertRange (3, 11) (3, 17) flagsTrivia1.MemberRange.Value + assertRange (3, 4) (3, 10) mStatic1 + assertRange (3, 11) (3, 17) mMember1 + assertRange (3, 18) (3, 21) mVal1 - let ({ Trivia = flagsTrivia2 } : SynMemberFlags) = flags2 - assertRange (4, 4) (4, 10) flagsTrivia2.MemberRange.Value + assertRange (4, 4) (4, 10) mMember2 + assertRange (4, 11) (4, 14) mVal2 - let ({ Trivia = flagsTrivia3 } : SynMemberFlags) = flags3 - assertRange (5, 4) (5, 12) flagsTrivia3.OverrideRange.Value + assertRange (5, 4) (5, 12) mOverride3 + assertRange (5, 13) (5, 16) mVal3 - let ({ Trivia = flagsTrivia4 } : SynMemberFlags) = flags4 - assertRange (6, 4) (6, 11) flagsTrivia4.DefaultRange.Value + assertRange (6, 4) (6, 11) mDefault4 + assertRange (6, 12) (6, 15) mVal4 | _ -> Assert.Fail "Could not get valid AST" @@ -123,16 +126,20 @@ type Foo = """ |> getParseResults + let (|LeadingKeyword|_|) md = + match md with + | SynMemberDefn.Member(memberDefn = SynBinding(trivia = { LeadingKeyword = lk })) -> Some lk + | _ -> None + match ast with | ParsedInput.ImplFile(ParsedImplFileInput(contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Types ([ SynTypeDefn.SynTypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members=[ - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { StaticRange = Some mStatic1 - MemberRange = Some mMember1 } }))) - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { MemberRange = Some mMember2 } }))) - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { OverrideRange = Some mOverride3 } }))) - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { DefaultRange = Some mDefaultRange4 } }))) + LeadingKeyword(SynLeadingKeyword.StaticMember(mStatic1, mMember1)) + LeadingKeyword(SynLeadingKeyword.Member(mMember2)) + LeadingKeyword(SynLeadingKeyword.Override(mOverride3)) + LeadingKeyword(SynLeadingKeyword.Default mDefaultRange4) ])) ], _) ]) @@ -163,11 +170,11 @@ let meh = SynModuleDecl.Let (bindings = [ SynBinding(expr=SynExpr.ObjExpr( members=[ - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { OverrideRange = Some mOverride1 } }))) - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { MemberRange = Some mMember2 } }))) + SynMemberDefn.Member(memberDefn=SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Override mOverride1 })) + SynMemberDefn.Member(memberDefn=SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Member mMember2 })) ] extraImpls=[ SynInterfaceImpl(members=[ - SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some { Trivia = { MemberRange = Some mMember3 } }))) + SynMemberDefn.Member(memberDefn=SynBinding(trivia = { LeadingKeyword = SynLeadingKeyword.Member mMember3 })) ]) ])) ]) ]) ])) -> diff --git a/tests/service/SyntaxTreeTests/MemberTests.fs b/tests/service/SyntaxTreeTests/MemberTests.fs index 084af4bff85..24693fd12bc 100644 --- a/tests/service/SyntaxTreeTests/MemberTests.fs +++ b/tests/service/SyntaxTreeTests/MemberTests.fs @@ -19,7 +19,7 @@ type Person(name : string, age : int) = match parseResults with | ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Types( - typeDefns = [ SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [_ ; SynMemberDefn.AutoProperty(equalsRange = mEquals)])) ] + typeDefns = [ SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [_ ; SynMemberDefn.AutoProperty(trivia = { EqualsRange = Some mEquals })])) ] ) ]) ])) -> assertRange (5, 20) (5, 21) mEquals @@ -39,8 +39,8 @@ type Foo() = | ParsedInput.ImplFile (ParsedImplFileInput (contents = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ SynModuleDecl.Types( typeDefns = [ SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [_ - SynMemberDefn.AutoProperty(withKeyword=Some mWith) - SynMemberDefn.AutoProperty(withKeyword=None)])) ] + SynMemberDefn.AutoProperty(trivia = { WithKeyword = Some mWith }) + SynMemberDefn.AutoProperty(trivia = { WithKeyword = None })])) ] ) ]) ])) -> assertRange (3, 39) (3, 43) mWith diff --git a/tests/service/SyntaxTreeTests/SignatureTypeTests.fs b/tests/service/SyntaxTreeTests/SignatureTypeTests.fs index 7532e835ca2..8d1d94d450f 100644 --- a/tests/service/SyntaxTreeTests/SignatureTypeTests.fs +++ b/tests/service/SyntaxTreeTests/SignatureTypeTests.fs @@ -2,6 +2,7 @@ module FSharp.Compiler.Service.Tests.SyntaxTreeTests.SignatureTypeTests open FSharp.Compiler.Service.Tests.Common open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTrivia open NUnit.Framework [] @@ -378,7 +379,7 @@ val a : int match parseResults with | ParsedInput.SigFile (ParsedSigFileInput (contents=[ SynModuleOrNamespaceSig(decls=[ - SynModuleSigDecl.Val(valSig = SynValSig(trivia = { ValKeyword = Some mVal })) + SynModuleSigDecl.Val(valSig = SynValSig(trivia = { LeadingKeyword = SynLeadingKeyword.Val mVal })) ] ) ])) -> assertRange (6, 0) (6, 3) mVal | _ -> Assert.Fail "Could not get valid AST" diff --git a/tests/service/TreeVisitorTests.fs b/tests/service/TreeVisitorTests.fs index f9a56bdd16c..9bcfa47796a 100644 --- a/tests/service/TreeVisitorTests.fs +++ b/tests/service/TreeVisitorTests.fs @@ -31,7 +31,7 @@ let ``Visit record definition test`` () = let parseTree = parseSourceCode("C:\\test.fs", source) match SyntaxTraversal.Traverse(pos0, parseTree, visitor) with - | Some [ SynField (_, _, Some id1, _, _, _, _, _); SynField (_, _, Some id2, _, _, _, _, _) ] when id1.idText = "A" && id2.idText = "B" -> () + | Some [ SynField (idOpt = Some id1); SynField (idOpt = Some id2) ] when id1.idText = "A" && id2.idText = "B" -> () | _ -> failwith "Did not visit record definition" []