diff --git a/src/fsharp/CheckComputationExpressions.fs b/src/fsharp/CheckComputationExpressions.fs index 1c9aecdc59..9d4c6363e7 100644 --- a/src/fsharp/CheckComputationExpressions.fs +++ b/src/fsharp/CheckComputationExpressions.fs @@ -92,29 +92,29 @@ let YieldFree (cenv: cenv) expr = // Implement yield free logic for F# Language including the LanguageFeature.ImplicitYield let rec YieldFree expr = match expr with - | SynExpr.Sequential (_, _, e1, e2, _) -> + | SynExpr.Sequential (expr1=e1; expr2=e2) -> YieldFree e1 && YieldFree e2 - | SynExpr.IfThenElse (_, _, _, _, e2, _, e3opt, _, _, _, _) -> + | SynExpr.IfThenElse (thenExpr=e2; elseExpr=e3opt) -> YieldFree e2 && Option.forall YieldFree e3opt - | SynExpr.TryWith (e1, _, clauses, _, _, _, _) -> + | SynExpr.TryWith (tryExpr=e1; withCases=clauses) -> YieldFree e1 && clauses |> List.forall (fun (SynMatchClause(resultExpr = e)) -> YieldFree e) - | SynExpr.Match (_, _, clauses, _) | SynExpr.MatchBang (_, _, clauses, _) -> + | SynExpr.Match (clauses=clauses) | SynExpr.MatchBang (clauses=clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = e)) -> YieldFree e) - | SynExpr.For (_, _, _, _, _, body, _) - | SynExpr.TryFinally (body, _, _, _, _) - | SynExpr.LetOrUse (_, _, _, body, _) - | SynExpr.While (_, _, body, _) - | SynExpr.ForEach (_, _, _, _, _, body, _) -> + | SynExpr.For (doBody=body) + | SynExpr.TryFinally (tryExpr=body) + | SynExpr.LetOrUse (body=body) + | SynExpr.While (doExpr=body) + | SynExpr.ForEach (bodyExpr=body) -> YieldFree body - | SynExpr.LetOrUseBang(_, _, _, _, _, _, body, _) -> + | SynExpr.LetOrUseBang(body=body) -> YieldFree body - | SynExpr.YieldOrReturn((true, _), _, _) -> false + | SynExpr.YieldOrReturn(flags=(true, _)) -> false | _ -> true @@ -123,23 +123,23 @@ let YieldFree (cenv: cenv) expr = // Implement yield free logic for F# Language without the LanguageFeature.ImplicitYield let rec YieldFree expr = match expr with - | SynExpr.Sequential (_, _, e1, e2, _) -> + | SynExpr.Sequential (expr1=e1; expr2=e2) -> YieldFree e1 && YieldFree e2 - | SynExpr.IfThenElse (_, _, _, _, e2, _, e3opt, _, _, _, _) -> + | SynExpr.IfThenElse (thenExpr=e2; elseExpr=e3opt) -> YieldFree e2 && Option.forall YieldFree e3opt - | SynExpr.TryWith (e1, _, clauses, _, _, _, _) -> + | SynExpr.TryWith (tryExpr=e1; withCases=clauses) -> YieldFree e1 && clauses |> List.forall (fun (SynMatchClause(resultExpr = e)) -> YieldFree e) - | SynExpr.Match (_, _, clauses, _) | SynExpr.MatchBang (_, _, clauses, _) -> + | SynExpr.Match (clauses=clauses) | SynExpr.MatchBang (clauses=clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = e)) -> YieldFree e) - | SynExpr.For (_, _, _, _, _, body, _) - | SynExpr.TryFinally (body, _, _, _, _) - | SynExpr.LetOrUse (_, _, _, body, _) - | SynExpr.While (_, _, body, _) - | SynExpr.ForEach (_, _, _, _, _, body, _) -> + | SynExpr.For (doBody=body) + | SynExpr.TryFinally (tryExpr=body) + | SynExpr.LetOrUse (body=body) + | SynExpr.While (doExpr=body) + | SynExpr.ForEach (bodyExpr=body) -> YieldFree body | SynExpr.LetOrUseBang _ @@ -708,13 +708,13 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter // NOTE: we should probably suppress these sequence points altogether let rangeForCombine innerComp1 = match innerComp1 with - | SynExpr.IfThenElse (_, _, _, _, _, _, _, _, _, mIfToThen, _m) -> mIfToThen - | SynExpr.Match (DebugPointAtBinding.Yes mMatch, _, _, _) -> mMatch - | SynExpr.TryWith (_, _, _, _, _, DebugPointAtTry.Yes mTry, _) -> mTry - | SynExpr.TryFinally (_, _, _, DebugPointAtTry.Yes mTry, _) -> mTry - | SynExpr.For (DebugPointAtFor.Yes mBind, _, _, _, _, _, _) -> mBind - | SynExpr.ForEach (DebugPointAtFor.Yes mBind, _, _, _, _, _, _) -> mBind - | SynExpr.While (DebugPointAtWhile.Yes mWhile, _, _, _) -> mWhile + | SynExpr.IfThenElse (ifToThenRange=mIfToThen) -> mIfToThen + | SynExpr.Match (matchDebugPoint=DebugPointAtBinding.Yes mMatch) -> mMatch + | SynExpr.TryWith (tryDebugPoint=DebugPointAtTry.Yes mTry) -> mTry + | SynExpr.TryFinally (tryDebugPoint=DebugPointAtTry.Yes mTry) -> mTry + | SynExpr.For (forDebugPoint=DebugPointAtFor.Yes mBind) -> mBind + | SynExpr.ForEach (forDebugPoint=DebugPointAtFor.Yes mBind) -> mBind + | SynExpr.While (whileDebugPoint=DebugPointAtWhile.Yes mWhile) -> mWhile | _ -> innerComp1.Range // Check for 'where x > y', 'select x, y' and other mis-applications of infix operators, give a good error message, and return a flag @@ -950,7 +950,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter (fun holeFill -> translatedCtxt (mkSynCall "For" mFor [wrappedSourceExpr; SynExpr.MatchLambda (false, sourceExpr.Range, [SynMatchClause(pat, None, None, holeFill, mPat, DebugPointAtTarget.Yes)], spBind, mFor) ])) ) - | SynExpr.For (spBind, id, start, dir, finish, innerComp, m) -> + | SynExpr.For (forDebugPoint=spBind; ident=id; identBody=start; direction=dir; toBody=finish; doBody=innerComp; range=m) -> let mFor = match spBind with DebugPointAtFor.Yes m -> m.NoteDebugPoint(RangeDebugPointKind.For) | _ -> m if isQuery then errorR(Error(FSComp.SR.tcNoIntegerForLoopInQuery(), mFor)) Some (trans CompExprTranslationPass.Initial q varSpace (elimFastIntegerForLoop (spBind, id, start, dir, finish, innerComp, m)) translatedCtxt ) @@ -1056,7 +1056,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter | DebugPointAtSequential.SuppressBoth -> DebugPointAtBinding.NoneAtDo | DebugPointAtSequential.SuppressStmt -> DebugPointAtBinding.Yes m | DebugPointAtSequential.SuppressNeither -> DebugPointAtBinding.Yes m - Some(trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (sp, false, true, SynPat.Const(SynConst.Unit, rhsExpr.Range), rhsExpr, [], innerComp2, m)) translatedCtxt) + Some(trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (sp, false, true, SynPat.Const(SynConst.Unit, rhsExpr.Range), None, rhsExpr, [], innerComp2, m)) translatedCtxt) // "expr; cexpr" is treated as sequential execution | _ -> @@ -1118,7 +1118,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter Some (trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> translatedCtxt (SynExpr.LetOrUse (isRec, false, binds, holeFill, m)))) // 'use x = expr in expr' - | SynExpr.LetOrUse (_, true, [SynBinding (_, SynBindingKind.Normal, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, _) -> + | SynExpr.LetOrUse (isUse=true; bindings=[SynBinding (kind=SynBindingKind.Normal; headPat=pat; expr=rhsExpr; debugPoint=spBind)]; body=innerComp) -> let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcUseMayNotBeUsedInQueries(), bindRange)) let innerCompRange = innerComp.Range @@ -1131,7 +1131,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter // --> build.Bind(e1, (fun _argN -> match _argN with pat -> expr)) // or // --> build.BindReturn(e1, (fun _argN -> match _argN with pat -> expr-without-return)) - | SynExpr.LetOrUseBang (spBind, false, isFromSource, pat, rhsExpr, [], innerComp, _) -> + | SynExpr.LetOrUseBang (bindDebugPoint=spBind; isUse=false; isFromSource=isFromSource; pat=pat; rhs=rhsExpr; andBangs=[]; body=innerComp) -> let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), bindRange)) @@ -1147,8 +1147,8 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter Some (transBind q varSpace bindRange "Bind" [rhsExpr] pat spBind innerComp translatedCtxt) // 'use! pat = e1 in e2' --> build.Bind(e1, (function _argN -> match _argN with pat -> build.Using(x, (fun _argN -> match _argN with pat -> e2)))) - | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.Named (id, false, _, _) as pat) , rhsExpr, [], innerComp, _) - | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.LongIdent (longDotId=LongIdentWithDots([id], _)) as pat), rhsExpr, [], innerComp, _) -> + | SynExpr.LetOrUseBang (bindDebugPoint=spBind; isUse=true; isFromSource=isFromSource; pat=SynPat.Named (ident=id; isThisVal=false) as pat; rhs=rhsExpr; andBangs=[]; body=innerComp) + | SynExpr.LetOrUseBang (bindDebugPoint=spBind; isUse=true; isFromSource=isFromSource; pat=SynPat.LongIdent (longDotId=LongIdentWithDots(id=[id])) as pat; rhs=rhsExpr; andBangs=[]; body=innerComp) -> let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), bindRange)) @@ -1166,7 +1166,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter Some(translatedCtxt (mkSynCall "Bind" bindRange [rhsExpr; consumeExpr])) // 'use! pat = e1 ... in e2' where 'pat' is not a simple name --> error - | SynExpr.LetOrUseBang (_spBind, true, _isFromSource, pat, _rhsExpr, andBangs, _innerComp, _) -> + | SynExpr.LetOrUseBang (isUse=true; pat=pat; andBangs=andBangs) -> if isNil andBangs then error(Error(FSComp.SR.tcInvalidUseBangBinding(), pat.Range)) else @@ -1178,7 +1178,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter // build.BindNReturn(expr1, expr2, ...) // or // build.Bind(build.MergeSources(expr1, expr2), ...) - | SynExpr.LetOrUseBang(letSpBind, false, isFromSource, letPat, letRhsExpr, andBangBindings, innerComp, letBindRange) -> + | SynExpr.LetOrUseBang(bindDebugPoint=letSpBind; isUse=false; isFromSource=isFromSource; pat=letPat; rhs=letRhsExpr; andBangs=andBangBindings; body=innerComp; range=letBindRange) -> if not (cenv.g.langVersion.SupportsFeature LanguageFeature.AndBang) then error(Error(FSComp.SR.tcAndBangNotSupported(), comp.Range)) @@ -1186,8 +1186,8 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), letBindRange)) let bindRange = match letSpBind with DebugPointAtBinding.Yes m -> m | _ -> letRhsExpr.Range - let sources = (letRhsExpr :: [for _, _, _, _, andExpr, _ in andBangBindings -> andExpr ]) |> List.map (mkSourceExprConditional isFromSource) - let pats = letPat :: [for _, _, _, andPat, _, _ in andBangBindings -> andPat ] + let sources = (letRhsExpr :: [for SynExprAndBang(body=andExpr) in andBangBindings -> andExpr ]) |> List.map (mkSourceExprConditional isFromSource) + let pats = letPat :: [for SynExprAndBang(pat = andPat) in andBangBindings -> andPat ] let sourcesRange = sources |> List.map (fun e -> e.Range) |> List.reduce unionRanges let numSources = sources.Length @@ -1425,7 +1425,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter // Rebind using either for ... or let!.... let rebind = if maintainsVarSpaceUsingBind then - SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, intoPat, dataCompAfterOp, [], contExpr, intoPat.Range) + SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, intoPat, None, dataCompAfterOp, [], contExpr, intoPat.Range) else SynExpr.ForEach (DebugPointAtFor.No, SeqExprOnly false, false, intoPat, dataCompAfterOp, contExpr, intoPat.Range) @@ -1447,7 +1447,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter // Rebind using either for ... or let!.... let rebind = if lastUsesBind then - SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, varSpacePat, dataCompPrior, [], compClausesExpr, compClausesExpr.Range) + SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, varSpacePat, None, dataCompPrior, [], compClausesExpr, compClausesExpr.Range) else SynExpr.ForEach (DebugPointAtFor.No, SeqExprOnly false, false, varSpacePat, dataCompPrior, compClausesExpr, compClausesExpr.Range) @@ -1474,7 +1474,7 @@ let TcComputationExpression cenv env (overallTy: OverallTy) tpenv (mWhole, inter match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m ad "Zero" builderTy with | minfo :: _ when MethInfoHasAttribute cenv.g m cenv.g.attrib_DefaultValueAttribute minfo -> SynExpr.ImplicitZero m | _ -> SynExpr.YieldOrReturn ((false, true), SynExpr.Const (SynConst.Unit, m), m) - trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtDo, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, [], bodyExpr, m)) translatedCtxt + trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtDo, false, false, SynPat.Const(SynConst.Unit, mUnit), None, rhsExpr, [], bodyExpr, m)) translatedCtxt // "expr;" in final position is treated as { expr; zero } // Suppress the sequence point on the "zero" @@ -1770,7 +1770,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp (overallTy: OverallTy) m = let lam = mkLambda mFor matchv (matchExpr, tyOfExpr cenv.g matchExpr) Some(mkSeqCollect cenv env m enumElemTy genOuterTy lam enumExpr, tpenv) - | SynExpr.For (spBind, id, start, dir, finish, innerComp, m) -> + | SynExpr.For (forDebugPoint=spBind; ident=id; identBody=start; direction=dir; toBody=finish; doBody=innerComp; range=m) -> Some(tcSequenceExprBody env genOuterTy tpenv (elimFastIntegerForLoop (spBind, id, start, dir, finish, innerComp, m))) | SynExpr.While (spWhile, guardExpr, innerComp, _m) -> @@ -1849,7 +1849,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp (overallTy: OverallTy) m = id |> Some // 'use x = expr in expr' - | SynExpr.LetOrUse (_isRec, true, [SynBinding (_vis, SynBindingKind.Normal, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, wholeExprMark) -> + | SynExpr.LetOrUse (isUse=true; bindings=[SynBinding (kind=SynBindingKind.Normal; headPat=pat; expr=rhsExpr; debugPoint=spBind)]; body=innerComp; range=wholeExprMark) -> let bindPatTy = NewInferenceType () let inputExprTy = NewInferenceType () diff --git a/src/fsharp/CheckDeclarations.fs b/src/fsharp/CheckDeclarations.fs index 1fbcbd8cf1..1b9a15b2c6 100644 --- a/src/fsharp/CheckDeclarations.fs +++ b/src/fsharp/CheckDeclarations.fs @@ -511,7 +511,7 @@ module TcRecdUnionAndEnumDeclarations = let unionCases' = unionCases |> List.map (TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv) unionCases' |> CheckDuplicates (fun uc -> uc.Id) "union case" - let TcEnumDecl cenv env parent thisTy fieldTy (SynEnumCase(Attributes synAttrs, id, v, _, xmldoc, m)) = + let TcEnumDecl cenv env parent thisTy fieldTy (SynEnumCase(attributes=Attributes synAttrs; ident=id; value=v; xmlDoc=xmldoc; range=m)) = let attrs = TcAttributes cenv env AttributeTargets.Field synAttrs match v with | SynConst.Bytes _ @@ -1658,7 +1658,7 @@ module MutRecBindingChecking = | _ -> () if not isStatic && tcref.IsStructOrEnumTycon then - let allDo = letBinds |> List.forall (function SynBinding(_, SynBindingKind.Do, _, _, _, _, _, _, _, _, _, _) -> true | _ -> false) + let allDo = letBinds |> List.forall (function SynBinding(kind=SynBindingKind.Do) -> true | _ -> false) // Code for potential future design change to allow functions-compiled-as-members in structs if allDo then errorR(Deprecated(FSComp.SR.tcStructsMayNotContainDoBindings(), (trimRangeToLine m))) @@ -1728,7 +1728,7 @@ module MutRecBindingChecking = | Phase2AOpen _ #endif | Phase2AIncrClassCtor _ | Phase2AInherit _ | Phase2AIncrClassCtorJustAfterSuperInit -> false - | Phase2AIncrClassBindings (_, binds, _, _, _) -> binds |> List.exists (function SynBinding (_, SynBindingKind.Do, _, _, _, _, _, _, _, _, _, _) -> true | _ -> false) + | Phase2AIncrClassBindings (_, binds, _, _, _) -> binds |> List.exists (function SynBinding (kind=SynBindingKind.Do) -> true | _ -> false) | Phase2AIncrClassCtorJustAfterLastLet | Phase2AMember _ -> true let restRev = List.rev rest @@ -2423,7 +2423,7 @@ let TcMutRecDefns_Phase2 (cenv: cenv) envInitial bindsm scopem mutRecNSInfo (env defn |> List.choose (fun mem -> match mem with | SynMemberDefn.Member(_, m) -> Some(TyconBindingDefn(containerInfo, newslotsOK, declKind, mem, m)) - | SynMemberDefn.AutoProperty(_, _, _, _, _, _, _, _, _, _, m) -> Some(TyconBindingDefn(containerInfo, newslotsOK, declKind, mem, m)) + | SynMemberDefn.AutoProperty(range=m) -> Some(TyconBindingDefn(containerInfo, newslotsOK, declKind, mem, m)) | _ -> errorR(Error(FSComp.SR.tcMemberNotPermittedInInterfaceImplementation(), mem.Range)); None) let tyconBindingsOfTypeDefn (MutRecDefnsPhase2DataForTycon(_, parent, declKind, tcref, baseValOpt, safeInitInfo, declaredTyconTypars, members, _, newslotsOK, _)) = @@ -3188,7 +3188,7 @@ module EstablishTypeDefinitionCores = [ for def in defs do match def with | SynModuleDecl.Types (typeSpecs, _) -> - for SynTypeDefn(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), trepr, _, _, _) in typeSpecs do + for SynTypeDefn(typeInfo=SynComponentInfo(typeParams=TyparDecls typars; longId=ids); typeRepr=trepr) in typeSpecs do if isNil typars then match trepr with | SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, _, _) -> () @@ -3201,7 +3201,7 @@ module EstablishTypeDefinitionCores = [ for def in defs do match def with | SynModuleSigDecl.Types (typeSpecs, _) -> - for SynTypeDefnSig(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), trepr, extraMembers, _) in typeSpecs do + for SynTypeDefnSig(SynComponentInfo(typeParams=TyparDecls typars; longId=ids), _, trepr, extraMembers, _) in typeSpecs do if isNil typars then match trepr with | SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.None _, _) when not (isNil extraMembers) -> () @@ -4635,30 +4635,30 @@ module TcDeclarations = let _, ds = ds |> List.takeUntil (allFalse [isMember;isAbstractSlot;isInterface;isAutoProperty]) match ds with - | SynMemberDefn.Member (_, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have binding", m)) - | SynMemberDefn.AbstractSlot (_, _, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have slotsig", m)) - | SynMemberDefn.Interface (_, _, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have interface", m)) - | SynMemberDefn.ImplicitCtor (_, _, _, _, _, m) :: _ -> errorR(InternalError("implicit class construction with two implicit constructions", m)) - | SynMemberDefn.AutoProperty (_, _, _, _, _, _, _, _, _, _, m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have auto property", m)) - | SynMemberDefn.ImplicitInherit (_, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit(), m)) - | SynMemberDefn.LetBindings (_, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers(), m)) - | SynMemberDefn.Inherit (_, _, m) :: _ -> errorR(Error(FSComp.SR.tcInheritDeclarationMissingArguments(), m)) - | SynMemberDefn.NestedType (_, _, m) :: _ -> errorR(Error(FSComp.SR.tcTypesCannotContainNestedTypes(), m)) + | SynMemberDefn.Member (range=m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have binding", m)) + | SynMemberDefn.AbstractSlot (range=m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have slotsig", m)) + | SynMemberDefn.Interface (range=m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have interface", m)) + | SynMemberDefn.ImplicitCtor (range=m) :: _ -> errorR(InternalError("implicit class construction with two implicit constructions", m)) + | SynMemberDefn.AutoProperty (range=m) :: _ -> errorR(InternalError("List.takeUntil is wrong, have auto property", m)) + | SynMemberDefn.ImplicitInherit (range=m) :: _ -> errorR(Error(FSComp.SR.tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit(), m)) + | SynMemberDefn.LetBindings (range=m) :: _ -> errorR(Error(FSComp.SR.tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers(), m)) + | SynMemberDefn.Inherit (range=m) :: _ -> errorR(Error(FSComp.SR.tcInheritDeclarationMissingArguments(), m)) + | SynMemberDefn.NestedType (range=m) :: _ -> errorR(Error(FSComp.SR.tcTypesCannotContainNestedTypes(), m)) | _ -> () | ds -> // Classic class construction let _, ds = List.takeUntil (allFalse [isMember;isAbstractSlot;isInterface;isInherit;isField;isTycon]) ds match ds with - | SynMemberDefn.Member (_, m) :: _ -> errorR(InternalError("CheckMembersForm: List.takeUntil is wrong", m)) - | SynMemberDefn.ImplicitCtor (_, _, _, _, _, m) :: _ -> errorR(InternalError("CheckMembersForm: implicit ctor line should be first", m)) - | SynMemberDefn.ImplicitInherit (_, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcInheritConstructionCallNotPartOfImplicitSequence(), m)) - | SynMemberDefn.AutoProperty(_, _, _, _, _, _, _, _, _, _, m) :: _ -> errorR(Error(FSComp.SR.tcAutoPropertyRequiresImplicitConstructionSequence(), m)) - | SynMemberDefn.LetBindings (_, false, _, m) :: _ -> errorR(Error(FSComp.SR.tcLetAndDoRequiresImplicitConstructionSequence(), m)) - | SynMemberDefn.AbstractSlot (_, _, m) :: _ - | SynMemberDefn.Interface (_, _, m) :: _ - | SynMemberDefn.Inherit (_, _, m) :: _ - | SynMemberDefn.ValField (_, m) :: _ - | SynMemberDefn.NestedType (_, _, m) :: _ -> errorR(InternalError("CheckMembersForm: List.takeUntil is wrong", m)) + | SynMemberDefn.Member (range=m) :: _ -> errorR(InternalError("CheckMembersForm: List.takeUntil is wrong", m)) + | SynMemberDefn.ImplicitCtor (range=m) :: _ -> errorR(InternalError("CheckMembersForm: implicit ctor line should be first", m)) + | SynMemberDefn.ImplicitInherit (range=m) :: _ -> errorR(Error(FSComp.SR.tcInheritConstructionCallNotPartOfImplicitSequence(), m)) + | SynMemberDefn.AutoProperty(range=m) :: _ -> errorR(Error(FSComp.SR.tcAutoPropertyRequiresImplicitConstructionSequence(), m)) + | SynMemberDefn.LetBindings (isStatic=false; range=m) :: _ -> errorR(Error(FSComp.SR.tcLetAndDoRequiresImplicitConstructionSequence(), m)) + | SynMemberDefn.AbstractSlot (range=m) :: _ + | SynMemberDefn.Interface (range=m) :: _ + | SynMemberDefn.Inherit (range=m) :: _ + | SynMemberDefn.ValField (range=m) :: _ + | SynMemberDefn.NestedType (range=m) :: _ -> errorR(InternalError("CheckMembersForm: List.takeUntil is wrong", m)) | _ -> () @@ -4668,7 +4668,7 @@ module TcDeclarations = /// where simpleRepr can contain inherit type, declared fields and virtual slots. /// body = members /// where members contain methods/overrides, also implicit ctor, inheritCall and local definitions. - let rec private SplitTyconDefn (SynTypeDefn(synTyconInfo, trepr, extraMembers, _, _)) = + let rec private SplitTyconDefn (SynTypeDefn(typeInfo=synTyconInfo;typeRepr=trepr; members=extraMembers)) = let implements1 = List.choose (function SynMemberDefn.Interface (ty, _, _) -> Some(ty, ty.Range) | _ -> None) extraMembers match trepr with | SynTypeDefnRepr.ObjectModel(kind, cspec, m) -> @@ -4703,7 +4703,7 @@ module TcDeclarations = // Convert auto properties to let bindings in the pre-list let rec preAutoProps memb = match memb with - | SynMemberDefn.AutoProperty(Attributes attribs, isStatic, id, tyOpt, propKind, _, xmlDoc, _access, synExpr, _mGetSet, mWholeAutoProp) -> + | SynMemberDefn.AutoProperty(attributes=Attributes attribs; isStatic=isStatic; ident=id; typeOpt=tyOpt; propKind=propKind; xmlDoc=xmlDoc; synExpr=synExpr; range=mWholeAutoProp) -> // Only the keep the field-targeted attributes let attribs = attribs |> List.filter (fun a -> match a.Target with Some t when t.idText = "field" -> true | _ -> false) let mLetPortion = synExpr.Range @@ -4716,7 +4716,7 @@ module TcDeclarations = | SynMemberKind.PropertyGetSet -> true | _ -> false let attribs = mkAttributeList attribs mWholeAutoProp - let binding = mkSynBinding (xmlDoc, headPat) (None, false, isMutable, mLetPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, synExpr, synExpr.Range, [], attribs, None) + let binding = mkSynBinding (xmlDoc, headPat) (None, false, isMutable, mLetPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, None, synExpr, synExpr.Range, [], attribs, None) [(SynMemberDefn.LetBindings ([binding], isStatic, false, mWholeAutoProp))] @@ -4730,7 +4730,7 @@ module TcDeclarations = // Convert auto properties to member bindings in the post-list let rec postAutoProps memb = match memb with - | SynMemberDefn.AutoProperty(Attributes attribs, isStatic, id, tyOpt, propKind, memberFlags, xmlDoc, access, _synExpr, mGetSetOpt, _mWholeAutoProp) -> + | SynMemberDefn.AutoProperty(attributes=Attributes attribs; isStatic=isStatic; ident=id; typeOpt=tyOpt; propKind=propKind; memberFlags=memberFlags; xmlDoc=xmlDoc; accessibility=access; getSetRange=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) @@ -4751,7 +4751,7 @@ module TcDeclarations = let rhsExpr = SynExpr.Ident fldId let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) let attribs = mkAttributeList attribs mMemberPortion - let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, rhsExpr, rhsExpr.Range, [], attribs, Some (memberFlags SynMemberKind.Member)) + let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, None, rhsExpr, rhsExpr.Range, [], attribs, Some (memberFlags SynMemberKind.Member)) SynMemberDefn.Member (binding, mMemberPortion) yield getter | _ -> () @@ -4764,7 +4764,7 @@ module TcDeclarations = let headPat = SynPat.LongIdent (LongIdentWithDots(headPatIds, []), None, Some noInferredTypars, SynArgPats.Pats [mkSynPatVar None vId], None, mMemberPortion) let rhsExpr = mkSynAssign (SynExpr.Ident fldId) (SynExpr.Ident vId) //let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) - let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, None, rhsExpr, rhsExpr.Range, [], [], Some (memberFlags SynMemberKind.PropertySet)) + let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, None, None, rhsExpr, rhsExpr.Range, [], [], Some (memberFlags SynMemberKind.PropertySet)) SynMemberDefn.Member (binding, mMemberPortion) yield setter | _ -> ()] @@ -4784,7 +4784,7 @@ module TcDeclarations = let isConcrete = members |> List.exists (function - | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), _, _, _, _, _), _) -> not memberFlags.IsDispatchSlot + | SynMemberDefn.Member(SynBinding(valData = SynValData(Some memberFlags, _, _)), _) -> not memberFlags.IsDispatchSlot | SynMemberDefn.Interface (_, defOpt, _) -> Option.isSome defOpt | SynMemberDefn.LetBindings _ -> true | SynMemberDefn.ImplicitCtor _ -> true @@ -4799,7 +4799,7 @@ module TcDeclarations = let hasSelfReferentialCtor = members |> List.exists (function | SynMemberDefn.ImplicitCtor (_, _, _, thisIdOpt, _, _) - | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(_, _, thisIdOpt), _, _, _, _, _), _) -> thisIdOpt.IsSome + | SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(thisIdOpt=thisIdOpt))) -> thisIdOpt.IsSome | _ -> false) let implicitCtorSynPats = @@ -4811,7 +4811,7 @@ module TcDeclarations = // members of the type let preEstablishedHasDefaultCtor = members |> List.exists (function - | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), SynPatForConstructorDecl SynPatForNullaryArgs, _, _, _, _), _) -> + | SynMemberDefn.Member(memberDefn=SynBinding(valData=SynValData(memberFlags=Some memberFlags); headPat = SynPatForConstructorDecl SynPatForNullaryArgs)) -> memberFlags.MemberKind=SynMemberKind.Constructor | SynMemberDefn.ImplicitCtor (_, _, SynSimplePats.SimplePats(spats, _), _, _, _) -> isNil spats | _ -> false) @@ -4914,7 +4914,7 @@ module TcDeclarations = //------------------------------------------------------------------------- /// Separates the signature declaration into core (shape) and body. - let rec private SplitTyconSignature (SynTypeDefnSig(synTyconInfo, trepr, extraMembers, _)) = + let rec private SplitTyconSignature (SynTypeDefnSig(typeInfo=synTyconInfo; typeRepr=trepr; members=extraMembers)) = let implements1 = extraMembers |> List.choose (function SynMemberSig.Interface (f, m) -> Some(f, m) | _ -> None) @@ -5065,10 +5065,10 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS let env = List.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) idvs env return env - | SynModuleSigDecl.NestedModule(SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im) as compInfo, isRec, mdefs, m) -> + | SynModuleSigDecl.NestedModule(SynComponentInfo(attributes=Attributes attribs; longId=longPath; xmlDoc=xml; accessibility=vis; range=im) as compInfo, isRec, mEquals, mdefs, m) -> if isRec then // Treat 'module rec M = ...' as a single mutually recursive definition group 'module M = ...' - let modDecl = SynModuleSigDecl.NestedModule(compInfo, false, mdefs, m) + let modDecl = SynModuleSigDecl.NestedModule(compInfo, false, mEquals, mdefs, m) return! TcSignatureElementsMutRec cenv parent typeNames endm None env [modDecl] else @@ -5134,7 +5134,7 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS let enclosingNamespacePath, defs = if kind.IsModule then let nsp, modName = List.frontAndBack longId - let modDecl = [SynModuleSigDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, defs, m)] + let modDecl = [SynModuleSigDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, None, defs, m)] nsp, modDecl else longId, defs @@ -5225,7 +5225,7 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d | SynModuleSigDecl.Exception (SynExceptionSig(exnRepr, members, _), _) -> let ( SynExceptionDefnRepr(synAttrs, SynUnionCase(_, id, _args, _, _, _), _, doc, vis, m)) = exnRepr let compInfo = SynComponentInfo(synAttrs, None, [], [id], doc, false, vis, id.idRange) - let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m)) ] + let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, None, SynTypeDefnSigRepr.Exception exnRepr, members, m)) ] decls, (false, false) | SynModuleSigDecl.Val (vspec, _) -> @@ -5233,7 +5233,7 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d let decls = [ MutRecShape.Lets vspec ] decls, (false, false) - | SynModuleSigDecl.NestedModule(compInfo, isRec, synDefs, moduleRange) -> + | SynModuleSigDecl.NestedModule(moduleInfo=compInfo; isRecursive=isRec; moduleDecls=synDefs; range=moduleRange) -> if isRec then warning(Error(FSComp.SR.tcRecImplied(), compInfo.Range)) let mutRecDefs = loop false moduleRange synDefs let decls = [MutRecShape.Module (compInfo, mutRecDefs)] @@ -5280,7 +5280,7 @@ and TcModuleOrNamespaceSignatureElementsNonMutRec cenv parent env (id, modKind, let ElimModuleDoBinding bind = match bind with | SynModuleDecl.DoExpr (spExpr, expr, m) -> - let bind2 = SynBinding (None, SynBindingKind.StandaloneExpression, false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, SynPat.Wild m, None, expr, m, spExpr) + let bind2 = SynBinding (None, SynBindingKind.StandaloneExpression, false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, SynPat.Wild m, None, None, expr, m, spExpr) SynModuleDecl.Let(false, [bind2], m) | _ -> bind @@ -5310,7 +5310,7 @@ let TcMutRecDefnsEscapeCheck (binds: MutRecShapes<_, _, _>) env = let CheckLetOrDoInNamespace binds m = match binds with - | [ SynBinding (None, (SynBindingKind.StandaloneExpression | SynBindingKind.Do), false, false, [], _, _, _, None, (SynExpr.Do (SynExpr.Const (SynConst.Unit, _), _) | SynExpr.Const (SynConst.Unit, _)), _, _) ] -> + | [ SynBinding (accessibility=None; kind=(SynBindingKind.StandaloneExpression | SynBindingKind.Do); isInline=false; isMutable=false; attributes=[]; returnInfo=None; expr=(SynExpr.Do (expr=SynExpr.Const (constant=SynConst.Unit)) | SynExpr.Const (constant=SynConst.Unit))) ] -> () | [] -> error(Error(FSComp.SR.tcNamespaceCannotContainValues(), m)) @@ -5378,12 +5378,12 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem | SynModuleDecl.HashDirective _ -> return (id, []), env, env - | SynModuleDecl.NestedModule(compInfo, isRec, mdefs, isContinuingModule, m) -> + | SynModuleDecl.NestedModule(compInfo, isRec, mEquals, mdefs, isContinuingModule, m) -> // Treat 'module rec M = ...' as a single mutually recursive definition group 'module M = ...' if isRec then assert (not isContinuingModule) - let modDecl = SynModuleDecl.NestedModule(compInfo, false, mdefs, isContinuingModule, m) + let modDecl = SynModuleDecl.NestedModule(compInfo, false, mEquals, mdefs, isContinuingModule, m) return! TcModuleOrNamespaceElementsMutRec cenv parent typeNames m env None [modDecl] else let (SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im)) = compInfo @@ -5447,7 +5447,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem let enclosingNamespacePath, defs = if kind.IsModule then let nsp, modName = List.frontAndBack longId - let modDecl = [SynModuleDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, defs, true, m)] + let modDecl = [SynModuleDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, None, defs, true, m)] nsp, modDecl else longId, defs @@ -5548,7 +5548,7 @@ and TcModuleOrNamespaceElementsMutRec (cenv: cenv) parent typeNames m envInitial else List.map (List.singleton >> MutRecShape.Lets) binds binds, (false, false, attrs) - | SynModuleDecl.NestedModule(compInfo, isRec, synDefs, _isContinuingModule, moduleRange) -> + | SynModuleDecl.NestedModule(moduleInfo=compInfo; isRecursive=isRec; decls=synDefs; range=moduleRange) -> if isRec then warning(Error(FSComp.SR.tcRecImplied(), compInfo.Range)) let mutRecDefs, (_, _, attrs) = loop false moduleRange attrs synDefs let decls = [MutRecShape.Module (compInfo, mutRecDefs)] @@ -5562,7 +5562,7 @@ and TcModuleOrNamespaceElementsMutRec (cenv: cenv) parent typeNames m envInitial | SynModuleDecl.Exception (SynExceptionDefn(repr, members, _), _m) -> let (SynExceptionDefnRepr(synAttrs, SynUnionCase(_, id, _args, _, _, _), _repr, doc, vis, m)) = repr let compInfo = SynComponentInfo(synAttrs, None, [], [id], doc, false, vis, id.idRange) - let decls = [ MutRecShape.Tycon(SynTypeDefn(compInfo, SynTypeDefnRepr.Exception repr, members, None, m)) ] + let decls = [ MutRecShape.Tycon(SynTypeDefn(compInfo, None, SynTypeDefnRepr.Exception repr, members, None, m)) ] decls, (false, false, attrs) | SynModuleDecl.HashDirective _ -> diff --git a/src/fsharp/CheckExpressions.fs b/src/fsharp/CheckExpressions.fs index ce1fab90d7..65ed52fa40 100644 --- a/src/fsharp/CheckExpressions.fs +++ b/src/fsharp/CheckExpressions.fs @@ -2482,7 +2482,7 @@ module BindingNormalization = let NormalizeBinding isObjExprBinding cenv (env: TcEnv) binding = match binding with - | SynBinding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, rhsExpr, mBinding, spBind) -> + | SynBinding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, _, rhsExpr, mBinding, spBind) -> let (NormalizedBindingPat(pat, rhsExpr, valSynData, typars)) = NormalizeBindingPattern cenv cenv.nameResolver isObjExprBinding env valSynData p (NormalizedBindingRhs ([], retInfo, rhsExpr)) let paramNames = Some valSynData.SynValInfo.ArgNames @@ -4980,7 +4980,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let getArgPatterns () = match args with | SynArgPats.Pats args -> args - | SynArgPats.NamePatPairs (pairs, _) -> List.map snd pairs + | SynArgPats.NamePatPairs (pairs, _) -> List.map (fun (_, _, pat) -> pat) pairs let tcArgPatterns () = let args = getArgPatterns () @@ -5104,7 +5104,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let result = Array.zeroCreate numArgTys let extraPatterns = List () - for id, pat in pairs do + for id, _, pat in pairs do match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with | None -> extraPatterns.Add pat @@ -5267,6 +5267,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p else List.foldBack (mkConsListPat cenv.g argty) args' (mkNilListPat cenv.g m argty)), acc | SynPat.Record (flds, m) -> + let flds = List.map (fun (f, _, p) -> f,p) flds let tinst, tcref, fldsmap, _fldsList = BuildFieldMap cenv env true ty flds m // REVIEW: use _fldsList to type check pattern in code order not field defn order let gtyp = mkAppTy tcref tinst @@ -5855,7 +5856,7 @@ and TcExprUndelayed cenv (overallTy: OverallTy) env tpenv (synExpr: SynExpr) = let bodyExpr, tpenv = TcStmt cenv env tpenv synBodyExpr mkWhile cenv.g (spWhile, NoSpecialWhileLoopMarker, guardExpr, bodyExpr, m), tpenv - | SynExpr.For (spBind, id, start, dir, finish, body, m) -> + | SynExpr.For (spBind, id, _, start, dir, finish, body, m) -> UnifyTypes cenv env m overallTy.Commit cenv.g.unit_ty let startExpr, tpenv = TcExpr cenv (MustEqual cenv.g.int_ty) env tpenv start let finishExpr, tpenv = TcExpr cenv (MustEqual cenv.g.int_ty) env tpenv finish @@ -7218,7 +7219,7 @@ and TcRecdExpr cenv (overallTy: TType) env tpenv (inherits, optOrigExpr, flds, m let flds = [ // if we met at least one field that is not syntactically correct - raise ReportedError to transfer control to the recovery routine - for (lidwd, isOk), v, _ in flds do + for SynExprRecordField(fieldName=(lidwd, isOk); expr=v) in flds do if not isOk then // raising ReportedError None transfers control to the closest errorRecovery point but do not make any records into log // we assume that parse errors were already reported @@ -7291,11 +7292,11 @@ and TcRecdExpr cenv (overallTy: TType) env tpenv (inherits, optOrigExpr, flds, m // Check '{| .... |}' and TcAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, optOrigSynExpr, unsortedFieldIdsAndSynExprsGiven, mWholeExpr) = - let unsortedFieldSynExprsGiven = List.map snd unsortedFieldIdsAndSynExprsGiven + let unsortedFieldSynExprsGiven = List.map (fun (_, _, e) -> e) unsortedFieldIdsAndSynExprsGiven match optOrigSynExpr with | None -> - let unsortedFieldIds = unsortedFieldIdsAndSynExprsGiven |> List.map fst |> List.toArray + let unsortedFieldIds = unsortedFieldIdsAndSynExprsGiven |> List.map (fun (f, _, _) -> f) |> List.toArray let anonInfo, sortedFieldTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIds // Sort into canonical order @@ -7308,7 +7309,7 @@ and TcAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, optOrigSynExpr, let sigma = List.map fst sortedIndexedArgs |> List.toArray let sortedFieldExprs = List.map snd sortedIndexedArgs - sortedFieldExprs |> List.iteri (fun j (x, _) -> + sortedFieldExprs |> List.iteri (fun j (x, _, _) -> let item = Item.AnonRecdField(anonInfo, sortedFieldTys, j, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights)) @@ -7355,7 +7356,7 @@ and TcAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, optOrigSynExpr, /// - Choice1Of2 for a new binding /// - Choice2Of2 for a binding coming from the original expression let unsortedIdAndExprsAll = - [| for id, e in unsortedFieldIdsAndSynExprsGiven do + [| for id, _, e in unsortedFieldIdsAndSynExprsGiven do yield (id, Choice1Of2 e) match tryDestAnonRecdTy cenv.g origExprTy with | ValueSome (anonInfo, tinst) -> @@ -8336,7 +8337,7 @@ and TcItemThen cenv (overallTy: OverallTy) env tpenv (tinstEnclosing, item, mIte | SynExpr.Tuple (_, synExprs, _, _) | SynExpr.ArrayOrList (_, synExprs, _) -> synExprs |> List.forall isSimpleArgument - | SynExpr.Record (_, copyOpt, fields, _) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall (p23 >> Option.forall isSimpleArgument) + | SynExpr.Record (copyInfo=copyOpt; recordFields=fields) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall ((fun (SynExprRecordField(expr=e)) -> e) >> Option.forall isSimpleArgument) | SynExpr.App (_, _, synExpr, synExpr2, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 | SynExpr.IfThenElse (_, _, synExpr, _, synExpr2, _, synExprOpt, _, _, _, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 && Option.forall isSimpleArgument synExprOpt | SynExpr.DotIndexedGet (synExpr, _, _, _) -> isSimpleArgument synExpr @@ -9534,7 +9535,7 @@ and bindLetRec (binds: Bindings) m e = and CheckRecursiveBindingIds binds = let hashOfBinds = HashSet() - for SynBinding.SynBinding(_, _, _, _, _, _, _, b, _, _, m, _) in binds do + for SynBinding.SynBinding(headPat=b; range=m) in binds do let nm = match b with | SynPat.Named(id, _, _, _) diff --git a/src/fsharp/ParseAndCheckInputs.fs b/src/fsharp/ParseAndCheckInputs.fs index 4003fb5fc7..5ad43a5354 100644 --- a/src/fsharp/ParseAndCheckInputs.fs +++ b/src/fsharp/ParseAndCheckInputs.fs @@ -322,9 +322,9 @@ let TestInteractionParserAndExit (tokenizer: Tokenizer, lexbuf: LexBuffer) // Report the statistics for testing purposes let ReportParsingStatistics res = let rec flattenSpecs specs = - specs |> List.collect (function SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> flattenSpecs subDecls | spec -> [spec]) + specs |> List.collect (function SynModuleSigDecl.NestedModule (moduleDecls=subDecls) -> flattenSpecs subDecls | spec -> [spec]) let rec flattenDefns specs = - specs |> List.collect (function SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> flattenDefns subDecls | defn -> [defn]) + specs |> List.collect (function SynModuleDecl.NestedModule (decls=subDecls) -> flattenDefns subDecls | defn -> [defn]) let flattenModSpec (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) = flattenSpecs decls let flattenModImpl (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) = flattenDefns decls @@ -616,21 +616,21 @@ let ProcessMetaCommandsFromInput decls |> List.iter (fun d -> match d with | SynModuleSigDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) - | SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> WarnOnIgnoredSpecDecls subDecls + | SynModuleSigDecl.NestedModule (moduleDecls=subDecls) -> WarnOnIgnoredSpecDecls subDecls | _ -> ()) let rec WarnOnIgnoredImplDecls decls = decls |> List.iter (fun d -> match d with | SynModuleDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) - | SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> WarnOnIgnoredImplDecls subDecls + | SynModuleDecl.NestedModule (decls=subDecls) -> WarnOnIgnoredImplDecls subDecls | _ -> ()) let ProcessMetaCommandsFromModuleSpec state (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) = List.fold (fun s d -> match d with | SynModuleSigDecl.HashDirective (h, _) -> ProcessMetaCommand s h - | SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> WarnOnIgnoredSpecDecls subDecls; s + | SynModuleSigDecl.NestedModule (moduleDecls=subDecls) -> WarnOnIgnoredSpecDecls subDecls; s | _ -> s) state decls @@ -639,7 +639,7 @@ let ProcessMetaCommandsFromInput List.fold (fun s d -> match d with | SynModuleDecl.HashDirective (h, _) -> ProcessMetaCommand s h - | SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> WarnOnIgnoredImplDecls subDecls; s + | SynModuleDecl.NestedModule (decls=subDecls) -> WarnOnIgnoredImplDecls subDecls; s | _ -> s) state decls diff --git a/src/fsharp/SyntaxTree.fs b/src/fsharp/SyntaxTree.fs index 76bfd822d3..6077a1b35d 100644 --- a/src/fsharp/SyntaxTree.fs +++ b/src/fsharp/SyntaxTree.fs @@ -483,7 +483,7 @@ type SynExpr = | AnonRecd of isStruct: bool * copyInfo:(SynExpr * BlockSeparator) option * - recordFields:(Ident * SynExpr) list * + recordFields:(Ident * Range option * SynExpr) list * range: range | ArrayOrList of @@ -494,7 +494,7 @@ type SynExpr = | Record of baseInfo:(SynType * SynExpr * range * BlockSeparator option * range) option * copyInfo:(SynExpr * BlockSeparator) option * - recordFields:(RecordFieldName * SynExpr option * BlockSeparator option) list * + recordFields: SynExprRecordField list * range: range | New of @@ -520,6 +520,7 @@ type SynExpr = | For of forDebugPoint: DebugPointAtFor * ident: Ident * + equalsRange: Range option * identBody: SynExpr * direction: bool * toBody: SynExpr * @@ -777,8 +778,9 @@ type SynExpr = isUse: bool * isFromSource: bool * pat: SynPat * + equalsRange: Range option * rhs: SynExpr * - andBangs:(DebugPointAtBinding * bool * bool * SynPat * SynExpr * range) list * + andBangs: SynExprAndBang list * body:SynExpr * range: range @@ -940,6 +942,25 @@ type SynExpr = | SynExpr.ArbitraryAfterError _ -> true | _ -> false +[] +type SynExprAndBang = + | SynExprAndBang of + debugPoint: DebugPointAtBinding * + isUse: bool * + isFromSource: bool * + pat: SynPat * + equalsRange: Range * + body: SynExpr * + range: Range + +[] +type SynExprRecordField = + | SynExprRecordField of + fieldName: RecordFieldName * + equalsRange: Range option * + expr: SynExpr option * + blockSeparator: BlockSeparator option + [] type SynInterpolatedStringPart = | String of value: string * range: range @@ -1012,13 +1033,13 @@ type SynArgPats = pats: SynPat list | NamePatPairs of - pats: (Ident * SynPat) list * + pats: (Ident * Range * SynPat) list * range: range member x.Patterns = match x with | Pats pats -> pats - | NamePatPairs (pats, _) -> pats |> List.map snd + | NamePatPairs (pats, _) -> pats |> List.map (fun (_,_, pat) -> pat) [] type SynPat = @@ -1083,7 +1104,7 @@ type SynPat = range: range | Record of - fieldPats: ((LongIdent * Ident) * SynPat) list * + fieldPats: ((LongIdent * Ident) * Range * SynPat) list * range: range | Null of @@ -1212,6 +1233,7 @@ type SynBinding = valData: SynValData * headPat: SynPat * returnInfo: SynBindingReturnInfo option * + equalsRange: Range option * expr: SynExpr * range: range * debugPoint: DebugPointAtBinding @@ -1366,7 +1388,8 @@ type SynEnumCase = | SynEnumCase of attributes: SynAttributes * - ident: Ident * + ident: Ident * + equalsRange: Range * value: SynConst * valueRange: range * xmlDoc: PreXmlDoc * @@ -1427,6 +1450,7 @@ type SynTypeDefnSig = | SynTypeDefnSig of typeInfo: SynComponentInfo * + equalsRange: Range option * typeRepr: SynTypeDefnSigRepr * members: SynMemberSig list * range: range @@ -1570,6 +1594,7 @@ type SynTypeDefnRepr = type SynTypeDefn = | SynTypeDefn of typeInfo: SynComponentInfo * + equalsRange: Range option * typeRepr: SynTypeDefnRepr * members: SynMemberDefns * implicitConstructor: SynMemberDefn option * @@ -1643,6 +1668,7 @@ type SynMemberDefn = memberFlags:(SynMemberKind -> SynMemberFlags) * xmlDoc: PreXmlDoc * accessibility: SynAccess option * + equalsRange: Range * synExpr: SynExpr * getSetRange: range option * range: range @@ -1674,6 +1700,7 @@ type SynModuleDecl = | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * + equalsRange: Range option * decls: SynModuleDecl list * isContinuing: bool * range: range @@ -1754,6 +1781,7 @@ type SynModuleSigDecl = | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * + equalsRange: Range option * moduleDecls: SynModuleSigDecl list * range: range diff --git a/src/fsharp/SyntaxTree.fsi b/src/fsharp/SyntaxTree.fsi index 97a766b8ff..26d430f456 100644 --- a/src/fsharp/SyntaxTree.fsi +++ b/src/fsharp/SyntaxTree.fsi @@ -587,7 +587,7 @@ type SynExpr = | AnonRecd of isStruct: bool * copyInfo:(SynExpr * BlockSeparator) option * - recordFields:(Ident * SynExpr) list * + recordFields:(Ident * Range option * SynExpr) list * range: range /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] @@ -603,7 +603,7 @@ type SynExpr = | Record of baseInfo:(SynType * SynExpr * range * BlockSeparator option * range) option * copyInfo:(SynExpr * BlockSeparator) option * - recordFields:(RecordFieldName * SynExpr option * BlockSeparator option) list * + recordFields: SynExprRecordField list * range: range /// F# syntax: new C(...) @@ -634,6 +634,7 @@ type SynExpr = | For of forDebugPoint: DebugPointAtFor * ident: Ident * + equalsRange: Range option * identBody: SynExpr * direction: bool * toBody: SynExpr * @@ -966,8 +967,9 @@ type SynExpr = isUse: bool * isFromSource: bool * pat: SynPat * + equalsRange: Range option * rhs: SynExpr * - andBangs:(DebugPointAtBinding * bool * bool * SynPat * SynExpr * range) list * + andBangs: SynExprAndBang list * body:SynExpr * range: range @@ -1053,6 +1055,25 @@ type SynExpr = /// Indicates if this expression arises from error recovery member IsArbExprAndThusAlreadyReportedError: bool +[] +type SynExprAndBang = + | SynExprAndBang of + debugPoint: DebugPointAtBinding * + isUse: bool * + isFromSource: bool * + pat: SynPat * + equalsRange: Range * + body: SynExpr * + range: Range + +[] +type SynExprRecordField = + | SynExprRecordField of + fieldName: RecordFieldName * + equalsRange: Range option * + expr: SynExpr option * + blockSeparator: BlockSeparator option + [] type SynInterpolatedStringPart = | String of value: string * range: range @@ -1145,7 +1166,7 @@ type SynArgPats = pats: SynPat list | NamePatPairs of - pats: (Ident * SynPat) list * + pats: (Ident * Range * SynPat) list * range: range member Patterns: SynPat list @@ -1227,7 +1248,7 @@ type SynPat = /// A record pattern | Record of - fieldPats: ((LongIdent * Ident) * SynPat) list * + fieldPats: ((LongIdent * Ident) * Range * SynPat) list * range: range /// The 'null' pattern @@ -1351,6 +1372,7 @@ type SynBinding = valData: SynValData * headPat: SynPat * returnInfo: SynBindingReturnInfo option * + equalsRange: Range option * expr: SynExpr * range: range * debugPoint: DebugPointAtBinding @@ -1529,7 +1551,8 @@ type SynEnumCase = | SynEnumCase of attributes: SynAttributes * - ident: Ident * + ident: Ident * + equalsRange: Range * value: SynConst * valueRange: range * xmlDoc: PreXmlDoc * @@ -1597,6 +1620,7 @@ type SynTypeDefnSig = /// The information for a type definition in a signature | SynTypeDefnSig of typeInfo: SynComponentInfo * + equalsRange: Range option * typeRepr: SynTypeDefnSigRepr * members: SynMemberSig list * range: range @@ -1753,6 +1777,7 @@ type SynTypeDefnRepr = type SynTypeDefn = | SynTypeDefn of typeInfo: SynComponentInfo * + equalsRange: Range option * typeRepr: SynTypeDefnRepr * members: SynMemberDefns * implicitConstructor: SynMemberDefn option * @@ -1837,6 +1862,7 @@ type SynMemberDefn = memberFlags:(SynMemberKind -> SynMemberFlags) * xmlDoc: PreXmlDoc * accessibility: SynAccess option * + equalsRange: Range * synExpr: SynExpr * getSetRange: range option * range: range @@ -1860,6 +1886,7 @@ type SynModuleDecl = | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * + equalsRange: Range option * decls: SynModuleDecl list * isContinuing: bool * range: range @@ -1943,6 +1970,7 @@ type SynModuleSigDecl = | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * + equalsRange: Range option * moduleDecls: SynModuleSigDecl list * range: range diff --git a/src/fsharp/SyntaxTreeOps.fs b/src/fsharp/SyntaxTreeOps.fs index 938fb41801..d5802d7226 100644 --- a/src/fsharp/SyntaxTreeOps.fs +++ b/src/fsharp/SyntaxTreeOps.fs @@ -566,10 +566,10 @@ let mkSynBindingRhs staticOptimizations rhsExpr mRhs retInfo = | None -> rhsExpr, None rhsExpr, retTyOpt -let mkSynBinding (xmlDoc, headPat) (vis, isInline, isMutable, mBind, spBind, retInfo, origRhsExpr, mRhs, staticOptimizations, attrs, memberFlagsOpt) = +let mkSynBinding (xmlDoc, headPat) (vis, isInline, isMutable, mBind, spBind, retInfo, mEquals, origRhsExpr, mRhs, staticOptimizations, attrs, memberFlagsOpt) = let info = SynInfo.InferSynValData (memberFlagsOpt, Some headPat, retInfo, origRhsExpr) let rhsExpr, retTyOpt = mkSynBindingRhs staticOptimizations origRhsExpr mRhs retInfo - SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, rhsExpr, mBind, spBind) + SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, mEquals, rhsExpr, mBind, spBind) let NonVirtualMemberFlags k : SynMemberFlags = { MemberKind=k @@ -618,7 +618,7 @@ let inferredTyparDecls = SynValTyparDecls(None, true) let noInferredTypars = SynValTyparDecls(None, false) let rec synExprContainsError inpExpr = - let rec walkBind (SynBinding(_, _, _, _, _, _, _, _, _, synExpr, _, _)) = walkExpr synExpr + let rec walkBind (SynBinding(expr=synExpr)) = walkExpr synExpr and walkExprs es = es |> List.exists walkExpr @@ -684,11 +684,11 @@ let rec synExprContainsError inpExpr = | SynExpr.AnonRecd (_, origExpr, flds, _) -> (match origExpr with Some (e, _) -> walkExpr e | None -> false) || - walkExprs (List.map snd flds) + walkExprs (List.map (fun (_, _, e) -> e) flds) | SynExpr.Record (_, origExpr, fs, _) -> (match origExpr with Some (e, _) -> walkExpr e | None -> false) || - let flds = fs |> List.choose (fun (_, v, _) -> v) + let flds = fs |> List.choose (fun (SynExprRecordField(expr=v)) -> v) walkExprs flds | SynExpr.ObjExpr (_, _, bs, is, _, _) -> @@ -698,7 +698,7 @@ let rec synExprContainsError inpExpr = | SynExpr.While (_, e1, e2, _) -> walkExpr e1 || walkExpr e2 - | SynExpr.For (_, _, e1, _, e2, e3, _) -> + | SynExpr.For (identBody=e1; toBody=e2; doBody=e3) -> walkExpr e1 || walkExpr e2 || walkExpr e3 | SynExpr.MatchLambda (_, _, cl, _, _) -> @@ -748,7 +748,7 @@ let rec synExprContainsError inpExpr = walkExpr e || walkMatchClauses cl | SynExpr.LetOrUseBang (rhs=e1;body=e2;andBangs=es) -> - walkExpr e1 || walkExprs [ for _,_,_,_,e,_ in es do yield e ] || walkExpr e2 + walkExpr e1 || walkExprs [ for SynExprAndBang(body=e) in es do yield e ] || walkExpr e2 | SynExpr.InterpolatedString (parts, _, _m) -> walkExprs diff --git a/src/fsharp/SyntaxTreeOps.fsi b/src/fsharp/SyntaxTreeOps.fsi index 3183c9cb81..faa9725da4 100644 --- a/src/fsharp/SyntaxTreeOps.fsi +++ b/src/fsharp/SyntaxTreeOps.fsi @@ -240,7 +240,7 @@ val mkSynBindingRhs: staticOptimizations:(SynStaticOptimizationConstraint list * val mkSynBinding: xmlDoc:PreXmlDoc * headPat:SynPat -> vis:SynAccess option * isInline:bool * isMutable:bool * mBind:range * - spBind:DebugPointAtBinding * retInfo:SynReturnInfo option * origRhsExpr:SynExpr * mRhs:range * + spBind:DebugPointAtBinding * retInfo:SynReturnInfo option * mEquals: Range option * origRhsExpr:SynExpr * mRhs:range * staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list * attrs:SynAttributes * memberFlagsOpt:SynMemberFlags option -> SynBinding diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 730f582d29..ea5e68dc7b 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1439,7 +1439,7 @@ type internal FsiDynamicCompiler let itID = mkSynId m itName //let itExp = SynExpr.Ident itID - let mkBind pat expr = SynBinding (None, SynBindingKind.Do, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, expr, m, DebugPointAtBinding.NoneAtInvisible) + let mkBind pat expr = SynBinding (None, SynBindingKind.Do, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, None, expr, m, DebugPointAtBinding.NoneAtInvisible) let bindingA = mkBind (mkSynPatVar None itID) expr (* let it = *) // NOTE: the generalizability of 'expr' must not be damaged, e.g. this can't be an application //let saverPath = ["Microsoft";"FSharp";"Compiler";"Interactive";"RuntimeHelpers";"SaveIt"] //let dots = List.replicate (saverPath.Length - 1) m @@ -2317,7 +2317,7 @@ type internal FsiInteractionProcessor // only add automatic debugger breaks before 'let' or 'do' expressions with sequence points match def with | SynModuleDecl.DoExpr (DebugPointAtBinding.Yes _, _, _) - | SynModuleDecl.Let (_, SynBinding(_, _, _, _, _, _, _, _,_,_,_, DebugPointAtBinding.Yes _) :: _, _) -> true + | SynModuleDecl.Let (bindings=SynBinding(debugPoint=DebugPointAtBinding.Yes _) :: _) -> true | _ -> false let defsA = Seq.takeWhile (isDefHash >> not) defs |> Seq.toList let defsB = Seq.skipWhile (isDefHash >> not) defs |> Seq.toList diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index be34512691..19d0e6b82a 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -45,10 +45,10 @@ let patFromParseError (e:SynPat) = SynPat.FromParseError(e, e.Range) // to form // binding1*sep1, binding2*sep2 let rebindRanges first fields lastSep = - let rec run (name, value) l acc = + let rec run (name, mEquals, value) l acc = match l with - | [] -> List.rev ((name, value, lastSep) :: acc) - | (f, m) :: xs -> run f xs ((name, value, m) :: acc) + | [] -> List.rev (SynExprRecordField(name, mEquals, value, lastSep) :: acc) + | (f, m) :: xs -> run f xs (SynExprRecordField(name, mEquals, value, m) :: acc) run first fields [] let mkUnderscoreRecdField m = LongIdentWithDots([ident("_", m)], []), false @@ -63,7 +63,7 @@ let mkSynDoBinding (vis, strict, expr, m) = (if strict then SynBindingKind.Do else SynBindingKind.StandaloneExpression), false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, (if strict then SynPat.Const(SynConst.Unit, m) else SynPat.Wild m), - None, expr, m, DebugPointAtBinding.NoneAtDo) + None, None, expr, m, DebugPointAtBinding.NoneAtDo) let mkSynDoDecl (e: SynExpr) = let spExpr = if IsControlFlowExpression e then DebugPointAtBinding.NoneAtDo else DebugPointAtBinding.Yes e.Range @@ -808,18 +808,18 @@ moduleSpfn: let info = SynComponentInfo($1 @ attribs2, None, [], path, xmlDoc, false, vis, rhs parseState 3) if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) let m = (rhs2 parseState 1 4, $5) ||> unionRangeWithListBy (fun (d: SynModuleSigDecl) -> d.Range) - SynModuleSigDecl.NestedModule(info, isRec, $5, m) } + SynModuleSigDecl.NestedModule(info, isRec, $4, $5, m) } | opt_attributes opt_declVisibility typeKeyword tyconSpfn tyconSpfnList { if Option.isSome $2 then errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) - let (SynTypeDefnSig (SynComponentInfo (cas, a, cs, b, _xmlDoc, d, d2, d3), e, f, g)) = $4 + let (SynTypeDefnSig (SynComponentInfo (cas, a, cs, b, _xmlDoc, d, d2, d3), equalsRange, typeRepr, members, range)) = $4 _xmlDoc.MarkAsInvalid() let attrs = $1 @ cas let mTc = let keywordM = rhs parseState 3 - (keywordM, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) |> unionRanges g + (keywordM, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) |> unionRanges range let xmlDoc = grabXmlDoc(parseState, $1, 1) - let tc = (SynTypeDefnSig(SynComponentInfo(attrs, a, cs, b, xmlDoc, d, d2, d3), e, f, mTc)) + let tc = (SynTypeDefnSig(SynComponentInfo(attrs, a, cs, b, xmlDoc, d, d2, d3), equalsRange, typeRepr, members, mTc)) let m = (mTc, $5) ||> unionRangeWithListBy (fun (a: SynTypeDefnSig) -> a.Range) SynModuleSigDecl.Types (tc :: $5, m) } @@ -876,9 +876,9 @@ tyconSpfnList: { let xmlDoc = grabXmlDoc(parseState, [], 1) let tyconSpfn = if xmlDoc.IsEmpty then $2 else - let (SynTypeDefnSig(SynComponentInfo (a, typars, c, lid, _xmlDoc, fixity, vis, rangeOfLid), typeRepr, members, range)) = $2 + let (SynTypeDefnSig(SynComponentInfo (a, typars, c, lid, _xmlDoc, fixity, vis, rangeOfLid), equalsRange, typeRepr, members, range)) = $2 _xmlDoc.MarkAsInvalid() - SynTypeDefnSig(SynComponentInfo (a, typars, c, lid, xmlDoc, fixity, vis, rangeOfLid), typeRepr, members, range) + SynTypeDefnSig(SynComponentInfo (a, typars, c, lid, xmlDoc, fixity, vis, rangeOfLid), equalsRange, typeRepr, members, range) tyconSpfn :: $3 } | @@ -889,9 +889,10 @@ tyconSpfnList: tyconSpfn: | typeNameInfo EQUALS tyconSpfnRhsBlock { let lhsm = rhs parseState 1 - $3 lhsm $1 } + let mEquals = rhs parseState 2 + $3 lhsm $1 (Some mEquals) } | typeNameInfo opt_classSpfn - { SynTypeDefnSig($1, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None (lhs parseState), lhs parseState), $2, lhs parseState) } + { SynTypeDefnSig($1, None, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None (lhs parseState), lhs parseState), $2, lhs parseState) } /* The right-hand-side of a type definition in a signature */ @@ -906,42 +907,42 @@ tyconSpfnRhsBlock: /* representation. */ | OBLOCKBEGIN tyconSpfnRhs opt_OBLOCKSEP classSpfnMembers opt_classSpfn oblockend opt_classSpfn { let m = lhs parseState - (fun lhsm nameInfo -> - $2 lhsm nameInfo (checkForMultipleAugmentations m ($4 @ $5) $7)) } + (fun lhsm nameInfo mEquals -> + $2 lhsm nameInfo mEquals (checkForMultipleAugmentations m ($4 @ $5) $7)) } | tyconSpfnRhs opt_classSpfn { let m = lhs parseState - (fun lhsm nameInfo -> - $1 lhsm nameInfo $2) } + (fun lhsm nameInfo mEquals -> + $1 lhsm nameInfo mEquals $2) } /* The right-hand-side of a type definition in a signature */ tyconSpfnRhs: | tyconDefnOrSpfnSimpleRepr - { (fun lhsm nameInfo augmentation -> + { (fun lhsm nameInfo mEquals augmentation -> let declRange = unionRanges lhsm $1.Range let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range) - SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.Simple ($1, $1.Range), augmentation, mWhole)) } + SynTypeDefnSig(nameInfo, mEquals, SynTypeDefnSigRepr.Simple ($1, $1.Range), augmentation, mWhole)) } | tyconClassSpfn { let objectModelRange = lhs parseState let needsCheck, (kind, decls) = $1 - (fun nameRange nameInfo augmentation -> + (fun nameRange nameInfo mEquals augmentation -> if needsCheck && isNil decls then reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()) let declRange = unionRanges nameRange objectModelRange let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range) - SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (kind, decls, objectModelRange), augmentation, mWhole)) } + SynTypeDefnSig(nameInfo, mEquals, SynTypeDefnSigRepr.ObjectModel (kind, decls, objectModelRange), augmentation, mWhole)) } | DELEGATE OF topType { let m = lhs parseState let ty, arity = $3 let invoke = SynMemberSig.Member(SynValSig([], mkSynId m "Invoke", inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m), AbstractMemberFlags SynMemberKind.Member, m) - (fun nameRange nameInfo augmentation -> + (fun nameRange nameInfo mEquals augmentation -> if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) let mWhole = unionRanges nameRange m - SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), [], mWhole)) } + SynTypeDefnSig(nameInfo, mEquals, SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), [], mWhole)) } /* The right-hand-side of an object type definition in a signature */ @@ -1298,11 +1299,11 @@ moduleDefn: | opt_attributes opt_declVisibility typeKeyword tyconDefn tyconDefnList { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) let xmlDoc = grabXmlDoc(parseState, $1, 1) - let (SynTypeDefn(SynComponentInfo(cas, a, cs, b, _xmlDoc, d, d2, d3), e, f, g, h)) = $4 + let (SynTypeDefn(SynComponentInfo(cas, a, cs, b, _xmlDoc, d, d2, d3), mEquals, e, f, g, h)) = $4 _xmlDoc.MarkAsInvalid() let attrs = $1@cas let mTc = (h, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let tc = (SynTypeDefn(SynComponentInfo(attrs, a, cs, b, xmlDoc, d, d2, d3), e, f, g, mTc)) + let tc = (SynTypeDefn(SynComponentInfo(attrs, a, cs, b, xmlDoc, d, d2, d3), mEquals, e, f, g, mTc)) let types = tc :: $5 [ SynModuleDecl.Types(types, (rhs parseState 3, types) ||> unionRangeWithListBy (fun t -> t.Range) ) ] } @@ -1334,7 +1335,8 @@ moduleDefn: | Choice2Of2 def -> if not (isSingleton path) then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()) let info = SynComponentInfo(attribs @ attribs2, None, [], path, xmlDoc, false, vis, rhs parseState 3) - [ SynModuleDecl.NestedModule(info, isRec, def, false, (rhs2 parseState 1 4, def) ||> unionRangeWithListBy (fun d -> d.Range) ) ] } + let mEquals = rhs parseState 4 + [ SynModuleDecl.NestedModule(info, isRec, Some mEquals, def, false, (rhs2 parseState 1 4, def) ||> unionRangeWithListBy (fun d -> d.Range) ) ] } /* unattached custom attributes */ | attributes recover @@ -1528,9 +1530,9 @@ tyconDefnList: { let xmlDoc = grabXmlDoc(parseState, [], 1) let tyconDefn = if xmlDoc.IsEmpty then $2 else - let (SynTypeDefn(SynComponentInfo (a, typars, c, lid, _xmlDoc, fixity, vis, rangeOfLid), typeRepr, members, implicitConstructor, range)) = $2 + let (SynTypeDefn(SynComponentInfo (a, typars, c, lid, _xmlDoc, fixity, vis, rangeOfLid), mEquals, typeRepr, members, implicitConstructor, range)) = $2 _xmlDoc.MarkAsInvalid() - SynTypeDefn(SynComponentInfo (a, typars, c, lid, xmlDoc, fixity, vis, rangeOfLid), typeRepr, members, implicitConstructor, range) + SynTypeDefn(SynComponentInfo (a, typars, c, lid, xmlDoc, fixity, vis, rangeOfLid), mEquals, typeRepr, members, implicitConstructor, range) tyconDefn :: $3 } | { [] } @@ -1538,30 +1540,33 @@ tyconDefnList: /* A type definition */ tyconDefn: | typeNameInfo - { SynTypeDefn($1, SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.None($1.Range), $1.Range), [], None, $1.Range) } + { SynTypeDefn($1, None, SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.None($1.Range), $1.Range), [], None, $1.Range) } | typeNameInfo opt_equals tyconDefnRhsBlock - { if not $2 then ( + { match $2 with + | Some _ -> () + | None -> let (SynComponentInfo(_, _, _, lid, _, _, _, _)) = $1 // While the spec doesn't allow long idents here, the parser doesn't enforce this, so take one ident let typeNameId = List.last lid raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsEqualsMissingInTypeDefinition(typeNameId.ToString())) - ) + let nameRange = rhs parseState 1 let (tcDefRepr:SynTypeDefnRepr), members = $3 nameRange let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range) - SynTypeDefn($1, tcDefRepr, members, None, mWhole) } + SynTypeDefn($1, $2, tcDefRepr, members, None, mWhole) } | typeNameInfo tyconDefnAugmentation { let m = (rhs parseState 1, $2) ||> unionRangeWithListBy (fun mem -> mem.Range) - SynTypeDefn($1, SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, [], m), $2, None, m) } + SynTypeDefn($1, None, SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, [], m), $2, None, m) } | typeNameInfo opt_attributes opt_declVisibility opt_HIGH_PRECEDENCE_APP simplePatterns optAsSpec EQUALS tyconDefnRhsBlock { let vis, spats, az = $3, $5, $6 let nameRange = rhs parseState 1 let (tcDefRepr, members) = $8 nameRange let (SynComponentInfo(_, _, _, lid, _, _, _, _)) = $1 + let mEquals = rhs parseState 7 // Gets the XML doc comments prior to the implicit constructor let xmlDoc = grabXmlDoc(parseState, $2, 2) let memberCtorPattern = SynMemberDefn.ImplicitCtor (vis, $2, spats, az, xmlDoc, rangeOfLid lid) @@ -1572,7 +1577,7 @@ tyconDefn: let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range) - SynTypeDefn($1, tcDefRepr, members, Some memberCtorPattern, mWhole) } + SynTypeDefn($1, Some mEquals, tcDefRepr, members, Some memberCtorPattern, mWhole) } /* The right-hand-side of a type definition */ @@ -1723,8 +1728,9 @@ classDefnMemberGetSetElements: classDefnMemberGetSetElement: | opt_inline opt_attributes bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedSequentialExprBlock - { let mRhs = ($6 : SynExpr).Range - ($1, $2, $3, $4, $6, mRhs) } + { let mEquals = rhs parseState 5 + let mRhs = ($6 : SynExpr).Range + ($1, $2, $3, $4, Some mEquals, $6, mRhs) } /* The core of a member definition */ @@ -1732,19 +1738,20 @@ memberCore: /* Methods and simple getter properties */ | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedSequentialExprBlock { let mRhs = $5.Range - let optReturnType = $3 + let optReturnType = $3 + let mEquals = rhs parseState 4 let bindingBuilder, mBindLhs = $2 (fun vis memFlagsBuilder attrs rangeStart -> let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart) let memberFlags = Some (memFlagsBuilder SynMemberKind.Member) let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let binding = (bindingBuilder xmlDoc) (vis, $1, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, $5, mRhs, [], attrs, memberFlags) + let binding = (bindingBuilder xmlDoc) (vis, $1, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, Some mEquals, $5, mRhs, [], attrs, memberFlags) let memberRange = unionRanges rangeStart mRhs [ SynMemberDefn.Member (binding, memberRange) ]) } /* Properties with explicit get/set, also indexer properties */ | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet - { let mWhole = (rhs parseState 2, $4) ||> unionRangeWithListBy (fun (_, _, _, _, _, m2) -> m2) + { let mWhole = (rhs parseState 2, $4) ||> unionRangeWithListBy (fun (_, _, _, _, _, _, m2) -> m2) let propertyNameBindingBuilder, _ = $2 let optPropertyType = $3 let isMutable = false @@ -1754,7 +1761,7 @@ memberCore: let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart) // Iterate over 1 or 2 'get'/'set' entries - $4 |> List.choose (fun (optInline, optAttrs, (bindingBuilder, mBindLhs), optReturnType, expr, exprm) -> + $4 |> List.choose (fun (optInline, optAttrs, (bindingBuilder, mBindLhs), optReturnType, mEquals, expr, exprm) -> let optInline = $1 || optInline // optional attributes are only applied to getters and setters @@ -1765,8 +1772,8 @@ memberCore: let attrs = attrs @ optAttrs - let binding = (bindingBuilder xmlDoc) (visNoLongerUsed, optInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, exprm, [], attrs, Some (memFlagsBuilder SynMemberKind.Member)) - let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, _, _, mBindLhs, spBind)) = binding + let binding = (bindingBuilder xmlDoc) (visNoLongerUsed, optInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, None, expr, exprm, [], attrs, Some (memFlagsBuilder SynMemberKind.Member)) + let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, _, _, _, mBindLhs, spBind)) = binding let memberKind = let getset = let rec go p = @@ -1814,9 +1821,9 @@ memberCore: | _ -> optReturnType // REDO with the correct member kind - let binding = (bindingBuilder PreXmlDoc.Empty) (vis, isInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder memberKind)) + let binding = (bindingBuilder PreXmlDoc.Empty) (vis, isInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, mEquals, expr, exprm, [], attrs, Some(memFlagsBuilder memberKind)) - let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, rhsRetInfo, rhsExpr, mBindLhs, spBind)) = binding + let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, rhsRetInfo, mEquals, rhsExpr, mBindLhs, spBind)) = binding let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let (SynValData(_, valSynInfo, _)) = valSynData @@ -1874,9 +1881,9 @@ memberCore: let bindingPatAdjusted, xmlDocAdjusted = - let bindingOuter = (propertyNameBindingBuilder xmlDoc) (vis, optInline, isMutable, mWholeBindLhs, spBind, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder SynMemberKind.Member)) + let bindingOuter = (propertyNameBindingBuilder xmlDoc) (vis, optInline, isMutable, mWholeBindLhs, spBind, optReturnType, mEquals, expr, exprm, [], attrs, Some(memFlagsBuilder SynMemberKind.Member)) - let (SynBinding (_, _, _, _, _, doc2, _, bindingPatOuter, _, _, _, _)) = bindingOuter + let (SynBinding (_, _, _, _, _, doc2, _, bindingPatOuter, _, _, _, _, _)) = bindingOuter let lidOuter, lidVisOuter = match bindingPatOuter with @@ -1925,7 +1932,7 @@ memberCore: go pv, PreXmlDoc.Merge doc2 doc - let binding = SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mWholeBindLhs, spBind) + let binding = SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, mEquals, rhsExpr, mWholeBindLhs, spBind) let memberRange = unionRanges rangeStart mWhole Some (SynMemberDefn.Member (binding, memberRange)))) } @@ -2002,13 +2009,14 @@ classDefnMember: | opt_attributes opt_declVisibility NEW atomicPattern optAsSpec EQUALS typedSequentialExprBlock opt_ODECLEND { let mWholeBindLhs = rhs2 parseState 1 (if Option.isSome $5 then 5 else 4) let m = unionRanges mWholeBindLhs $7.Range + let mEquals = rhs parseState 6 let expr = $7 let valSynData = SynValData (Some CtorMemberFlags, SynValInfo([SynInfo.InferSynArgInfoFromPat $4], SynInfo.unnamedRetVal), $5) let vis = $2 let declPat = SynPat.LongIdent (LongIdentWithDots([mkSynId (rhs parseState 3) "new"], []), None, Some noInferredTypars, SynArgPats.Pats [$4], vis, rhs parseState 3) // Check that 'SynPatForConstructorDecl' matches this correctly assert (match declPat with SynPatForConstructorDecl _ -> true | _ -> false) - [ SynMemberDefn.Member(SynBinding (None, SynBindingKind.Normal, false, false, $1, grabXmlDoc(parseState, $1, 1), valSynData, declPat, None, expr, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible), m) ] } + [ SynMemberDefn.Member(SynBinding (None, SynBindingKind.Normal, false, false, $1, grabXmlDoc(parseState, $1, 1), valSynData, declPat, None, Some mEquals, expr, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible), m) ] } | opt_attributes opt_declVisibility STATIC typeKeyword tyconDefn { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) @@ -2031,12 +2039,13 @@ valDefnDecl: autoPropsDefnDecl: | VAL opt_mutable opt_access ident opt_typ EQUALS typedSequentialExprBlock classMemberSpfnGetSet { let mGetSetOpt, getSet = $8 + let mEquals = rhs parseState 6 if $2 then errorR (Error (FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet (), rhs parseState 3)) (fun attribs isStatic flags rangeStart -> let xmlDoc = grabXmlDocAtRangeStart(parseState, attribs, rangeStart) let memberRange = unionRanges rangeStart $7.Range - [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, flags, xmlDoc, $3, $7, mGetSetOpt, memberRange) ]) } + [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, flags, xmlDoc, $3, mEquals, $7, mGetSetOpt, memberRange) ]) } /* An optional type on an auto-property definition */ @@ -2475,8 +2484,9 @@ attrUnionCaseDecl: | opt_attributes opt_access unionCaseName EQUALS constant { if Option.isSome $2 then errorR(Error(FSComp.SR.parsEnumFieldsCannotHaveVisibilityDeclarations(), rhs parseState 2)) + let mEquals = rhs parseState 4 let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice1Of2 (SynEnumCase ( $1, $3, fst $5, snd $5, xmlDoc, mDecl))) } + (fun xmlDoc -> Choice1Of2 (SynEnumCase ( $1, $3, mEquals, fst $5, snd $5, xmlDoc, mDecl))) } /* The name of a union case */ unionCaseName: @@ -2494,7 +2504,8 @@ firstUnionCaseDeclOfMany: { Choice2Of2 (SynUnionCase ( [], $1, SynUnionCaseKind.Fields [], grabXmlDoc(parseState, [], 1), None, rhs parseState 1)) } | ident EQUALS constant opt_OBLOCKSEP - { Choice1Of2 (SynEnumCase ([], $1, fst $3, snd $3, grabXmlDoc(parseState, [], 1), rhs2 parseState 1 3)) } + { let mEquals = rhs parseState 2 + Choice1Of2 (SynEnumCase ([], $1, mEquals, fst $3, snd $3, grabXmlDoc(parseState, [], 1), rhs2 parseState 1 3)) } | firstUnionCaseDecl opt_OBLOCKSEP { $1 } @@ -2504,7 +2515,8 @@ firstUnionCaseDecl: { Choice2Of2 (SynUnionCase ( [], $1, SynUnionCaseKind.Fields $3, grabXmlDoc(parseState, [], 1), None, rhs2 parseState 1 3)) } | ident EQUALS constant opt_OBLOCKSEP - { Choice1Of2 (SynEnumCase ([], $1, fst $3, snd $3, grabXmlDoc(parseState, [], 1), rhs2 parseState 1 3)) } + { let mEquals = rhs parseState 2 + Choice1Of2 (SynEnumCase ([], $1, mEquals, fst $3, snd $3, grabXmlDoc(parseState, [], 1), rhs2 parseState 1 3)) } unionCaseReprElements: | unionCaseReprElement STAR unionCaseReprElements @@ -2714,7 +2726,7 @@ cPrototype: let xmlDoc = grabXmlDoc(parseState, attrs, 1) let binding = mkSynBinding (xmlDoc, bindingId) - (vis, false, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, Some rty, rhsExpr, mRhs, [], attrs, None) + (vis, false, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, Some rty, None, rhsExpr, mRhs, [], attrs, None) [], [binding]) } /* A list of arguments in an 'extern' DllImport function definition */ @@ -2823,7 +2835,7 @@ attr_localBinding: localBinding: | opt_inline opt_mutable bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedExprWithStaticOptimizationsBlock { let (expr:SynExpr), opts = $6 - let eqm = rhs parseState 5 + let eqm = rhs parseState 5 let mRhs = expr.Range let optReturnType = $4 let bindingBuilder, mBindLhs = $3 @@ -2833,7 +2845,7 @@ localBinding: let mWhole = (unionRanges mLetKwd mRhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let spBind = if IsControlFlowExpression expr then DebugPointAtBinding.NoneAtLet else DebugPointAtBinding.Yes mWhole let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - (bindingBuilder xmlDoc) (vis, $1, $2, mWholeBindLhs, spBind, optReturnType, expr, mRhs, opts, attrs, None)) + (bindingBuilder xmlDoc) (vis, $1, $2, mWholeBindLhs, spBind, optReturnType, Some eqm, expr, mRhs, opts, attrs, None)) localBindingRange, localBindingBuilder } | opt_inline opt_mutable bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS error @@ -2846,7 +2858,7 @@ localBinding: let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) let eqm = rhs parseState 5 let zeroWidthAtEnd = eqm.EndRange - (bindingBuilder xmlDoc) (vis, $1, $2, mBindLhs, spBind, optReturnType, arbExpr("localBinding1", zeroWidthAtEnd), mRhs, [], attrs, None)) + (bindingBuilder xmlDoc) (vis, $1, $2, mBindLhs, spBind, optReturnType, Some eqm, arbExpr("localBinding1", zeroWidthAtEnd), mRhs, [], attrs, None)) mWhole, localBindingBuilder } | opt_inline opt_mutable bindingPattern opt_topReturnTypeWithTypeConstraints recover @@ -2858,7 +2870,7 @@ localBinding: let localBindingBuilder = (fun xmlDoc attrs vis mLetKwd -> let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) - (bindingBuilder xmlDoc) (vis, $1, $2, mBindLhs, spBind, optReturnType, arbExpr("localBinding2", mRhs), mRhs, [], attrs, None)) + (bindingBuilder xmlDoc) (vis, $1, $2, mBindLhs, spBind, optReturnType, None, arbExpr("localBinding2", mRhs), mRhs, [], attrs, None)) mWhole, localBindingBuilder } @@ -3109,7 +3121,8 @@ namePatPairs: namePatPair: | ident EQUALS parenPattern - { ($1, $3) } + { let mEquals = rhs parseState 2 + ($1, mEquals, $3) } constrPattern: | atomicPatternLongIdent explicitValTyparDecls @@ -3338,7 +3351,9 @@ recordPatternElementsAux: /* Fix 1190 */ { let r = $1 in let (rs, dropMark) = $3 in (r :: rs), lhs parseState } recordPatternElement: - | path EQUALS parenPattern { (List.frontAndBack $1.Lid, $3) } + | path EQUALS parenPattern + { let mEquals = rhs parseState 2 + (List.frontAndBack $1.Lid, mEquals, $3) } listPatternElements: | /* EMPTY */ @@ -3428,14 +3443,16 @@ recover: moreBinders: | AND_BANG headBindingPattern EQUALS typedSequentialExprBlock IN moreBinders %prec expr_let { let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) + let mEquals = rhs parseState 3 let m = rhs parseState 1 (* TODO Pretty sure this is wrong *) - (spBind, $1, true, $2, $4, m) :: $6 } + SynExprAndBang(spBind, $1, true, $2, mEquals, $4, m) :: $6 } | OAND_BANG headBindingPattern EQUALS typedSequentialExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP moreBinders %prec expr_let { $5 "and!" (rhs parseState 1) // report unterminated error let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) + let mEquals = rhs parseState 3 let m = rhs parseState 1 (* TODO Pretty sure this is wrong *) - (spBind, $1, true, $2, $4, m) :: $7 } + SynExprAndBang(spBind, $1, true, $2, mEquals, $4, m) :: $7 } | %prec prec_no_more_attr_bindings { [] } @@ -3647,45 +3664,45 @@ declExpr: | FOR forLoopRange doToken typedSequentialExprBlock doneDeclEnd { let mForLoopHeader = rhs2 parseState 1 3 let spBind = DebugPointAtFor.Yes mForLoopHeader - let (a, b, c, d) = $2 + let (a, b, c, d, e) = $2 let mForLoopAll = unionRanges (rhs parseState 1) $4.Range - SynExpr.For (spBind, a, b, c, d, $4, mForLoopAll) } + SynExpr.For (spBind, a, b, c, d, e, $4, mForLoopAll) } | FOR forLoopRange doToken typedSequentialExprBlock recover { if not $5 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()) // Still produce an expression let mForLoopHeader = rhs2 parseState 1 3 let spBind = DebugPointAtFor.Yes mForLoopHeader - let (a, b, c, d) = $2 + let (a, b, c, d, e) = $2 let mForLoopAll = unionRanges (rhs parseState 1) $4.Range - exprFromParseError (SynExpr.For (spBind, a, b, c, d, $4, mForLoopAll)) } + exprFromParseError (SynExpr.For (spBind, a, b, c, d, e, $4, mForLoopAll)) } | FOR forLoopRange doToken error doneDeclEnd { // silent recovery let mForLoopHeader = rhs2 parseState 1 3 let spBind = DebugPointAtFor.Yes mForLoopHeader - let (a, b, c, d) = $2 + let (a, b, c, d, e) = $2 let mForLoopBodyArb = rhs parseState 5 let mForLoopAll = rhs2 parseState 1 5 - SynExpr.For (spBind, a, b, c, d, arbExpr("declExpr11", mForLoopBodyArb), mForLoopAll) } + SynExpr.For (spBind, a, b, c, d, e, arbExpr("declExpr11", mForLoopBodyArb), mForLoopAll) } | FOR forLoopRange doToken recover { if not $4 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()) let mForLoopHeader = rhs2 parseState 1 3 let spBind = DebugPointAtFor.Yes mForLoopHeader - let (a, b, c, d) = $2 + let (a, b, c, d, e) = $2 let mForLoopBodyArb = rhs parseState 3 let mForLoopAll = rhs2 parseState 1 3 - exprFromParseError (SynExpr.For (spBind, a, b, c, d, arbExpr("declExpr11", mForLoopBodyArb), mForLoopAll)) } + exprFromParseError (SynExpr.For (spBind, a, b, c, d, e, arbExpr("declExpr11", mForLoopBodyArb), mForLoopAll)) } | FOR forLoopRange recover { if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedEndOfFileFor()) let mForLoopHeader = rhs2 parseState 1 2 let spBind = DebugPointAtFor.Yes mForLoopHeader - let (a, b, c, d) = $2 + let (a, b, c, d, e) = $2 let mForLoopBodyArb = (rhs parseState 2).EndRange let mForLoopAll = rhs2 parseState 1 2 - exprFromParseError (SynExpr.For (spBind, a, b, c, d, arbExpr("declExpr11", mForLoopBodyArb), mForLoopAll)) } + exprFromParseError (SynExpr.For (spBind, a, b, c, d, e, arbExpr("declExpr11", mForLoopBodyArb), mForLoopAll)) } | FOR error doToken typedSequentialExprBlock doneDeclEnd @@ -3693,7 +3710,7 @@ declExpr: let mForLoopHeader = rhs2 parseState 1 2 let mForLoopAll = unionRanges (rhs parseState 1) $4.Range let spBind = DebugPointAtFor.Yes mForLoopHeader - SynExpr.For (spBind, mkSynId mForLoopHeader "_loopVar", arbExpr("startLoopRange1", mForLoopHeader), true, arbExpr("endLoopRange1", rhs parseState 3), $4, mForLoopAll) } + SynExpr.For (spBind, mkSynId mForLoopHeader "_loopVar", None, arbExpr("startLoopRange1", mForLoopHeader), true, arbExpr("endLoopRange1", rhs parseState 3), $4, mForLoopAll) } | FOR ends_coming_soon_or_recover { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsIdentifierExpected()) @@ -3731,25 +3748,28 @@ declExpr: | BINDER headBindingPattern EQUALS typedSequentialExprBlock IN opt_OBLOCKSEP moreBinders typedSequentialExprBlock %prec expr_let { let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) + let mEquals = rhs parseState 3 let m = unionRanges (rhs parseState 1) $8.Range - SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, $7, $8, m) } + SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, Some mEquals, $4, $7, $8, m) } | OBINDER headBindingPattern EQUALS typedSequentialExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP moreBinders typedSequentialExprBlock %prec expr_let { $5 (if $1 = "use" then "use!" else "let!") (rhs parseState 1) // report unterminated error let spBind = DebugPointAtBinding.Yes(unionRanges (rhs parseState 1) $4.Range) + let mEquals = rhs parseState 3 let m = unionRanges (rhs parseState 1) $8.Range - SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, $7, $8, m) } + SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, Some mEquals, $4, $7, $8, m) } | OBINDER headBindingPattern EQUALS typedSequentialExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP error %prec expr_let { // error recovery that allows intellisense when writing incomplete computation expressions let spBind = DebugPointAtBinding.Yes(unionRanges (rhs parseState 1) $4.Range) + let mEquals = rhs parseState 3 let mAll = unionRanges (rhs parseState 1) (rhs parseState 7) let m = $4.Range.EndRange // zero-width range - SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, [], SynExpr.ImplicitZero m, mAll) } + SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, Some mEquals, $4, [], SynExpr.ImplicitZero m, mAll) } | DO_BANG typedSequentialExpr IN opt_OBLOCKSEP typedSequentialExprBlock %prec expr_let { let spBind = DebugPointAtBinding.NoneAtDo - SynExpr.LetOrUseBang(spBind, false, true, SynPat.Const(SynConst.Unit, $2.Range), $2, [], $5, unionRanges (rhs parseState 1) $5.Range) } + SynExpr.LetOrUseBang(spBind, false, true, SynPat.Const(SynConst.Unit, $2.Range), None, $2, [], $5, unionRanges (rhs parseState 1) $5.Range) } | ODO_BANG typedSequentialExprBlock hardwhiteDefnBindingsTerminator %prec expr_let { SynExpr.DoBang ($2, unionRanges (rhs parseState 1) $2.Range) } @@ -4542,7 +4562,8 @@ forLoopBinder: forLoopRange: | parenPattern EQUALS declExpr forLoopDirection declExpr - { idOfPat parseState (rhs parseState 1) $1, $3, $4, $5 } + { let mEquals = rhs parseState 2 + idOfPat parseState (rhs parseState 1) $1, Some mEquals, $3, $4, $5 } forLoopDirection: | TO { true } @@ -4593,8 +4614,8 @@ recdExpr: { let arg = match $4 with None -> mkSynUnit (lhs parseState) | Some e -> e let l = List.rev $5 let dummyField = mkRecdField (LongIdentWithDots([], [])) // dummy identifier, it will be discarded - let l = rebindRanges (dummyField, None) l $6 - let (_, _, inheritsSep) = List.head l + let l = rebindRanges (dummyField, None, None) l $6 + let (SynExprRecordField(_, _, _, inheritsSep)) = List.head l let bindings = List.tail l (Some ($2, arg, rhs2 parseState 2 4, inheritsSep, rhs parseState 1), None, bindings) } @@ -4606,8 +4627,9 @@ recdExprCore: { match $1 with | LongOrSingleIdent(false, (LongIdentWithDots(_, _) as f), None, m) -> let f = mkRecdField f + let mEquals = rhs parseState 2 let l = List.rev $4 - let l = rebindRanges (f, Some $3) l $5 + let l = rebindRanges (f, Some mEquals, Some $3) l $5 (None, l) | _ -> raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsFieldBinding()) } @@ -4620,22 +4642,23 @@ recdExprCore: reportParseErrorAt m (FSComp.SR.parsUnderscoreInvalidFieldName()) reportParseErrorAt m (FSComp.SR.parsFieldBinding()) let f = mkUnderscoreRecdField m - (None, [ (f, None, None) ]) } + (None, [ SynExprRecordField(f, None, None, None) ]) } | UNDERSCORE EQUALS { let m = rhs parseState 1 reportParseErrorAt m (FSComp.SR.parsUnderscoreInvalidFieldName()) let f = mkUnderscoreRecdField m - + let mEquals = rhs parseState 2 reportParseErrorAt (rhs2 parseState 1 2) (FSComp.SR.parsFieldBinding()) - (None, [ (f, None, None) ]) } + (None, [ SynExprRecordField(f, Some mEquals, None, None) ]) } | UNDERSCORE EQUALS declExprBlock recdExprBindings opt_seps_recd { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnderscoreInvalidFieldName()) let f = mkUnderscoreRecdField (rhs parseState 1) + let mEquals = rhs parseState 2 let l = List.rev $4 - let l = rebindRanges (f, Some $3) l $5 + let l = rebindRanges (f, Some mEquals, Some $3) l $5 (None, l) } /* handles case like {x with} */ @@ -4692,23 +4715,26 @@ recdExprBindings: recdBinding: | pathOrUnderscore EQUALS declExprBlock - { ($1, Some $3) } + { let mEquals = rhs parseState 2 + ($1, Some mEquals, Some $3) } | pathOrUnderscore EQUALS - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, None) } + { let mEquals = rhs parseState 2 + reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) + ($1, Some mEquals, None) } | pathOrUnderscore EQUALS ends_coming_soon_or_recover - { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, None) } + { let mEquals = rhs parseState 2 + reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) + ($1, Some mEquals, None) } | pathOrUnderscore { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, None) } + ($1, None, None) } | pathOrUnderscore ends_coming_soon_or_recover { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, None) } + ($1, None, None) } /* There is a minor conflict between seq { new ty() } // sequence expression with one very odd 'action' expression @@ -4765,7 +4791,7 @@ objExprBindings: { $2 |> (List.choose (function | SynMemberDefn.Member(b, m) -> Some b - | SynMemberDefn.AutoProperty(_, _, _, _, _, _, _, _, _, _, m) -> errorR(Error(FSComp.SR.parsIllegalMemberVarInObjectImplementation(), m)); None + | SynMemberDefn.AutoProperty(range = m) -> errorR(Error(FSComp.SR.parsIllegalMemberVarInObjectImplementation(), m)); None | x -> errorR(Error(FSComp.SR.parsMemberIllegalInObjectImplementation(), x.Range)); None)) } objExprInterfaces: @@ -4797,8 +4823,8 @@ braceBarExprCore: { let orig, flds = $2 let flds = flds |> List.choose (function - | ((LongIdentWithDots([id], _), _), Some e, _) -> Some (id, e) - | ((LongIdentWithDots([id], _), _), None, _) -> Some (id, arbExpr("anonField", id.idRange)) + | SynExprRecordField((LongIdentWithDots([id], _), _), mEquals, Some e, _) -> Some (id, mEquals, e) + | SynExprRecordField((LongIdentWithDots([id], _), _), mEquals, None, _) -> Some (id, mEquals, arbExpr("anonField", id.idRange)) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) let m = rhs2 parseState 1 3 (fun isStruct -> SynExpr.AnonRecd (isStruct, orig, flds, m)) } @@ -4808,8 +4834,8 @@ braceBarExprCore: let orig, flds = $2 let flds = flds |> List.choose (function - | ((LongIdentWithDots([id], _), _), Some e, _) -> Some (id, e) - | ((LongIdentWithDots([id], _), _), None, _) -> Some (id, arbExpr("anonField", id.idRange)) + | SynExprRecordField((LongIdentWithDots([id], _), _), mEquals, Some e, _) -> Some (id, mEquals, e) + | SynExprRecordField((LongIdentWithDots([id], _), _), mEquals, None, _) -> Some (id, mEquals, arbExpr("anonField", id.idRange)) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) let m = rhs2 parseState 1 2 (fun isStruct -> SynExpr.AnonRecd (isStruct, orig, flds, m)) } @@ -5554,8 +5580,8 @@ deprecated_opt_equals: | /* EMPTY */ { } opt_equals: - | EQUALS { true } - | /* EMPTY */ { false } + | EQUALS { let mEquals = rhs parseState 1 in (Some mEquals) } + | /* EMPTY */ { None } opt_OBLOCKSEP: | OBLOCKSEP { } @@ -5614,8 +5640,9 @@ colonOrEquals: mlCompatError (FSComp.SR.mlCompatSigColonNoLongerSupported())(lhs parseState) else mlCompatWarning (FSComp.SR.parsSyntaxModuleSigEndDeprecated()) (lhs parseState) + None } - | EQUALS { } + | EQUALS { let mEquals = rhs parseState 1 in Some mEquals } /* A literal string or a string from a keyword like __SOURCE_FILE__ */ string: diff --git a/src/fsharp/service/FSharpParseFileResults.fs b/src/fsharp/service/FSharpParseFileResults.fs index 39e7f852aa..0103aeb19b 100644 --- a/src/fsharp/service/FSharpParseFileResults.fs +++ b/src/fsharp/service/FSharpParseFileResults.fs @@ -85,11 +85,11 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, member _.TryRangeOfNameOfNearestOuterBindingContainingPos pos = let tryGetIdentRangeFromBinding binding = match binding with - | SynBinding(_, _, _, _, _, _, _, headPat, _, _, _, _) -> + | SynBinding(headPat=headPat) -> match headPat with - | SynPat.LongIdent (longIdentWithDots, _, _, _, _, _) -> + | SynPat.LongIdent (longDotId=longIdentWithDots) -> Some longIdentWithDots.Range - | SynPat.As (_, SynPat.Named (ident, false, _, _), _) + | SynPat.As (rhsPat=SynPat.Named (ident=ident; isThisVal=false)) | SynPat.Named (ident, false, _, _) -> Some ident.idRange | _ -> @@ -127,7 +127,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, override _.VisitBinding(_path, defaultTraverse, binding) = match binding with - | SynBinding(_, _, _, _, _, _, SynValData (None, _, _), _, _, expr, _range, _) as b when rangeContainsPos b.RangeOfBindingWithRhs pos -> + | SynBinding(valData=SynValData (memberFlags=None); expr=expr) as b when rangeContainsPos b.RangeOfBindingWithRhs pos -> match tryGetIdentRangeFromBinding b with | Some range -> walkBinding expr range | None -> None @@ -210,7 +210,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, bindings |> List.tryFind (fun x -> rangeContainsPos x.RangeOfBindingWithRhs pos) match binding with - | Some(SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, _, _)) -> + | Some(SynBinding.SynBinding(expr=expr)) -> getIdentRangeForFuncExprInApp traverseSynExpr expr pos | None -> getIdentRangeForFuncExprInApp traverseSynExpr body pos @@ -302,7 +302,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, member _.VisitBinding(_path, defaultTraverse, binding) = match binding with - | SynBinding(_, SynBindingKind.Normal, _, _, _, _, _, _, _, (InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _) -> + | SynBinding(kind=SynBindingKind.Normal; expr=InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app) -> Some(app.Range, lambdaArgs.Range, lambdaBody.Range) | _ -> defaultTraverse binding }) @@ -356,7 +356,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, override _.VisitBinding (_path, _, binding) = match binding with - | SynBinding(_, _, _, _, _, _, valData, _, _, _, range, _) when rangeContainsPos range pos -> + | SynBinding(valData=valData; range=range) when rangeContainsPos range pos -> let info = valData.SynValInfo.CurriedArgInfos let mutable found = false for group in info do @@ -408,7 +408,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, override _.VisitBinding(_path, defaultTraverse, binding) = match binding with - | SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, range, _) when Position.posEq range.Start pos -> + | SynBinding.SynBinding(expr=expr; range=range) when Position.posEq range.Start pos -> match expr with | SynExpr.Lambda _ -> Some range | _ -> None @@ -441,7 +441,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, let walkWithSeqPt sp = [ match sp with DebugPointAtWith.Yes m -> yield! checkRange m | _ -> () ] let walkFinallySeqPt sp = [ match sp with DebugPointAtFinally.Yes m -> yield! checkRange m | _ -> () ] - let rec walkBind (SynBinding(_, _, _, _, _, _, SynValData(memFlagsOpt, _, _), synPat, _, synExpr, _, spInfo)) = + let rec walkBind (SynBinding(valData=SynValData(memFlagsOpt, _, _); headPat=synPat; expr=synExpr; debugPoint=spInfo)) = [ // Don't yield the binding sequence point if there are any arguments, i.e. we're defining a function or a method let isFunction = Option.isSome memFlagsOpt || @@ -580,13 +580,13 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, match copyExprOpt with | Some (e, _) -> yield! walkExpr true e | None -> () - yield! walkExprs (fs |> List.choose p23) + yield! walkExprs (fs |> List.choose (fun (SynExprRecordField(expr=e)) -> e)) | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) -> match copyExprOpt with | Some (e, _) -> yield! walkExpr true e | None -> () - yield! walkExprs (fs |> List.map snd) + yield! walkExprs (fs |> List.map (fun (_, _, e) -> e)) | SynExpr.ObjExpr (_, args, bs, is, _, _) -> match args with @@ -604,7 +604,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, yield! walkExpr false e1 yield! walkExpr false e2 - | SynExpr.For (spFor, _, e1, _, e2, e3, _) -> + | SynExpr.For (forDebugPoint=spFor; identBody=e1; toBody=e2; doBody=e3) -> yield! walkForSeqPt spFor yield! walkExpr false e1 yield! walkExpr true e2 @@ -679,10 +679,10 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, yield! walkExpr false e2 yield! walkExpr false e3 - | SynExpr.LetOrUseBang (spBind, _, _, _, e1, es, e2, _) -> + | SynExpr.LetOrUseBang (spBind, _, _, _, _, e1, es, e2, _) -> yield! walkBindSeqPt spBind yield! walkExpr true e1 - for andBangSpBind,_,_,_,eAndBang,_ in es do + for SynExprAndBang(debugPoint = andBangSpBind; body = eAndBang) in es do yield! walkBindSeqPt andBangSpBind yield! walkExpr true eAndBang yield! walkExpr true e2 @@ -695,7 +695,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, yield! walkExpr true e ] // Process a class declaration or F# type declaration - let rec walkTycon (SynTypeDefn(SynComponentInfo _, repr, membDefns, implicitCtor, m)) = + let rec walkTycon (SynTypeDefn(typeRepr=repr; members=membDefns; implicitConstructor=implicitCtor; range=m)) = if not (isMatchRange m) then [] else [ for memb in membDefns do yield! walkMember memb match repr with @@ -710,7 +710,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, if not (rangeContainsPos memb.Range pos) then [] else [ match memb with | SynMemberDefn.LetBindings(binds, _, _, _) -> yield! walkBinds binds - | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> yield! walkExpr true synExpr + | SynMemberDefn.AutoProperty(synExpr=synExpr) -> yield! walkExpr true synExpr | SynMemberDefn.ImplicitCtor(_, _, _, _, _, m) -> yield! checkRange m | SynMemberDefn.Member(bind, _) -> yield! walkBind bind | SynMemberDefn.Interface(_, Some membs, _) -> for m in membs do yield! walkMember m @@ -733,7 +733,7 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, yield! walkBindSeqPt spExpr yield! walkExpr false expr | SynModuleDecl.ModuleAbbrev _ -> () - | SynModuleDecl.NestedModule(_, _isRec, decls, _, m) when isMatchRange m -> + | SynModuleDecl.NestedModule(decls=decls; range=m) when isMatchRange m -> for d in decls do yield! walkDecl d | SynModuleDecl.Types(tydefs, m) when isMatchRange m -> for d in tydefs do yield! walkTycon d diff --git a/src/fsharp/service/ServiceInterfaceStubGenerator.fs b/src/fsharp/service/ServiceInterfaceStubGenerator.fs index f22e061d18..ac821a230e 100644 --- a/src/fsharp/service/ServiceInterfaceStubGenerator.fs +++ b/src/fsharp/service/ServiceInterfaceStubGenerator.fs @@ -514,14 +514,11 @@ module InterfaceStubGenerator = // On merged properties (consisting both getters and setters), they have the same range values, // so we use 'get_' and 'set_' prefix to ensure corresponding symbols are retrieved correctly. let internal (|MemberNameAndRange|_|) = function - | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = SynMemberKind.PropertyGet -> + | SynBinding(valData=SynValData(memberFlags=Some mf); headPat=LongIdentPattern(name, range)) when mf.MemberKind = SynMemberKind.PropertyGet -> if name.StartsWithOrdinal("get_") then Some(name, range) else Some("get_" + name, range) - | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = SynMemberKind.PropertySet -> + | SynBinding(valData=SynValData(memberFlags=Some mf); headPat=LongIdentPattern(name, range)) when mf.MemberKind = SynMemberKind.PropertySet -> if name.StartsWithOrdinal("set_") then Some(name, range) else Some("set_" + name, range) - | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) -> + | SynBinding(headPat=LongIdentPattern(name, range)) -> Some(name, range) | _ -> None @@ -694,7 +691,7 @@ module InterfaceStubGenerator = None | SynModuleDecl.NamespaceFragment(fragment) -> walkSynModuleOrNamespace fragment - | SynModuleDecl.NestedModule(_, _, modules, _, _) -> + | SynModuleDecl.NestedModule(decls = modules) -> List.tryPick walkSynModuleDecl modules | SynModuleDecl.Types(typeDefs, _range) -> List.tryPick walkSynTypeDefn typeDefs @@ -705,7 +702,7 @@ module InterfaceStubGenerator = | SynModuleDecl.Open _ -> None - and walkSynTypeDefn(SynTypeDefn(_componentInfo, representation, members, _, range)) = + and walkSynTypeDefn(SynTypeDefn(typeRepr=representation; members=members; range=range)) = if not <| rangeContainsPos range pos then None else @@ -730,7 +727,7 @@ module InterfaceStubGenerator = match memberDefn with | SynMemberDefn.AbstractSlot(_synValSig, _memberFlags, _range) -> None - | SynMemberDefn.AutoProperty(_attributes, _isStatic, _id, _type, _memberKind, _memberFlags, _xmlDoc, _access, expr, _r1, _r2) -> + | SynMemberDefn.AutoProperty(synExpr=expr) -> walkExpr expr | SynMemberDefn.Interface(interfaceType, members, _range) -> if rangeContainsPos interfaceType.Range pos then @@ -750,7 +747,7 @@ module InterfaceStubGenerator = | SynMemberDefn.Inherit _ -> None | SynMemberDefn.ImplicitInherit (_, expr, _, _) -> walkExpr expr - and walkBinding (SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, _headPat, _retTy, expr, _bindingRange, _seqPoint)) = + and walkBinding (SynBinding(expr=expr)) = walkExpr expr and walkExpr expr = @@ -774,7 +771,7 @@ module InterfaceStubGenerator = List.tryPick walkExpr synExprList | SynExpr.Record (_inheritOpt, _copyOpt, fields, _range) -> - List.tryPick (fun (_, e, _) -> Option.bind walkExpr e) fields + List.tryPick (fun (SynExprRecordField(expr=e)) -> Option.bind walkExpr e) fields | SynExpr.New (_, _synType, synExpr, _range) -> walkExpr synExpr @@ -798,7 +795,7 @@ module InterfaceStubGenerator = | SynExpr.ForEach (_sequencePointInfoForForLoop, _seqExprOnly, _isFromSource, _synPat, synExpr1, synExpr2, _range) -> List.tryPick walkExpr [synExpr1; synExpr2] - | SynExpr.For (_sequencePointInfoForForLoop, _ident, synExpr1, _, synExpr2, synExpr3, _range) -> + | SynExpr.For (identBody=synExpr1; toBody=synExpr2; doBody=synExpr3) -> List.tryPick walkExpr [synExpr1; synExpr2; synExpr3] | SynExpr.ArrayOrListComputed (_, synExpr, _range) -> @@ -900,10 +897,10 @@ module InterfaceStubGenerator = | SynExpr.DoBang (synExpr, _range) -> walkExpr synExpr - | SynExpr.LetOrUseBang (_sequencePointInfoForBinding, _, _, _synPat, synExpr1, synExprAndBangs, synExpr2, _range) -> + | SynExpr.LetOrUseBang (rhs=synExpr1; andBangs=synExprAndBangs; body=synExpr2) -> [ yield synExpr1 - for _,_,_,_,eAndBang,_ in synExprAndBangs do + for SynExprAndBang(body=eAndBang) in synExprAndBangs do yield eAndBang yield synExpr2 ] diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs index f60ae12e2f..650f278629 100755 --- a/src/fsharp/service/ServiceNavigation.fs +++ b/src/fsharp/service/ServiceNavigation.fs @@ -135,7 +135,7 @@ module NavigationImpl = NavigationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) // Process let-binding - let processBinding isMember enclosingEntityKind isAbstract (SynBinding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = + let processBinding isMember enclosingEntityKind isAbstract (SynBinding(valData=SynValData(memberOpt, _, _); headPat=synPat; expr=synExpr)) = let m = match synExpr with | SynExpr.Typed (e, _, _) -> e.Range // fix range for properties with type annotations @@ -175,7 +175,7 @@ module NavigationImpl = let nested = processMembers membDefns NavigationEntityKind.Exception |> snd processExnDefnRepr baseName nested repr - and processTycon baseName (SynTypeDefn(SynComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, _, m)) = + and processTycon baseName (SynTypeDefn(typeInfo=SynComponentInfo(longId=lid; accessibility=access); typeRepr=repr; members=membDefns; range=m)) = let topMembers = processMembers membDefns NavigationEntityKind.Class |> snd match repr with | SynTypeDefnRepr.Exception repr -> processExnDefnRepr baseName [] repr @@ -195,7 +195,7 @@ module NavigationImpl = [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Union, m, bodyRange mb nested, nested, NavigationEntityKind.Union, false, access) ] | SynTypeDefnSimpleRepr.Enum(cases, mb) -> let cases = - [ for SynEnumCase(_, id, _, _, _, m) in cases -> + [ for SynEnumCase(ident=id; range=m) in cases -> createMember(id, NavigationItemKind.Field, FSharpGlyph.EnumMember, m, NavigationEntityKind.Enum, false, access) ] let nested = cases@topMembers [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Enum, m, bodyRange mb nested, nested, NavigationEntityKind.Enum, false, access) ] @@ -231,7 +231,7 @@ module NavigationImpl = | SynMemberDefn.Member(bind, _) -> processBinding true enclosingEntityKind false bind | SynMemberDefn.ValField(SynField(_, _, Some(rcid), _, _, _, access, range), _) -> [ createMember(rcid, NavigationItemKind.Field, FSharpGlyph.Field, range, enclosingEntityKind, false, access) ] - | SynMemberDefn.AutoProperty(_attribs,_isStatic,id,_tyOpt,_propKind,_,_xmlDoc, access,_synExpr, _, _) -> + | SynMemberDefn.AutoProperty(ident=id; accessibility=access) -> [ createMember(id, NavigationItemKind.Field, FSharpGlyph.Field, id.idRange, enclosingEntityKind, false, access) ] | SynMemberDefn.AbstractSlot(SynValSig(_, id, _, ty, _, _, _, _, access, _, _), _, _) -> [ createMember(id, NavigationItemKind.Method, FSharpGlyph.OverridenMethod, ty.Range, enclosingEntityKind, true, access) ] @@ -267,7 +267,7 @@ module NavigationImpl = | SynModuleDecl.ModuleAbbrev(id, lid, m) -> [ createDecl(baseName, id, NavigationItemKind.Module, FSharpGlyph.Module, m, rangeOfLid lid, [], NavigationEntityKind.Namespace, false, None) ] - | SynModuleDecl.NestedModule(SynComponentInfo(_, _, _, lid, _, _, access, _), _isRec, decls, _, m) -> + | SynModuleDecl.NestedModule(moduleInfo=SynComponentInfo(longId=lid; accessibility=access); decls=decls; range=m) -> // Find let bindings (for the right dropdown) let nested = processNestedDeclarations(decls) let newBaseName = (if (baseName = "") then "" else baseName+".") + (textOfLid lid) @@ -347,7 +347,7 @@ module NavigationImpl = let nested = processSigMembers memberSigs processExnRepr baseName nested repr - and processTycon baseName (SynTypeDefnSig(SynComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = + and processTycon baseName (SynTypeDefnSig(typeInfo=SynComponentInfo(longId=lid; accessibility=access); typeRepr=repr; members=membDefns; range=m)) = let topMembers = processSigMembers membDefns match repr with | SynTypeDefnSigRepr.Exception repr -> processExnRepr baseName [] repr @@ -367,7 +367,7 @@ module NavigationImpl = [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Union, m, bodyRange mb nested, nested, NavigationEntityKind.Union, false, access) ] | SynTypeDefnSimpleRepr.Enum(cases, mb) -> let cases = - [ for SynEnumCase(_, id, _, _, _, m) in cases -> + [ for SynEnumCase(ident = id; range = m) in cases -> createMember(id, NavigationItemKind.Field, FSharpGlyph.EnumMember, m, NavigationEntityKind.Enum, false, access) ] let nested = cases@topMembers [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Enum, m, bodyRange mb nested, nested, NavigationEntityKind.Enum, false, access) ] @@ -412,7 +412,7 @@ module NavigationImpl = | SynModuleSigDecl.ModuleAbbrev(id, lid, m) -> [ createDecl(baseName, id, NavigationItemKind.Module, FSharpGlyph.Module, m, rangeOfLid lid, [], NavigationEntityKind.Module, false, None) ] - | SynModuleSigDecl.NestedModule(SynComponentInfo(_, _, _, lid, _, _, access, _), _, decls, m) -> + | SynModuleSigDecl.NestedModule(moduleInfo=SynComponentInfo(longId=lid; accessibility=access); moduleDecls=decls; range=m) -> // Find let bindings (for the right dropdown) let nested = processNestedSigDeclarations(decls) let newBaseName = (if baseName = "" then "" else baseName + ".") + (textOfLid lid) @@ -548,7 +548,7 @@ module NavigateTo = | Some id -> addIdent NavigableItemKind.Field id isSig container | _ -> () - let addEnumCase(SynEnumCase(_, id, _, _, _, _)) isSig = + let addEnumCase(SynEnumCase(ident=id)) isSig = addIdent NavigableItemKind.EnumCase id isSig let addUnionCase(SynUnionCase(_, id, _, _, _, _)) isSig container = @@ -563,7 +563,7 @@ module NavigateTo = | SynMemberKind.PropertyGetSet -> NavigableItemKind.Property | SynMemberKind.Member -> NavigableItemKind.Member - let addBinding (SynBinding(_, _, _, _, _, _, valData, headPat, _, _, _, _)) itemKind container = + let addBinding (SynBinding(valData=valData; headPat=headPat)) itemKind container = let (SynValData(memberFlagsOpt, _, _)) = valData let kind = match itemKind with @@ -611,7 +611,7 @@ module NavigateTo = addExceptionRepr representation true container |> ignore | SynModuleSigDecl.NamespaceFragment fragment -> walkSynModuleOrNamespaceSig fragment container - | SynModuleSigDecl.NestedModule(componentInfo, _, nestedDecls, _) -> + | SynModuleSigDecl.NestedModule(moduleInfo=componentInfo; moduleDecls=nestedDecls) -> let container = addComponentInfo NavigableContainerType.Module NavigableItemKind.Module componentInfo true container for decl in nestedDecls do walkSynModuleSigDecl decl container @@ -623,7 +623,7 @@ module NavigateTo = | SynModuleSigDecl.HashDirective _ | SynModuleSigDecl.Open _ -> () - and walkSynTypeDefnSig (SynTypeDefnSig(componentInfo, repr, members, _)) container = + and walkSynTypeDefnSig (SynTypeDefnSig(typeInfo=componentInfo; typeRepr=repr; members=members)) container = let container = addComponentInfo NavigableContainerType.Type NavigableItemKind.Type componentInfo true container for m in members do walkSynMemberSig m container @@ -674,7 +674,7 @@ module NavigateTo = addModuleAbbreviation lhs false container | SynModuleDecl.NamespaceFragment(fragment) -> walkSynModuleOrNamespace fragment container - | SynModuleDecl.NestedModule(componentInfo, _, modules, _, _) -> + | SynModuleDecl.NestedModule(moduleInfo=componentInfo; decls=modules) -> let container = addComponentInfo NavigableContainerType.Module NavigableItemKind.Module componentInfo false container for m in modules do walkSynModuleDecl m container @@ -686,7 +686,7 @@ module NavigateTo = | SynModuleDecl.HashDirective _ | SynModuleDecl.Open _ -> () - and walkSynTypeDefn(SynTypeDefn(componentInfo, representation, members, _, _)) container = + and walkSynTypeDefn(SynTypeDefn(typeInfo=componentInfo; typeRepr=representation; members=members)) container = let container = addComponentInfo NavigableContainerType.Type NavigableItemKind.Type componentInfo false container walkSynTypeDefnRepr representation container for m in members do @@ -723,7 +723,7 @@ module NavigateTo = match memberDefn with | SynMemberDefn.AbstractSlot(synValSig, memberFlags, _) -> addMember synValSig memberFlags false container - | SynMemberDefn.AutoProperty(_, _, id, _, _, _, _, _, _, _, _) -> + | SynMemberDefn.AutoProperty(ident=id) -> addIdent NavigableItemKind.Property id false container | SynMemberDefn.Interface(_, members, _) -> match members with diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs index 715695347b..78466f18f1 100755 --- a/src/fsharp/service/ServiceParseTreeWalk.fs +++ b/src/fsharp/service/ServiceParseTreeWalk.fs @@ -206,7 +206,7 @@ module SyntaxTraversal = let path = SyntaxNode.SynModule m :: origPath match m with | SynModuleDecl.ModuleAbbrev(_ident, _longIdent, _range) -> None - | SynModuleDecl.NestedModule(_synComponentInfo, _isRec, synModuleDecls, _, _range) -> synModuleDecls |> List.map (fun x -> dive x x.Range (traverseSynModuleDecl path)) |> pick decl + | SynModuleDecl.NestedModule(decls=synModuleDecls) -> synModuleDecls |> List.map (fun x -> dive x x.Range (traverseSynModuleDecl path)) |> pick decl | SynModuleDecl.Let(isRecursive, synBindingList, range) -> match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with | Some x -> Some x @@ -273,7 +273,7 @@ module SyntaxTraversal = None ) | _ -> () - for _,x in synExprList do + for _, _, x in synExprList do yield dive x x.Range traverseSynExpr ] |> pick expr @@ -327,7 +327,7 @@ module SyntaxTraversal = ) | _ -> () let copyOpt = Option.map fst copyOpt - for (field, _), e, sepOpt in fields do + for SynExprRecordField(fieldName=(field, _); expr=e; blockSeparator=sepOpt) in fields do yield dive (path, copyOpt, Some field) field.Range (fun r -> if rangeContainsPos field.Range pos then visitor.VisitRecordField r @@ -393,7 +393,7 @@ module SyntaxTraversal = dive synExpr2 synExpr2.Range traverseSynExpr] |> pick expr - | SynExpr.For (_sequencePointInfoForForLoop, _ident, synExpr, _, synExpr2, synExpr3, _range) -> + | SynExpr.For (identBody=synExpr; toBody=synExpr2; doBody=synExpr3) -> [dive synExpr synExpr.Range traverseSynExpr dive synExpr2 synExpr2.Range traverseSynExpr dive synExpr3 synExpr3.Range traverseSynExpr] @@ -571,12 +571,12 @@ module SyntaxTraversal = | SynExpr.YieldOrReturnFrom (_, synExpr, _range) -> traverseSynExpr synExpr - | SynExpr.LetOrUseBang(_sequencePointInfoForBinding, _, _, synPat, synExpr, andBangSynExprs, synExpr2, _range) -> + | SynExpr.LetOrUseBang(pat=synPat; rhs=synExpr; andBangs=andBangSynExprs; body=synExpr2) -> [ yield dive synPat synPat.Range traversePat yield dive synExpr synExpr.Range traverseSynExpr yield! - [ for _,_,_,andBangSynPat,andBangSynExpr,_ in andBangSynExprs do + [ for SynExprAndBang(pat=andBangSynPat; body=andBangSynExpr) in andBangSynExprs do yield (dive andBangSynPat andBangSynPat.Range traversePat) yield (dive andBangSynExpr andBangSynExpr.Range traverseSynExpr)] yield dive synExpr2 synExpr2.Range traverseSynExpr @@ -620,7 +620,7 @@ module SyntaxTraversal = match args with | SynArgPats.Pats ps -> ps |> List.tryPick (traversePat path) | SynArgPats.NamePatPairs (ps, _) -> - ps |> List.map snd |> List.tryPick (traversePat path) + ps |> List.map (fun (_, _, pat) -> pat) |> List.tryPick (traversePat path) | SynPat.Typed (p, ty, _) -> [ traversePat path p; traverseSynType path ty ] |> List.tryPick id | _ -> None @@ -658,8 +658,8 @@ module SyntaxTraversal = match mems |> Seq.toList with | [mem] -> // the typical case, a single member has this range 'r' Some (dive mem r (traverseSynMemberDefn path traverseInherit)) - | [SynMemberDefn.Member(SynBinding(_,_,_,_,_,_,_,SynPat.LongIdent(lid1,Some(info1),_,_,_,_),_,_,_,_),_) as mem1 - SynMemberDefn.Member(SynBinding(_,_,_,_,_,_,_,SynPat.LongIdent(lid2,Some(info2),_,_,_,_),_,_,_,_),_) as mem2] -> // can happen if one is a getter and one is a setter + | [SynMemberDefn.Member(memberDefn=SynBinding(headPat=SynPat.LongIdent(longDotId=lid1; extraId=Some(info1)))) as mem1 + SynMemberDefn.Member(memberDefn=SynBinding(headPat=SynPat.LongIdent(longDotId=lid2; extraId=Some(info2)))) as mem2] -> // can happen if one is a getter and one is a setter // ensure same long id assert( (lid1.Lid,lid2.Lid) ||> List.forall2 (fun x y -> x.idText = y.idText) ) // ensure one is getter, other is setter @@ -690,7 +690,7 @@ module SyntaxTraversal = #endif ) - and traverseSynTypeDefn origPath (SynTypeDefn(synComponentInfo, synTypeDefnRepr, synMemberDefns, _, tRange) as tydef) = + and traverseSynTypeDefn origPath (SynTypeDefn(synComponentInfo, _, synTypeDefnRepr, synMemberDefns, _, tRange) as tydef) = let path = SyntaxNode.SynTypeDefn tydef :: origPath match visitor.VisitComponentInfo (origPath, synComponentInfo) with @@ -736,7 +736,7 @@ module SyntaxTraversal = visitor.VisitImplicitInherit(path, traverseSynExpr path, synType, synExpr, range) ) ] |> pick m - | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> traverseSynExpr path synExpr + | SynMemberDefn.AutoProperty(synExpr=synExpr) -> traverseSynExpr path synExpr | SynMemberDefn.LetBindings(synBindingList, isRecursive, _, range) -> match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with | Some x -> Some x @@ -774,7 +774,7 @@ module SyntaxTraversal = let defaultTraverse b = let path = SyntaxNode.SynBinding b :: origPath match b with - | SynBinding(_synAccessOption, _synBindingKind, _, _, _synAttributes, _preXmlDoc, _synValData, synPat, _synBindingReturnInfoOption, synExpr, _range, _sequencePointInfoForBinding) -> + | SynBinding(headPat=synPat; expr=synExpr) -> [ traversePat path synPat traverseSynExpr path synExpr ] |> List.tryPick id diff --git a/src/fsharp/service/ServiceParsedInputOps.fs b/src/fsharp/service/ServiceParsedInputOps.fs index 2df7e0f4aa..93c6fa25c8 100644 --- a/src/fsharp/service/ServiceParsedInputOps.fs +++ b/src/fsharp/service/ServiceParsedInputOps.fs @@ -436,7 +436,7 @@ module ParsedInput = let GetEntityKind (pos: pos, parsedInput: ParsedInput) : EntityKind option = let (|ConstructorPats|) = function | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + | SynArgPats.NamePatPairs(xs, _) -> List.map (fun (_, _, pat) -> pat) xs /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException let rec (|Sequentials|_|) = function @@ -504,7 +504,7 @@ module ParsedInput = and walkPat = walkPatWithKind None - and walkBinding (SynBinding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = + and walkBinding (SynBinding(attributes=Attributes attrs; headPat=pat; returnInfo=returnInfo; expr=e)) = List.tryPick walkAttribute attrs |> Option.orElseWith (fun () -> walkPat pat) |> Option.orElseWith (fun () -> walkExpr e) @@ -557,14 +557,14 @@ module ParsedInput = | SynExpr.ArrayOrList (_, es, _) -> List.tryPick (walkExprWithKind parentKind) es | SynExpr.Record (_, _, fields, r) -> ifPosInRange r (fun _ -> - fields |> List.tryPick (fun (_, e, _) -> e |> Option.bind (walkExprWithKind parentKind))) + fields |> List.tryPick (fun (SynExprRecordField(expr=e)) -> e |> Option.bind (walkExprWithKind parentKind))) | SynExpr.New (_, t, e, _) -> walkExprWithKind parentKind e |> Option.orElseWith (fun () -> walkType t) | SynExpr.ObjExpr (ty, _, bindings, ifaces, _, _) -> walkType ty |> Option.orElseWith (fun () -> List.tryPick walkBinding bindings) |> Option.orElseWith (fun () -> List.tryPick walkInterfaceImpl ifaces) | SynExpr.While (_, e1, e2, _) -> List.tryPick (walkExprWithKind parentKind) [e1; e2] - | SynExpr.For (_, _, e1, _, e2, e3, _) -> List.tryPick (walkExprWithKind parentKind) [e1; e2; e3] + | SynExpr.For (identBody=e1; toBody=e2; doBody=e3) -> List.tryPick (walkExprWithKind parentKind) [e1; e2; e3] | SynExpr.ForEach (_, _, _, _, e1, e2, _) -> List.tryPick (walkExprWithKind parentKind) [e1; e2] | SynExpr.ArrayOrListComputed (_, e, _) -> walkExprWithKind parentKind e | SynExpr.ComputationExpr (_, e, _) -> walkExprWithKind parentKind e @@ -606,10 +606,10 @@ module ParsedInput = | SynExpr.Match (_, e, synMatchClauseList, _) | SynExpr.MatchBang (_, e, synMatchClauseList, _) -> walkExprWithKind parentKind e |> Option.orElseWith (fun () -> List.tryPick walkClause synMatchClauseList) - | SynExpr.LetOrUseBang(_, _, _, _, e1, es, e2, _) -> + | SynExpr.LetOrUseBang(rhs=e1; andBangs=es; body=e2) -> [ yield e1 - for _,_,_,_,eAndBang,_ in es do + for SynExprAndBang(body=eAndBang) in es do yield eAndBang yield e2 ] @@ -640,7 +640,7 @@ module ParsedInput = | SynMemberSig.Member(vs, _, _) -> walkValSig vs | SynMemberSig.Interface(t, _) -> walkType t | SynMemberSig.ValField(f, _) -> walkField f - | SynMemberSig.NestedType(SynTypeDefnSig.SynTypeDefnSig (info, repr, memberSigs, _), _) -> + | SynMemberSig.NestedType(nestedType=SynTypeDefnSig.SynTypeDefnSig (typeInfo=info; typeRepr=repr; members=memberSigs)) -> walkComponentInfo false info |> Option.orElseWith (fun () -> walkTypeDefnSigRepr repr) |> Option.orElseWith (fun () -> List.tryPick walkMemberSig memberSigs) @@ -657,13 +657,13 @@ module ParsedInput = | SynMemberDefn.Inherit(t, _, _) -> walkType t | SynMemberDefn.ValField(field, _) -> walkField field | SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef - | SynMemberDefn.AutoProperty(Attributes attrs, _, _, t, _, _, _, _, e, _, _) -> + | SynMemberDefn.AutoProperty(attributes=Attributes attrs; typeOpt=t; synExpr=e) -> List.tryPick walkAttribute attrs |> Option.orElseWith (fun () -> Option.bind walkType t) |> Option.orElseWith (fun () -> walkExpr e) | _ -> None - and walkEnumCase (SynEnumCase(Attributes attrs, _, _, _, _, _)) = List.tryPick walkAttribute attrs + and walkEnumCase (SynEnumCase(attributes = Attributes attrs)) = List.tryPick walkAttribute attrs and walkUnionCaseType = function | SynUnionCaseKind.Fields fields -> List.tryPick walkField fields @@ -697,7 +697,7 @@ module ParsedInput = | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn | SynTypeDefnSigRepr.Exception _ -> None - and walkTypeDefn (SynTypeDefn (info, repr, members, _, _)) = + and walkTypeDefn (SynTypeDefn (typeInfo=info; typeRepr=repr; members=members)) = walkComponentInfo false info |> Option.orElseWith (fun () -> walkTypeDefnRepr repr) |> Option.orElseWith (fun () -> List.tryPick walkMember members) @@ -705,7 +705,7 @@ module ParsedInput = and walkSynModuleDecl isTopLevel (decl: SynModuleDecl) = match decl with | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace isTopLevel fragment - | SynModuleDecl.NestedModule(info, _, modules, _, range) -> + | SynModuleDecl.NestedModule(moduleInfo=info; decls=modules; range=range) -> walkComponentInfo true info |> Option.orElseWith (fun () -> ifPosInRange range (fun _ -> List.tryPick (walkSynModuleDecl false) modules)) | SynModuleDecl.Open _ -> None @@ -954,7 +954,7 @@ module ParsedInput = let contextFromTreePath completionPath = // detect records usage in constructor match path with - | SyntaxNode.SynExpr _ :: SyntaxNode.SynBinding _ :: SyntaxNode.SynMemberDefn _ :: SyntaxNode.SynTypeDefn(SynTypeDefn(SynComponentInfo(_, _, _, [id], _, _, _, _), _, _, _, _)) :: _ -> + | SyntaxNode.SynExpr _ :: SyntaxNode.SynBinding _ :: SyntaxNode.SynMemberDefn _ :: SyntaxNode.SynTypeDefn(SynTypeDefn(typeInfo=SynComponentInfo(longId=[id]))) :: _ -> RecordContext.Constructor(id.idText) | _ -> RecordContext.New completionPath match field with @@ -1148,7 +1148,7 @@ module ParsedInput = let (|ConstructorPats|) = function | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + | SynArgPats.NamePatPairs(xs, _) -> List.map (fun (_, _, pat) -> pat) xs /// Returns all `Ident`s and `LongIdent`s found in an untyped AST. let getLongIdents (parsedInput: ParsedInput) : IDictionary = @@ -1225,7 +1225,7 @@ module ParsedInput = and walkTypar (SynTypar _) = () - and walkBinding (SynBinding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = + and walkBinding (SynBinding(attributes=Attributes attrs; headPat=pat; returnInfo=returnInfo; expr=e)) = List.iter walkAttribute attrs walkPat pat walkExpr e @@ -1288,7 +1288,7 @@ module ParsedInput = | SynExpr.TryFinally (e1, e2, _, _, _) | SynExpr.While (_, e1, e2, _) -> List.iter walkExpr [e1; e2] | SynExpr.Record (_, _, fields, _) -> - fields |> List.iter (fun ((ident, _), e, _) -> + fields |> List.iter (fun (SynExprRecordField(fieldName=(ident, _); expr=e)) -> addLongIdentWithDots ident e |> Option.iter walkExpr) | SynExpr.Ident ident -> addIdent ident @@ -1300,7 +1300,7 @@ module ParsedInput = List.iter walkBinding bindings List.iter walkInterfaceImpl ifaces | SynExpr.LongIdent (_, ident, _, _) -> addLongIdentWithDots ident - | SynExpr.For (_, ident, e1, _, e2, e3, _) -> + | SynExpr.For (ident=ident; identBody=e1; toBody=e2; doBody=e3) -> addIdent ident List.iter walkExpr [e1; e2; e3] | SynExpr.ForEach (_, _, _, pat, e1, e2, _) -> @@ -1350,10 +1350,10 @@ module ParsedInput = addLongIdentWithDots ident List.iter walkExpr [e1; e2; e3] | SynExpr.JoinIn (e1, _, e2, _) -> List.iter walkExpr [e1; e2] - | SynExpr.LetOrUseBang (_, _, _, pat, e1, es, e2, _) -> + | SynExpr.LetOrUseBang (pat=pat; rhs=e1; andBangs=es; body=e2) -> walkPat pat walkExpr e1 - for _,_,_,patAndBang,eAndBang,_ in es do + for SynExprAndBang(pat = patAndBang; body = eAndBang) in es do walkPat patAndBang walkExpr eAndBang walkExpr e2 @@ -1399,7 +1399,7 @@ module ParsedInput = | SynMemberSig.Interface(t, _) -> walkType t | SynMemberSig.Member(vs, _, _) -> walkValSig vs | SynMemberSig.ValField(f, _) -> walkField f - | SynMemberSig.NestedType(SynTypeDefnSig.SynTypeDefnSig (info, repr, memberSigs, _), _) -> + | SynMemberSig.NestedType(nestedType=SynTypeDefnSig.SynTypeDefnSig (typeInfo=info; typeRepr=repr; members=memberSigs)) -> let isTypeExtensionOrAlias = match repr with | SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.TypeAbbrev _, _) @@ -1425,13 +1425,13 @@ module ParsedInput = | SynMemberDefn.Inherit (t, _, _) -> walkType t | SynMemberDefn.ValField (field, _) -> walkField field | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef - | SynMemberDefn.AutoProperty (Attributes attrs, _, _, t, _, _, _, _, e, _, _) -> + | SynMemberDefn.AutoProperty (attributes=Attributes attrs; typeOpt=t; synExpr=e) -> List.iter walkAttribute attrs Option.iter walkType t walkExpr e | _ -> () - and walkEnumCase (SynEnumCase(Attributes attrs, _, _, _, _, _)) = List.iter walkAttribute attrs + and walkEnumCase (SynEnumCase(attributes=Attributes attrs)) = List.iter walkAttribute attrs and walkUnionCaseType = function | SynUnionCaseKind.Fields fields -> List.iter walkField fields @@ -1466,7 +1466,7 @@ module ParsedInput = | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn | SynTypeDefnSigRepr.Exception _ -> () - and walkTypeDefn (SynTypeDefn (info, repr, members, implicitCtor, _)) = + and walkTypeDefn (SynTypeDefn (typeInfo=info; typeRepr=repr; members=members; implicitConstructor=implicitCtor)) = let isTypeExtensionOrAlias = match repr with | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Augmentation, _, _) @@ -1481,7 +1481,7 @@ module ParsedInput = and walkSynModuleDecl (decl: SynModuleDecl) = match decl with | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace fragment - | SynModuleDecl.NestedModule (info, _, modules, _, _) -> + | SynModuleDecl.NestedModule (moduleInfo=info; decls=modules) -> walkComponentInfo false info List.iter walkSynModuleDecl modules | SynModuleDecl.Let (_, bindings, _) -> List.iter walkBinding bindings @@ -1551,13 +1551,13 @@ module ParsedInput = | [] -> None | firstDecl :: _ -> match firstDecl with - | SynModuleDecl.NestedModule (_, _, _, _, r) - | SynModuleDecl.Let (_, _, r) - | SynModuleDecl.DoExpr (_, _, r) - | SynModuleDecl.Types (_, r) - | SynModuleDecl.Exception (_, r) - | SynModuleDecl.Open (_, r) - | SynModuleDecl.HashDirective (_, r) -> Some r + | SynModuleDecl.NestedModule (range=r) + | SynModuleDecl.Let (range=r) + | SynModuleDecl.DoExpr (range=r) + | SynModuleDecl.Types (range=r) + | SynModuleDecl.Exception (range=r) + | SynModuleDecl.Open (range=r) + | SynModuleDecl.HashDirective (range=r) -> Some r | _ -> None |> Option.map (fun r -> r.StartColumn) @@ -1595,7 +1595,7 @@ module ParsedInput = and walkSynModuleDecl (parent: LongIdent) (decl: SynModuleDecl) = match decl with | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace parent fragment - | SynModuleDecl.NestedModule(SynComponentInfo(_, _, _, ident, _, _, _, _), _, decls, _, range) -> + | SynModuleDecl.NestedModule(moduleInfo=SynComponentInfo(longId=ident); decls=decls; range=range) -> let fullIdent = parent @ ident addModule (fullIdent, range) if range.EndLine >= currentLine then diff --git a/src/fsharp/service/ServiceStructure.fs b/src/fsharp/service/ServiceStructure.fs index a9567c6c79..1977b9482b 100644 --- a/src/fsharp/service/ServiceStructure.fs +++ b/src/fsharp/service/ServiceStructure.fs @@ -247,10 +247,10 @@ module Structure = | SynExpr.DoBang (e, r) -> rcheck Scope.Do Collapse.Below r <| Range.modStart 3 r parseExpr e - | SynExpr.LetOrUseBang (_, _, _, pat, eLet, es, eBody, _) -> + | SynExpr.LetOrUseBang (pat=pat; rhs=eLet; andBangs=es; body=eBody) -> [ yield eLet - for _,_,_,_,eAndBang,_ in es do + for SynExprAndBang(body = eAndBang) in es do yield eAndBang ] |> List.iter (fun e -> @@ -263,7 +263,7 @@ module Structure = parseExpr e ) parseExpr eBody - | SynExpr.For (_, _, _, _, _, e, r) + | SynExpr.For (doBody=e; range=r) | SynExpr.ForEach (_, _, _, _, _, e, r) -> rcheck Scope.For Collapse.Below r r parseExpr e @@ -400,7 +400,7 @@ module Structure = match recCopy with | Some (e, _) -> parseExpr e | _ -> () - recordFields |> List.choose (fun (_, e, _) -> e) |> List.iter parseExpr + recordFields |> List.choose (fun (SynExprRecordField(expr=e)) -> e) |> List.iter parseExpr // exclude the opening `{` and closing `}` of the record from collapsing rcheck Scope.Record Collapse.Same r <| Range.modBoth 1 1 r | _ -> () @@ -436,7 +436,7 @@ module Structure = for attr in attrs do parseExpr attr.ArgExpr - and parseBinding (SynBinding(_, kind, _, _, attrs, _, SynValData(memberFlags, _, _), _, _, expr, br, _) as binding) = + and parseBinding (SynBinding(kind=kind; attributes=attrs; valData=SynValData(memberFlags=memberFlags); expr=expr; range=br) as binding) = match kind with | SynBindingKind.Normal -> let collapse = Range.endToEnd binding.RangeOfBindingWithoutRhs binding.RangeOfBindingWithRhs @@ -518,7 +518,7 @@ module Structure = and parseSimpleRepr simple = match simple with | SynTypeDefnSimpleRepr.Enum (cases, _er) -> - for SynEnumCase (attrs, _, _, _, _, cr) in cases do + for SynEnumCase (attributes=attrs; range=cr) in cases do rcheck Scope.EnumCase Collapse.Below cr cr parseAttributes attrs | SynTypeDefnSimpleRepr.Record (_, fields, rr) -> @@ -533,7 +533,7 @@ module Structure = parseAttributes attrs | _ -> () - and parseTypeDefn (SynTypeDefn(SynComponentInfo(_, TyparDecls typeArgs, _, _, _, _, _, r), objectModel, members, _, fullrange)) = + and parseTypeDefn (SynTypeDefn(typeInfo=SynComponentInfo(typeParams=TyparDecls typeArgs; range=r); typeRepr=objectModel; members=members; range=fullrange)) = let typeArgsRange = rangeOfTypeArgsElse r typeArgs let collapse = Range.endToEnd (Range.modEnd 1 typeArgsRange) fullrange match objectModel with @@ -605,7 +605,7 @@ module Structure = for t in types do parseTypeDefn t // Fold the attributes above a module - | SynModuleDecl.NestedModule (SynComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, _, _) -> + | SynModuleDecl.NestedModule (moduleInfo=SynComponentInfo (attributes=attrs; range=cmpRange); decls=decls) -> // Outline the full scope of the module let r = Range.endToEnd cmpRange decl.Range rcheck Scope.Module Collapse.Below decl.Range r @@ -717,7 +717,7 @@ module Structure = match typeSigs with | [] -> range | ls -> - let (SynTypeDefnSig(_, _, memberSigs, r)) = List.last ls + let (SynTypeDefnSig(members=memberSigs; range=r)) = List.last ls lastMemberSigRangeElse r memberSigs let lastModuleSigDeclRangeElse range (sigDecls:SynModuleSigDecl list) = @@ -746,7 +746,7 @@ module Structure = parseTypeDefnSig typeDefSig | _ -> () - and parseTypeDefnSig (SynTypeDefnSig (SynComponentInfo(attribs, TyparDecls typeArgs, _, longId, _, _, _, r) as __, objectModel, memberSigs, _)) = + and parseTypeDefnSig (SynTypeDefnSig (typeInfo=SynComponentInfo(attributes=attribs; typeParams=TyparDecls typeArgs; longId=longId; range=r); typeRepr=objectModel; members=memberSigs)) = parseAttributes attribs let makeRanges memberSigs = @@ -830,7 +830,7 @@ module Structure = | SynModuleSigDecl.Types (typeSigs, _) -> List.iter parseTypeDefnSig typeSigs // Fold the attributes above a module - | SynModuleSigDecl.NestedModule (SynComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, moduleRange) -> + | SynModuleSigDecl.NestedModule (moduleInfo=SynComponentInfo (attributes=attrs; range=cmpRange); moduleDecls=decls; range=moduleRange) -> let rangeEnd = lastModuleSigDeclRangeElse moduleRange decls // Outline the full scope of the module let collapse = Range.endToEnd cmpRange rangeEnd diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index 62a12a8842..5e35ce2375 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -16,7 +16,7 @@ module XmlDocParsing = let (|ConstructorPats|) = function | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + | SynArgPats.NamePatPairs(pats=xs) -> List.map (fun (_, _, pat) -> pat) xs let rec digNamesFrom pat = match pat with @@ -56,19 +56,19 @@ module XmlDocParsing = let rec getXmlDocablesSynModuleDecl decl = match decl with - | SynModuleDecl.NestedModule(_, _, synModuleDecls, _, _) -> + | SynModuleDecl.NestedModule(decls=synModuleDecls) -> (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) | SynModuleDecl.Let(_, synBindingList, range) -> let anyXmlDoc = - synBindingList |> List.exists (fun (SynBinding(_, _, _, _, _, preXmlDoc, _, _, _, _, _, _)) -> + synBindingList |> List.exists (fun (SynBinding(xmlDoc=preXmlDoc)) -> not <| isEmptyXmlDoc preXmlDoc) if anyXmlDoc then [] else let synAttributes = - synBindingList |> List.collect (fun (SynBinding(_, _, _, _, a, _, _, _, _, _, _, _)) -> a) + synBindingList |> List.collect (fun (SynBinding(attributes=a)) -> a) let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine let indent = indentOf line - [ for SynBinding(_, _, _, _, _, _, synValData, synPat, _, _, _, _) in synBindingList do + [ for SynBinding(valData=synValData; headPat=synPat) in synBindingList do match synValData with | SynValData(_memberFlagsOpt, SynValInfo(args, _), _) when not (List.isEmpty args) -> let parameters = @@ -98,7 +98,7 @@ module XmlDocParsing = and getXmlDocablesSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, synModuleDecls, _, _, _, _)) = (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) - and getXmlDocablesSynTypeDefn (SynTypeDefn(SynComponentInfo(synAttributes, _, _, _, preXmlDoc, _, _, compRange), synTypeDefnRepr, synMemberDefns, _, tRange)) = + and getXmlDocablesSynTypeDefn (SynTypeDefn(typeInfo=SynComponentInfo(attributes=synAttributes; xmlDoc=preXmlDoc; range=compRange); typeRepr=synTypeDefnRepr; members=synMemberDefns; range=tRange)) = let stuff = match synTypeDefnRepr with | SynTypeDefnRepr.ObjectModel(_, synMemberDefns, _) -> (synMemberDefns |> List.collect getXmlDocablesSynMemberDefn) @@ -114,7 +114,7 @@ module XmlDocParsing = docForTypeDefn @ stuff @ (synMemberDefns |> List.collect getXmlDocablesSynMemberDefn) and getXmlDocablesSynMemberDefn = function - | SynMemberDefn.Member(SynBinding(_, _, _, _, synAttributes, preXmlDoc, _, synPat, _, _, _, _), memRange) -> + | SynMemberDefn.Member(SynBinding(attributes=synAttributes; xmlDoc=preXmlDoc; headPat=synPat), memRange) -> if isEmptyXmlDoc preXmlDoc then let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) memRange let line = fullRange.StartLine @@ -135,7 +135,7 @@ module XmlDocParsing = | None -> [] | Some(x) -> x |> List.collect getXmlDocablesSynMemberDefn | SynMemberDefn.NestedType(synTypeDefn, _, _) -> getXmlDocablesSynTypeDefn synTypeDefn - | SynMemberDefn.AutoProperty(synAttributes, _, _, _, _, _, _, _, _, _, range) -> + | SynMemberDefn.AutoProperty(attributes=synAttributes; range=range) -> let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine let indent = indentOf line 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 0ac003ffd9..bba954167f 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected @@ -5739,8 +5739,8 @@ FSharp.Compiler.Syntax.SynArgInfo: System.String ToString() FSharp.Compiler.Syntax.SynArgPats FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]] get_pats() -FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]] pats +FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]] get_pats() +FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]] pats FSharp.Compiler.Syntax.SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_pats() FSharp.Compiler.Syntax.SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] pats FSharp.Compiler.Syntax.SynArgPats+Tags: Int32 NamePatPairs @@ -5749,7 +5749,7 @@ FSharp.Compiler.Syntax.SynArgPats: Boolean IsNamePatPairs FSharp.Compiler.Syntax.SynArgPats: Boolean IsPats FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsNamePatPairs() FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsPats() -FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewPats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat]) FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+NamePatPairs FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+Pats @@ -5786,7 +5786,7 @@ FSharp.Compiler.Syntax.SynBinding: Boolean isInline FSharp.Compiler.Syntax.SynBinding: Boolean isMutable FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.DebugPointAtBinding debugPoint FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_debugPoint() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBinding NewSynBinding(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynBindingKind, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Syntax.SynValData, FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtBinding) +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBinding NewSynBinding(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynBindingKind, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Syntax.SynValData, FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtBinding) FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBindingKind get_kind() FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBindingKind kind FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynExpr expr @@ -5813,6 +5813,8 @@ FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.C FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo] get_returnInfo() FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo] returnInfo +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynBinding: System.String ToString() FSharp.Compiler.Syntax.SynBindingKind FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 Do @@ -6080,9 +6082,11 @@ FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.Ident get_ident() FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.Ident ident FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynConst get_value() FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynConst value -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynEnumCase NewSynEnumCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range, FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynEnumCase NewSynEnumCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range, FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range equalsRange FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_equalsRange() FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_valueRange() FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range range @@ -6150,8 +6154,8 @@ FSharp.Compiler.Syntax.SynExpr+AnonRecd: Boolean get_isStruct() FSharp.Compiler.Syntax.SynExpr+AnonRecd: Boolean isStruct FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]] get_recordFields() -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]] recordFields +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range],FSharp.Compiler.Syntax.SynExpr]] get_recordFields() +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range],FSharp.Compiler.Syntax.SynExpr]] recordFields FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() FSharp.Compiler.Syntax.SynExpr+App: Boolean get_isInfix() @@ -6276,6 +6280,8 @@ FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr identBody FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr toBody FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+For: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynExpr+For: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynExpr+ForEach: Boolean get_isFromSource() FSharp.Compiler.Syntax.SynExpr+ForEach: Boolean isFromSource FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.DebugPointAtFor forDebugPoint @@ -6400,8 +6406,10 @@ FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynPat get_p FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynPat pat FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]] andBangs -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]] get_andBangs() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprAndBang] andBangs +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprAndBang] get_andBangs() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] args @@ -6528,8 +6536,8 @@ FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]] get_recordFields() -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]] recordFields +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordField] get_recordFields() +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordField] recordFields FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]] baseInfo @@ -6850,7 +6858,7 @@ FSharp.Compiler.Syntax.SynExpr: Boolean get_IsWhile() FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturn() FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturnFrom() FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAddressOf(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range],FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewApp(FSharp.Compiler.Syntax.ExprAtomicFlag, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArbitraryAfterError(System.String, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) @@ -6868,7 +6876,7 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotNamedIndexe FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDowncast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFixed(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFor(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFor(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewForEach(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.SeqExprOnly, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFromParseError(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewIdent(FSharp.Compiler.Syntax.Ident) @@ -6883,7 +6891,7 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewJoinIn(FSharp. FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLambda(Boolean, Boolean, FSharp.Compiler.Syntax.SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLazy(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUse(Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUseBang(FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUseBang(FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, Boolean, FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprAndBang], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyILAssembly(System.Object, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyStaticOptimization(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyUnionCaseFieldGet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Int32, FSharp.Compiler.Text.Range) @@ -6899,7 +6907,7 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNull(FSharp.Co FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewObjExpr(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewParen(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewQuote(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordField], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequential(FSharp.Compiler.Syntax.DebugPointAtSequential, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequentialOrImplicitYield(FSharp.Compiler.Syntax.DebugPointAtSequential, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) @@ -6989,6 +6997,38 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_RangeWithoutAnyEx FSharp.Compiler.Syntax.SynExpr: Int32 Tag FSharp.Compiler.Syntax.SynExpr: Int32 get_Tag() FSharp.Compiler.Syntax.SynExpr: System.String ToString() +FSharp.Compiler.Syntax.SynExprAndBang +FSharp.Compiler.Syntax.SynExprAndBang: Boolean get_isFromSource() +FSharp.Compiler.Syntax.SynExprAndBang: Boolean get_isUse() +FSharp.Compiler.Syntax.SynExprAndBang: Boolean isFromSource +FSharp.Compiler.Syntax.SynExprAndBang: Boolean isUse +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.DebugPointAtBinding debugPoint +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.DebugPointAtBinding get_debugPoint() +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.SynExpr body +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.SynExpr get_body() +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.SynExprAndBang NewSynExprAndBang(FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Text.Range equalsRange +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Text.Range get_equalsRange() +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExprAndBang: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExprAndBang: Int32 Tag +FSharp.Compiler.Syntax.SynExprAndBang: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExprAndBang: System.String ToString() +FSharp.Compiler.Syntax.SynExprRecordField +FSharp.Compiler.Syntax.SynExprRecordField: FSharp.Compiler.Syntax.SynExprRecordField NewSynExprRecordField(System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]) +FSharp.Compiler.Syntax.SynExprRecordField: Int32 Tag +FSharp.Compiler.Syntax.SynExprRecordField: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] expr +FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_expr() +FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() +FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] blockSeparator +FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] get_blockSeparator() +FSharp.Compiler.Syntax.SynExprRecordField: System.String ToString() +FSharp.Compiler.Syntax.SynExprRecordField: System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean] fieldName +FSharp.Compiler.Syntax.SynExprRecordField: System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean] get_fieldName() FSharp.Compiler.Syntax.SynField FSharp.Compiler.Syntax.SynField: Boolean get_isMutable() FSharp.Compiler.Syntax.SynField: Boolean get_isStatic() @@ -7157,6 +7197,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynExp FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynExpr synExpr 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.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() @@ -7263,7 +7305,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, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynExpr, 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, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,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], FSharp.Compiler.Text.Range) 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) FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) @@ -7445,6 +7487,8 @@ FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Text.Range ge FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Text.Range get_range() @@ -7490,7 +7534,7 @@ FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewHa FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewLet(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewModuleAbbrev(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNamespaceFragment(FSharp.Compiler.Syntax.SynModuleOrNamespace) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], Boolean, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Attributes @@ -7615,6 +7659,8 @@ FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Text.Range FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_moduleDecls() FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] moduleDecls +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Text.Range get_range() @@ -7655,7 +7701,7 @@ FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewModuleAbbrev(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNamespaceFragment(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewVal(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Text.Range) @@ -7791,8 +7837,8 @@ FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynPat+Record: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynPat+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]] fieldPats -FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]] get_fieldPats() +FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]] fieldPats +FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]] get_fieldPats() FSharp.Compiler.Syntax.SynPat+Tags: Int32 Ands FSharp.Compiler.Syntax.SynPat+Tags: Int32 ArrayOrList FSharp.Compiler.Syntax.SynPat+Tags: Int32 As @@ -7883,7 +7929,7 @@ FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewOptionalVal(FSha FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewOr(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewParen(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewQuoteExpr(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewRecord(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewRecord(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewTyped(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewWild(FSharp.Compiler.Text.Range) @@ -8470,7 +8516,7 @@ FSharp.Compiler.Syntax.SynTypeConstraint: System.String ToString() FSharp.Compiler.Syntax.SynTypeDefn FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo() FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynComponentInfo typeInfo -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn NewSynTypeDefn(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn NewSynTypeDefn(FSharp.Compiler.Syntax.SynComponentInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynTypeDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefnRepr get_typeRepr() FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefnRepr typeRepr FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range Range @@ -8483,6 +8529,8 @@ FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FS FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn] get_implicitConstructor() FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn] implicitConstructor +FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynTypeDefn: System.String ToString() FSharp.Compiler.Syntax.SynTypeDefnKind FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynType get_signature() @@ -8585,7 +8633,7 @@ FSharp.Compiler.Syntax.SynTypeDefnRepr: System.String ToString() FSharp.Compiler.Syntax.SynTypeDefnSig FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo() FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo typeInfo -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynComponentInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr get_typeRepr() FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr typeRepr FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range Range @@ -8596,6 +8644,8 @@ FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 Tag FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 get_Tag() FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_members() FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] members +FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() FSharp.Compiler.Syntax.SynTypeDefnSig: System.String ToString() FSharp.Compiler.Syntax.SynTypeDefnSigRepr FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_repr() diff --git a/tests/service/InteractiveCheckerTests.fs b/tests/service/InteractiveCheckerTests.fs index 9daf0ff95b..12d8018198 100644 --- a/tests/service/InteractiveCheckerTests.fs +++ b/tests/service/InteractiveCheckerTests.fs @@ -31,15 +31,15 @@ let internal identsAndRanges (input: ParsedInput) = // TODO : attrs, typarDecls and typarConstraints [identAndRange (longIdentToString longIdent) range] let extractFromTypeDefn (typeDefn: SynTypeDefn) = - let (SynTypeDefn(componentInfo, _repr, _members, _, _)) = typeDefn + let (SynTypeDefn(typeInfo=componentInfo)) = typeDefn // TODO : repr and members extractFromComponentInfo componentInfo let rec extractFromModuleDecl (moduleDecl: SynModuleDecl) = match moduleDecl with | SynModuleDecl.Types(typeDefns, _) -> (typeDefns |> List.collect extractFromTypeDefn) | SynModuleDecl.ModuleAbbrev(ident, _, range) -> [ identAndRange (ident.ToString()) range ] - | SynModuleDecl.NestedModule(componentInfo, _, decls, _, _) -> (extractFromComponentInfo componentInfo) @ (decls |> List.collect extractFromModuleDecl) - | SynModuleDecl.Let(_, _, _) -> failwith "Not implemented yet" + | SynModuleDecl.NestedModule(moduleInfo=componentInfo; decls=decls) -> (extractFromComponentInfo componentInfo) @ (decls |> List.collect extractFromModuleDecl) + | SynModuleDecl.Let _ -> failwith "Not implemented yet" | SynModuleDecl.DoExpr(_, _, _range) -> failwith "Not implemented yet" | SynModuleDecl.Exception(_, _range) -> failwith "Not implemented yet" | SynModuleDecl.Open(SynOpenDeclTarget.ModuleOrNamespace (lid, range), _) -> [ identAndRange (longIdentToString lid) range ] diff --git a/tests/service/ServiceUntypedParseTests.fs b/tests/service/ServiceUntypedParseTests.fs index f87580fce6..cb00979a25 100644 --- a/tests/service/ServiceUntypedParseTests.fs +++ b/tests/service/ServiceUntypedParseTests.fs @@ -197,7 +197,7 @@ module TypeMemberRanges = let getTypeMemberRange source = let (SynModuleOrNamespace (decls = decls)) = parseSourceCodeAndGetModule source match decls with - | [ SynModuleDecl.Types ([ SynTypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _, _) ], _) ] -> + | [ SynModuleDecl.Types (typeDefns=[ SynTypeDefn (typeRepr=SynTypeDefnRepr.ObjectModel (members=memberDecls)) ]) ] -> memberDecls |> List.map (fun memberDecl -> getRangeCoords memberDecl.Range) | _ -> failwith "Could not get member" diff --git a/tests/service/Symbols.fs b/tests/service/Symbols.fs index 788170c65a..d1d753904d 100644 --- a/tests/service/Symbols.fs +++ b/tests/service/Symbols.fs @@ -349,6 +349,110 @@ and [] Bar<'context, 'a> = assertRange (6, 4) (10, 5) t2.Range | _ -> Assert.Fail "Could not get valid AST" + [] + let ``SynTypeDefn with ObjectModel Delegate contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +type X = delegate of string -> string +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types( + typeDefns = [ SynTypeDefn(equalsRange = Some mEquals + typeRepr = SynTypeDefnRepr.ObjectModel(kind = SynTypeDefnKind.Delegate _)) ] + ) + ]) ])) -> + assertRange (2, 7) (2, 8) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefn with ObjectModel class contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +type Foobar () = + class + end +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types( + typeDefns = [ SynTypeDefn(equalsRange = Some mEquals + typeRepr = SynTypeDefnRepr.ObjectModel(kind = SynTypeDefnKind.Class)) ] + ) + ]) ])) -> + assertRange (2, 15) (2, 16) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefn with Enum contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +type Bear = + | BlackBear = 1 + | PolarBear = 2 +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types( + typeDefns = [ SynTypeDefn(equalsRange = Some mEquals + typeRepr = SynTypeDefnRepr.Simple(simpleRepr = + SynTypeDefnSimpleRepr.Enum(cases = [ + SynEnumCase(equalsRange = mEqualsEnumCase1) + SynEnumCase(equalsRange = mEqualsEnumCase2) + ]))) ] + ) + ]) ])) -> + assertRange (2, 10) (2, 11) mEquals + assertRange (3, 16) (3, 17) mEqualsEnumCase1 + assertRange (4, 16) (4, 17) mEqualsEnumCase2 + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefn with Union contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +type Shape = + | Square of int + | Rectangle of int * int +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types( + typeDefns = [ SynTypeDefn(equalsRange = Some mEquals + typeRepr = SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Union _)) ] + ) + ]) ])) -> + assertRange (2, 11) (2, 12) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefn with AutoProperty contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +/// mutable class with auto-properties +type Person(name : string, age : int) = + /// Full name + member val Name = name with get, set +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types( + typeDefns = [ SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [_ ; SynMemberDefn.AutoProperty(equalsRange = mEquals)])) ] + ) + ]) ])) -> + assertRange (5, 20) (5, 21) mEquals + | _ -> Assert.Fail "Could not get valid AST" + module SyntaxExpressions = [] let ``SynExpr.Do contains the range of the do keyword`` () = @@ -373,6 +477,146 @@ module SyntaxExpressions = | _ -> Assert.Fail "Could not find SynExpr.Do" + [] + let ``SynExpr.LetOrUseBang contains the range of the equals sign`` () = + let ast = + """ +comp { + let! x = y + and! z = someFunction () + return () +} +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.App(argExpr = + SynExpr.ComputationExpr(expr = + SynExpr.LetOrUseBang(equalsRange = Some mLetBangEquals + andBangs = [ SynExprAndBang(equalsRange = mAndBangEquals) ])))) + ]) + ])) -> + assertRange (3, 11) (3, 12) mLetBangEquals + assertRange (4, 11) (4, 12) mAndBangEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynExpr.Record contains the range of the equals sign in SynExprRecordField`` () = + let ast = + """ +{ V = v + X = // some comment + someLongFunctionCall + a + b + c } +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = + SynExpr.Record(recordFields = [ + SynExprRecordField(equalsRange = Some mEqualsV) + SynExprRecordField(equalsRange = Some mEqualsX) + ])) + ]) + ])) -> + assertRange (2, 4) (2, 5) mEqualsV + assertRange (3, 9) (3, 10) mEqualsX + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``inherit SynExpr.Record contains the range of the equals sign in SynExprRecordField`` () = + let ast = + """ +{ inherit Exception(msg); X = 1; } +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = + SynExpr.Record(baseInfo = Some _ ; recordFields = [ + SynExprRecordField(equalsRange = Some mEquals) + ])) + ]) + ])) -> + assertRange (2, 28) (2, 29) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``copy SynExpr.Record contains the range of the equals sign in SynExprRecordField`` () = + let ast = + """ +{ foo with + X + = + 12 } +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = + SynExpr.Record(copyInfo = Some _ ; recordFields = [ + SynExprRecordField(equalsRange = Some mEquals) + ])) + ]) + ])) -> + assertRange (4, 12) (4, 13) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynExpr.AnonRecord contains the range of the equals sign in the fields`` () = + let ast = + """ +{| X = 5 + Y = 6 + Z = 7 |} +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = + SynExpr.AnonRecd(recordFields = [ + (_, Some mEqualsX, _) + (_, Some mEqualsY, _) + (_, Some mEqualsZ, _) + ])) + ]) + ])) -> + assertRange (2, 5) (2, 6) mEqualsX + assertRange (3, 8) (3, 9) mEqualsY + assertRange (4, 12) (4, 13) mEqualsZ + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynExpr.For contains the range of the equals sign`` () = + let ast = + """ +for i = 1 to 10 do + printf "%d " i +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = + SynExpr.For(equalsRange = Some mEquals)) + ]) + ])) -> + assertRange (2, 6) (2, 7) mEquals + | _ -> Assert.Fail "Could not get valid AST" + module Strings = let getBindingExpressionValue (parseResults: ParsedInput) = match parseResults with @@ -383,7 +627,7 @@ module Strings = | SynModuleDecl.Let (bindings = bindings) -> bindings |> List.tryPick (fun binding -> match binding with - | SynBinding.SynBinding (_,_,_,_,_,_,_,(SynPat.Named _|SynPat.As(_,SynPat.Named _,_)),_,e,_,_) -> Some e + | SynBinding.SynBinding (_,_,_,_,_,_,_,(SynPat.Named _|SynPat.As(_,SynPat.Named _,_)),_, _,e,_,_) -> Some e | _ -> None) | _ -> None)) | _ -> None @@ -785,6 +1029,98 @@ type FooType = assertRange (5, 4) (6, 20) mv | _ -> Assert.Fail "Could not get valid AST" + [] + let ``SynTypeDefnSig with ObjectModel Delegate contains the range of the equals sign`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace Foo + +type X = delegate of string -> string +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types( + types = [ SynTypeDefnSig(equalsRange = Some mEquals + typeRepr = SynTypeDefnSigRepr.ObjectModel(kind = SynTypeDefnKind.Delegate _)) ] + ) + ]) ])) -> + assertRange (4, 7) (4, 8) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefnSig with ObjectModel class contains the range of the equals sign`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +type Foobar = + class + end +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types( + types = [ SynTypeDefnSig(equalsRange = Some mEquals + typeRepr = SynTypeDefnSigRepr.ObjectModel(kind = SynTypeDefnKind.Class)) ] + ) + ]) ])) -> + assertRange (4, 12) (4, 13) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefnSig with Enum contains the range of the equals sign`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +type Bear = + | BlackBear = 1 + | PolarBear = 2 +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types( + types = [ SynTypeDefnSig(equalsRange = Some mEquals + typeRepr = SynTypeDefnSigRepr.Simple(repr = + SynTypeDefnSimpleRepr.Enum(cases = [ + SynEnumCase(equalsRange = mEqualsEnumCase1) + SynEnumCase(equalsRange = mEqualsEnumCase2) + ]) )) ] + ) + ]) ])) -> + assertRange (4, 10) (4, 11) mEquals + assertRange (5, 16) (5, 17) mEqualsEnumCase1 + assertRange (6, 16) (6, 17) mEqualsEnumCase2 + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynTypeDefnSig with Union contains the range of the equals sign`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +type Shape = + | Square of int + | Rectangle of int * int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.Types( + types = [ SynTypeDefnSig(equalsRange = Some mEquals + typeRepr = SynTypeDefnSigRepr.Simple(repr = SynTypeDefnSimpleRepr.Union _)) ] + ) + ]) ])) -> + assertRange (4, 11) (4, 12) mEquals + | _ -> Assert.Fail "Could not get valid AST" + module SynMatchClause = [] let ``Range of single SynMatchClause`` () = @@ -1004,6 +1340,40 @@ module Nested = ]) ])) -> assertRange (4, 0) (6, 6) nm.Range | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present`` () = + let parseResults = + getParseResults + """ +module X = + () +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.NestedModule(equalsRange = Some equalsM) + ]) ])) -> + assertRange (2, 9) (2, 10) equalsM + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present, signature file`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace Foo + +module X = + val bar : int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.NestedModule(equalsRange = Some equalsM) + ]) ])) -> + assertRange (4, 9) (4, 10) equalsM + | _ -> Assert.Fail "Could not get valid AST" module SynBindings = [] @@ -1154,7 +1524,6 @@ type T() = assertRange (9, 4) (11, 12) m3.Range | _ -> Assert.Fail "Could not get valid AST" - [] let ``Range of attribute should be included in write only SynMemberDefn.Member property`` () = let parseResults = @@ -1196,6 +1565,135 @@ type Bird = assertRange (3, 4) (6, 50) setter.Range | _ -> Assert.Fail "Could not get valid AST" + [] + let ``Range of equal sign should be present in SynModuleDecl.Let binding`` () = + let parseResults = + getParseResults "let v = 12" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [SynBinding(equalsRange = Some mEquals)]) + ]) ])) -> + assertRange (1, 6) (1, 7) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in SynModuleDecl.Let binding, typed`` () = + let parseResults = + getParseResults "let v : int = 12" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [SynBinding(equalsRange = Some mEquals)]) + ]) ])) -> + assertRange (1, 12) (1, 13) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in local Let binding`` () = + let parseResults = + getParseResults + """ +do + let z = 2 + () +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.Do(expr = SynExpr.LetOrUse(bindings = [SynBinding(equalsRange = Some mEquals)]))) + ]) ])) -> + assertRange (3, 10) (3, 11) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in local Let binding, typed`` () = + let parseResults = + getParseResults + """ +do + let z: int = 2 + () +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.Do(expr = SynExpr.LetOrUse(bindings = [SynBinding(equalsRange = Some mEquals)]))) + ]) ])) -> + assertRange (3, 15) (3, 16) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in member binding`` () = + let parseResults = + getParseResults + """ +type X() = + member this.Y = z +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ _; SynMemberDefn.Member(memberDefn = SynBinding(equalsRange = Some mEquals))]))]) + ]) ])) -> + assertRange (3, 18) (3, 19) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in member binding, with parameters`` () = + let parseResults = + getParseResults + """ +type X() = + member this.Y () = z +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ _; SynMemberDefn.Member(memberDefn = SynBinding(equalsRange = Some mEquals))]))]) + ]) ])) -> + assertRange (3, 21) (3, 22) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in member binding, with return type`` () = + let parseResults = + getParseResults + """ +type X() = + member this.Y () : string = z +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ _; SynMemberDefn.Member(memberDefn = SynBinding(equalsRange = Some mEquals))]))]) + ]) ])) -> + assertRange (3, 30) (3, 31) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of equal sign should be present in property`` () = + let parseResults = + getParseResults + """ +type Y() = + member this.MyReadWriteProperty + with get () = myInternalValue + and set (value) = myInternalValue <- value +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + _ + SynMemberDefn.Member(memberDefn = SynBinding(equalsRange = Some eqGetM)) + SynMemberDefn.Member(memberDefn = SynBinding(equalsRange = Some eqSetM)) + ]))]) + ]) ])) -> + assertRange (4, 20) (4, 21) eqGetM + assertRange (5, 24) (5, 25) eqSetM + | _ -> Assert.Fail "Could not get valid AST" + module ParsedHashDirective = [] let ``SourceIdentifier as ParsedHashDirectiveArgument`` () = @@ -1585,7 +2083,6 @@ else (* some long comment here *) if c then | _ -> Assert.Fail "Could not get valid AST" - module UnionCaseComments = [] let ``Union Case fields can have comments`` () = @@ -1623,3 +2120,41 @@ type Foo = | _ -> failwith "Could not find SynExpr.Do" + +module Patterns = + [] + let ``SynPat.Record contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +match x with +| { Foo = bar } -> () +| _ -> () +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr( + expr = SynExpr.Match(clauses = [ SynMatchClause(pat = SynPat.Record(fieldPats = [ (_, mEquals, _) ])) ; _ ]) + ) + ]) ])) -> + assertRange (3, 8) (3, 9) mEquals + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``SynArgPats.NamePatPairs contains the range of the equals sign`` () = + let parseResults = + getParseResults + """ +match x with +| X(Y = y) -> y +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr( + expr = SynExpr.Match(clauses = [ SynMatchClause(pat = SynPat.LongIdent(argPats = SynArgPats.NamePatPairs(pats = [ _, mEquals ,_ ])))]) + ) + ]) ])) -> + assertRange (3, 7) (3, 8) mEquals + | _ -> Assert.Fail "Could not get valid AST" \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs b/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs index 2ee5e4c64f..1224200fbc 100644 --- a/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs +++ b/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs @@ -14,7 +14,7 @@ type FSharpParseFileResults with override _.VisitBinding(_path, defaultTraverse, binding) = match binding with - | SynBinding(_, SynBindingKind.Normal, _, _, _, _, _, pat, _, _, _, _) as binding -> + | SynBinding(kind=SynBindingKind.Normal; headPat=pat) as binding -> if Position.posEq binding.RangeOfHeadPattern.Start pos then Some binding.RangeOfBindingWithRhs else