Skip to content

Commit

Permalink
Update for FCS API changes (Tuple/StructTuple, Match, AnonRecd)
Browse files Browse the repository at this point in the history
  • Loading branch information
auduchinok committed Dec 5, 2018
1 parent b24600d commit 4848b8d
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 32 deletions.
20 changes: 10 additions & 10 deletions src/Fantomas.Tests/FormattingPropertyTests.fs
Expand Up @@ -154,7 +154,7 @@ and generateSynExpr size =
[
1, Gen.map (fun c -> SynExpr.Const(c, zero)) genSubSynConst
1, Gen.map2 (fun expr typ -> SynExpr.Typed(expr, typ, zero)) genSubBasicExpr genSubSynType
2, Gen.map (fun exprs -> SynExpr.Tuple(exprs, exprs |> List.map (fun _ -> zero), zero)) genSubBasicExprList
2, Gen.map (fun exprs -> SynExpr.Tuple(false, exprs, exprs |> List.map (fun _ -> zero), zero)) genSubBasicExprList
2, Gen.map2 (fun b exprs -> SynExpr.ArrayOrList(b, exprs, zero)) Arb.generate<_> genSubBasicExprList
1, Gen.map3 (fun b typ expr -> SynExpr.New(b, typ, SynExpr.Paren(expr, zero, None, zero), zero)) Arb.generate<_> genSubSynType genSubBasicExpr
1, Gen.map2 (fun expr1 expr2 -> SynExpr.While(NoSequencePointAtWhileLoop, expr1, expr2, zero)) genSubBasicExpr genSubBasicExpr
Expand Down Expand Up @@ -184,7 +184,7 @@ and generateSynExpr size =
1, Gen.map2 (fun expr clauses -> SynExpr.TryWith(expr, zero, clauses, zero, zero, NoSequencePointAtTry, NoSequencePointAtWith)) genSubSynExpr genSubSynMatchClauseList
1, Gen.map2 (fun expr typs -> SynExpr.TypeApp(expr, zero, typs, typs |> List.map (fun _ -> zero), None, zero, zero)) genSubBasicExpr genSubSynTypeList
4, Gen.map3 (fun b expr1 expr2 -> SynExpr.App(ExprAtomicFlag.NonAtomic, b, expr1, expr2, zero)) Arb.generate<_> genSubBasicExpr genSubBasicExpr
4, Gen.map2 (fun expr clauses -> SynExpr.Match(NoSequencePointAtDoBinding, expr, clauses, false, zero)) genSubSynExpr genSubSynMatchClauseList
4, Gen.map2 (fun expr clauses -> SynExpr.Match(NoSequencePointAtDoBinding, expr, clauses, zero)) genSubSynExpr genSubSynMatchClauseList
2, Gen.map2 (fun b clauses -> SynExpr.MatchLambda(b, zero, clauses, NoSequencePointAtDoBinding, zero)) Arb.generate<_> genSubSynMatchClauseList
2, Gen.map3 (fun b pat expr -> SynExpr.Lambda(b, false, pat, expr, zero)) Arb.generate<_> genSubSynSimplePats genSubSynExpr
2, Gen.map5 (fun b expr1 expr2 expr3 s -> SynExpr.For(NoSequencePointAtForLoop, Ident(s, zero), expr1, b, expr2, expr3, zero)) Arb.generate<_> genSubBasicExpr genSubBasicExpr genSubBasicExpr genSubIdent
Expand All @@ -209,7 +209,7 @@ and generateBasicExpr size =
[
1, Gen.map (fun c -> SynExpr.Const(c, zero)) genSubSynConst
1, Gen.map2 (fun expr typ -> SynExpr.Typed(expr, typ, zero)) genSubBasicExpr genSubSynType
2, Gen.map (fun exprs -> SynExpr.Tuple(exprs, exprs |> List.map (fun _ -> zero), zero)) genSubBasicExprList
2, Gen.map (fun exprs -> SynExpr.Tuple(false, exprs, exprs |> List.map (fun _ -> zero), zero)) genSubBasicExprList
2, Gen.map2 (fun b exprs -> SynExpr.ArrayOrList(b, exprs, zero)) Arb.generate<_> genSubBasicExprList
1, Gen.map3 (fun b typ expr -> SynExpr.New(b, typ, SynExpr.Paren(expr, zero, None, zero), zero)) Arb.generate<_> genSubSynType genSubBasicExpr
1, Gen.map2 (fun expr1 expr2 -> SynExpr.While(NoSequencePointAtWhileLoop, expr1, expr2, zero)) genSubBasicExpr genSubBasicExpr
Expand Down Expand Up @@ -289,14 +289,14 @@ and generateDeclExpr size =
Gen.frequency
[
8, Gen.map3 (fun b bindings expr -> SynExpr.LetOrUse(b, false, bindings, expr, zero)) Arb.generate<_> generateSynBindingList genSubDeclExpr //
4, Gen.map2 (fun expr clauses -> SynExpr.Match(NoSequencePointAtDoBinding, expr, clauses, false, zero)) genSubDeclExpr genSubSynMatchClauseList //
4, Gen.map2 (fun expr clauses -> SynExpr.Match(NoSequencePointAtDoBinding, expr, clauses, zero)) genSubDeclExpr genSubSynMatchClauseList //
4, Gen.map2 (fun b clauses -> SynExpr.MatchLambda(b, zero, clauses, NoSequencePointAtDoBinding, zero)) Arb.generate<_> genSubSynMatchClauseList //
4, Gen.map3 (fun b pat expr -> SynExpr.Lambda(b, false, pat, expr, zero)) Arb.generate<_> genSubSynSimplePats genSubDeclExpr //
1, Gen.map2 (fun expr1 expr2 -> SynExpr.TryFinally(expr1, expr2, zero, NoSequencePointAtTry, NoSequencePointAtFinally)) genSubDeclExpr genSubDeclExpr //
1, Gen.map2 (fun expr clauses -> SynExpr.TryWith(expr, zero, clauses, zero, zero, NoSequencePointAtTry, NoSequencePointAtWith)) genSubDeclExpr genSubSynMatchClauseList //
1, Gen.map (fun c -> SynExpr.Const(c, zero)) genSubSynConst //
1, Gen.map2 (fun expr typ -> SynExpr.Typed(expr, typ, zero)) genSubDeclExpr genSubSynType
2, Gen.map (fun exprs -> SynExpr.Tuple(exprs, exprs |> List.map (fun _ -> zero), zero)) genSubDeclExprList //
2, Gen.map (fun exprs -> SynExpr.Tuple(false, exprs, exprs |> List.map (fun _ -> zero), zero)) genSubDeclExprList //
2, Gen.map2 (fun b exprs -> SynExpr.ArrayOrList(b, exprs, zero)) Arb.generate<_> genSubDeclExprList
1, Gen.map3 (fun b typ expr -> SynExpr.New(b, typ, SynExpr.Paren(expr, zero, None, zero), zero)) Arb.generate<_> genSubSynType genSubDeclExpr
1, Gen.map2 (fun expr1 expr2 -> SynExpr.While(NoSequencePointAtWhileLoop, expr1, expr2, zero)) genSubDeclExpr genSubDeclExpr //
Expand Down Expand Up @@ -396,7 +396,7 @@ let rec shrinkSynExpr = function
seq { yield! collectSynExpr expr1; yield! collectSynExpr expr2 }
| SynExpr.Const(_, _) -> Seq.empty
| SynExpr.ArrayOrList(_, exprs, _)
| SynExpr.Tuple(exprs, _, _) ->
| SynExpr.Tuple(false, exprs, _, _) ->
seq { yield! Seq.collect collectSynExpr exprs }
| SynExpr.Record(_, _, _, _) -> Seq.empty
| SynExpr.ObjExpr(_, _, _, _, _, _) -> Seq.empty
Expand All @@ -408,8 +408,8 @@ let rec shrinkSynExpr = function
| SynExpr.MatchLambda(_, _, clauses, _, _) ->
seq { yield! Seq.collect collectSynMatchClause clauses }
| SynExpr.TryWith(expr, _, clauses, _, _, _, _)
| SynExpr.Match(_, expr, clauses, _, _)
| SynExpr.MatchBang(_, expr, clauses, _, _) ->
| SynExpr.Match(_, expr, clauses, _)
| SynExpr.MatchBang(_, expr, clauses, _) ->
seq { yield! collectSynExpr expr; yield! Seq.collect collectSynMatchClause clauses }
| SynExpr.LetOrUse(_, _, bindings, expr, _) ->
seq { yield! Seq.collect collectSynBinding bindings; yield! collectSynExpr expr }
Expand All @@ -430,8 +430,8 @@ let rec shrinkSynExpr = function
| SynExpr.ArbitraryAfterError _
| SynExpr.FromParseError _
| SynExpr.DiscardAfterMissingQualificationAfterDot _
| SynExpr.Fixed _
| SynExpr.StructTuple _ -> Seq.empty
| SynExpr.Tuple(true, _, _, _)
| SynExpr.Fixed _ -> Seq.empty

and collectSynExpr expr =
seq { yield expr
Expand Down
24 changes: 13 additions & 11 deletions src/Fantomas/CodeFormatterImpl.fs
Expand Up @@ -158,11 +158,14 @@ let isValidAST ast =
| SynExpr.Typed(synExpr, _synType, _range) ->
validateExpr synExpr

| SynExpr.Tuple(synExprList, _, _range)
| SynExpr.Tuple(_,synExprList, _, _range)
| SynExpr.ArrayOrList(_, synExprList, _range) ->
List.forall validateExpr synExprList

| SynExpr.Record(_inheritOpt, _copyOpt, fields, _range) ->
List.forall (fun (_, e, _) -> defaultArg (Option.map validateExpr e) true) fields
| SynExpr.AnonRecd(_inheritOpt, _copyOpt, fields, _range) ->
List.forall (fun (_, e) -> validateExpr e) fields

| SynExpr.New(_, _synType, synExpr, _range) ->
validateExpr synExpr
Expand All @@ -187,8 +190,8 @@ let isValidAST ast =

| SynExpr.MatchLambda(_isExnMatch, _argm, synMatchClauseList, _spBind, _wholem) ->
List.forall validateClause synMatchClauseList
| SynExpr.Match(_sequencePointInfoForBinding, synExpr, synMatchClauseList, _, _range)
| SynExpr.MatchBang(_sequencePointInfoForBinding, synExpr, synMatchClauseList, _, _range) ->
| SynExpr.Match(_sequencePointInfoForBinding, synExpr, synMatchClauseList, _range)
| SynExpr.MatchBang(_sequencePointInfoForBinding, synExpr, synMatchClauseList, _range) ->
validateExpr synExpr && List.forall validateClause synMatchClauseList

| SynExpr.Lazy(synExpr, _range) ->
Expand Down Expand Up @@ -288,8 +291,7 @@ let isValidAST ast =
| SynExpr.FromParseError(_synExpr, _range)
| SynExpr.DiscardAfterMissingQualificationAfterDot(_synExpr, _range) ->
false
| SynExpr.Fixed _
| SynExpr.StructTuple _ ->
| SynExpr.Fixed _ ->
true

and validatePattern = function
Expand All @@ -308,7 +310,7 @@ let isValidAST ast =
List.forall validatePattern pats
| SynPat.LongIdent(_, _, _, constructorArgs, _, _) ->
validateConstructorArgs constructorArgs
| SynPat.Tuple(pats, _range) ->
| SynPat.Tuple(false, pats, _range) ->
List.forall validatePattern pats
| SynPat.Paren(pat, _range) ->
validatePattern pat
Expand All @@ -322,7 +324,7 @@ let isValidAST ast =
validateExpr expr
| SynPat.DeprecatedCharRange _
| SynPat.InstanceMember _
| SynPat.StructTuple _ -> true
| SynPat.Tuple(true, _, _) -> true
| SynPat.FromParseError _ -> false

and validateConstructorArgs = function
Expand Down Expand Up @@ -643,13 +645,13 @@ let formatSelectionExpanded (range : range) config ({ FileName = fileName; Sourc

let startTokenizer = sourceTokenizer.CreateLineTokenizer(lines.[contentRange.StartLine-1])

let startCol = getStartCol contentRange startTokenizer (ref 0L)
let startCol = getStartCol contentRange startTokenizer (ref FSharpTokenizerLexState.Initial)

let endTokenizer =
if contentRange.StartLine = contentRange.EndLine then startTokenizer
else sourceTokenizer.CreateLineTokenizer(lines.[contentRange.EndLine-1])

let endCol = getEndCol contentRange endTokenizer (ref 0L)
let endCol = getEndCol contentRange endTokenizer (ref FSharpTokenizerLexState.Initial)

let expandedRange = makeRange fileName contentRange.StartLine startCol contentRange.EndLine endCol
async {
Expand Down Expand Up @@ -689,7 +691,7 @@ let inferSelectionFromCursorPos (cursorPos : pos) fileName (sourceCode : string)
let lineTokenizer = sourceTokenizer.CreateLineTokenizer(line)
let finLine = ref false
let result = ref None
let lexState = ref 0L
let lexState = ref FSharpTokenizerLexState.Initial
while not !finLine do
let tok, newLexState = lineTokenizer.ScanToken(!lexState)
lexState := newLexState
Expand Down Expand Up @@ -737,7 +739,7 @@ let inferSelectionFromCursorPos (cursorPos : pos) fileName (sourceCode : string)
let lineTokenizer = sourceTokenizer.CreateLineTokenizer(line)
let finLine = ref false
let result = ref acc
let lexState = ref 0L
let lexState = ref FSharpTokenizerLexState.Initial
while not !finLine do
let tok, newLexState = lineTokenizer.ScanToken(!lexState)
lexState := newLexState
Expand Down
20 changes: 10 additions & 10 deletions src/Fantomas/SourceParser.fs
Expand Up @@ -549,12 +549,12 @@ let (|TypeApp|_|) = function
| _ -> None

let (|Match|_|) = function
| SynExpr.Match(_, e, cs, _, _) ->
| SynExpr.Match(_, e, cs, _) ->
Some(e, cs)
| _ -> None

let (|MatchBang|_|) = function
| SynExpr.MatchBang(_, e, cs, _, _) ->
| SynExpr.MatchBang(_, e, cs, _) ->
Some(e, cs)
| _ -> None

Expand Down Expand Up @@ -605,12 +605,12 @@ let (|ArrayOrList|_|) = function
| _ -> None

let (|Tuple|_|) = function
| SynExpr.Tuple(exprs, _, _) ->
| SynExpr.Tuple(false, exprs, _, _) ->
Some exprs
| _ -> None

let (|StructTuple|_|) = function
| SynExpr.StructTuple(exprs, _, _) ->
| SynExpr.Tuple(true, exprs, _, _) ->
Some exprs
| _ -> None

Expand Down Expand Up @@ -880,12 +880,12 @@ let (|PatNullary|_|) = function
| _ -> None

let (|PatTuple|_|) = function
| SynPat.Tuple(ps, _) ->
| SynPat.Tuple(false, ps, _) ->
Some ps
| _ -> None

let (|PatStructTuple|_|) = function
| SynPat.StructTuple(ps, _) ->
| SynPat.Tuple(true, ps, _) ->
Some ps
| _ -> None

Expand Down Expand Up @@ -961,9 +961,9 @@ let (|RecordField|) = function
let (|Clause|) (SynMatchClause.Clause(p, eo, e, _, _)) = (p, e, eo)

let rec private (|DesugaredMatch|_|) = function
| SynExpr.Match(_, CompilerGeneratedVar s, [Clause(p, DesugaredMatch(ss, e), None)], _, _) ->
| SynExpr.Match(_, CompilerGeneratedVar s, [Clause(p, DesugaredMatch(ss, e), None)], _) ->
Some((s, p)::ss, e)
| SynExpr.Match(_, CompilerGeneratedVar s, [Clause(p, e, None)], _, _) ->
| SynExpr.Match(_, CompilerGeneratedVar s, [Clause(p, e, None)], _) ->
Some([(s, p)], e)
| _ -> None

Expand Down Expand Up @@ -1146,12 +1146,12 @@ let (|TLongIdentApp|_|) = function
| _ -> None

let (|TTuple|_|) = function
| SynType.Tuple(ts, _) ->
| SynType.Tuple(false, ts, _) ->
Some ts
| _ -> None

let (|TStructTuple|_|) = function
| SynType.StructTuple(ts, _) ->
| SynType.Tuple(true, ts, _) ->
Some ts
| _ -> None

Expand Down
2 changes: 1 addition & 1 deletion src/Fantomas/TokenMatcher.fs
Expand Up @@ -26,7 +26,7 @@ let tokenize defines (content : string) =
seq {
let sourceTokenizer = FSharpSourceTokenizer("INTERACTIVE" :: defines, Some "/tmp.fsx")
let lines = String.normalizeThenSplitNewLine content
let lexState = ref 0L
let lexState = ref FSharpTokenizerLexState.Initial
for (i, line) in lines |> Seq.zip [1..lines.Length] do
let lineTokenizer = sourceTokenizer.CreateLineTokenizer line
let finLine = ref false
Expand Down

0 comments on commit 4848b8d

Please sign in to comment.