anchor.diff:    | Paren e ->
       (* Adding required parentheses for tuple disambiguation in ToSyntax.fs --
        * see comment in parse.mly *)
  -    soft_parens_with_nesting (p_term false false e)
  +    let comm, t = p_term_sep false false e in
  +    let doc = soft_parens_with_nesting t in
  +    if comm = empty then
  +      doc
  +    else
  +      comm ^^ hardline ^^ doc
     | _ when is_array e ->
       let es = extract_from_list e in
       surround 2 0 (lbracket ^^ bar) (separate_map_or_flow_last (semi ^^ break1) (fun ps -> p_noSeqTermAndComment ps false) es) (bar ^^ rbracket)
  
positive.code: and p_typars (bs: list<binder>): document = p_binders true bs
  
  and p_fsdocTypeDeclPairs kw (typedecl, fsdoc_opt) =
    let decl, body = p_typeDecl (kw, fsdoc_opt) typedecl in
    decl ^^ (body ())
  
  and p_typeDecl pre = function
    | TyconAbstract (lid, bs, typ_opt) ->
      let empty' : unit -> document = fun () -> empty in
      p_typeDeclPrefix pre false lid bs typ_opt, empty'
    | TyconAbbrev (lid, bs, typ_opt, t) ->
      let f () = jump2 (p_typ false false t) in
      p_typeDeclPrefix pre true lid bs typ_opt, f
    | TyconRecord (lid, bs, typ_opt, record_field_decls) ->
      let p_recordFieldAndComments (ps: bool) (lid, t, doc_opt) =
        let comm, field = with_comment_sep (p_recordFieldDecl ps) (lid, t, doc_opt) (extend_to_end_of_line t.range) "!1" in
        let sep = if ps then semi else empty in
        inline_comment_or_above comm field sep
      in
      let p_fields () =
        space ^^ braces_with_nesting (
          separate_map_last hardline p_recordFieldAndComments record_field_decls)
      in
      p_typeDeclPrefix pre true lid bs typ_opt, p_fields
    | TyconVariant (lid, bs, typ_opt, ct_decls) ->
      let p_constructorBranchAndComments (uid, t_opt, doc_opt, use_of) =
          let range = extend_to_end_of_line (dflt uid.idRange (map_opt t_opt (fun t -> t.range))) in
  
negative.code:       if range_before_pos crange print_pos
        then begin
          comment_stack := cs ;
          comments_before_pos (acc ^^ comment (* ^^ str origin*)) print_pos lookahead_pos
          // comments_before_pos acc ^^ str origin ^^ comment (* ^^ str (string_of_pos print_pos) ^^ str " " ^^ str (string_of_pos lookahead) *) print_pos lookahead_pos
        end
        else acc, range_before_pos crange lookahead_pos
  