Js_parser.Comment_attachmentmodule Ast = Flow_ast;class (+'a) trailing_comments_remover: after_pos:Loc.position => { ... }type trailing_and_remover_result = {trailing: list(Flow_ast.Comment.t(Loc.t)),remove_trailing: 'a. 'a =>
  (trailing_comments_remover(Loc.t) => 'a => 'a) =>
  'a,};let trailing_and_remover_after_last_loc: 
  Parser_env.env =>
  trailing_and_remover_result;let trailing_and_remover_after_last_line: 
  Parser_env.env =>
  trailing_and_remover_result;let trailing_and_remover: Parser_env.env => trailing_and_remover_result;let id_remove_trailing: 
  Parser_env.env =>
  (Loc.t, Js_parser__Flow_ast.Identifier.t'(Loc.t)) =>
  (Loc.t, Js_parser__Flow_ast.Identifier.t'(Loc.t));let expression_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Expression.t(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Expression.t(Loc.t, Loc.t);let block_remove_trailing: 
  Parser_env.env =>
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Statement.Block.t(Loc.t, Loc.t)) =>
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Statement.Block.t(Loc.t, Loc.t));let type_annotation_hint_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Type.annotation_or_hint(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Type.annotation_or_hint(Loc.t, Loc.t);let component_renders_annotation_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Type.component_renders_annotation(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Type.component_renders_annotation(Loc.t, Loc.t);let return_annotation_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Function.ReturnAnnot.t(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Function.ReturnAnnot.t(Loc.t, Loc.t);let function_params_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Function.Params.t(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Function.Params.t(Loc.t, Loc.t);let component_params_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Statement.ComponentDeclaration.Params.t
    (Loc.t,
      Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Statement.ComponentDeclaration.Params.t
    (Loc.t,
      Loc.t);let object_key_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Expression.Object.Property.key(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Expression.Object.Property.key(Loc.t, Loc.t);let generic_type_remove_trailing: 
  Parser_env.env =>
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Generic.t(Loc.t, Loc.t)) =>
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Generic.t(Loc.t, Loc.t));let generic_type_list_remove_trailing: 
  Parser_env.env =>
  list((Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Generic.t(Loc.t, Loc.t))) =>
  list((Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Generic.t(Loc.t, Loc.t)));let class_implements_remove_trailing: 
  Parser_env.env =>
  Js_parser.Flow_ast_mapper.Ast.Class.Implements.t(Loc.t, Loc.t) =>
  Js_parser.Flow_ast_mapper.Ast.Class.Implements.t(Loc.t, Loc.t);let string_literal_remove_trailing: 
  Parser_env.env =>
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.StringLiteral.t(Loc.t)) =>
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.StringLiteral.t(Loc.t));let statement_add_comments: 
  Flow_ast.Statement.t(Loc.t, Loc.t) =>
  option(Flow_ast.Syntax.t(Loc.t, unit)) =>
  Flow_ast.Statement.t(Loc.t, Loc.t);class (+'a) comment_bounds_collector: loc:Loc.t => { ... }let comment_bounds: 
  Loc.t =>
  'a =>
  (comment_bounds_collector(Loc.t) => 'b => 'c) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Js_parser__Flow_ast.Comment.t')));let comment_bounds_without_trailing_line_comment: 
  ('a, option(('b, Ast.Comment.t'))) =>
  ('c, option(('b, Ast.Comment.t')));let collect_without_trailing_line_comment: 
  {.. comment_bounds: ('a, option(('b, Ast.Comment.t')))} =>
  ('a, option(('b, Ast.Comment.t')));let statement_comment_bounds: 
  Flow_ast.Statement.t(Loc.t, Loc.t) =>
  (option(Flow_ast.Comment.t(Loc.t)), option(Flow_ast.Comment.t(Loc.t)));let object_property_comment_bounds: 
  Ast.Expression.Object.property(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let object_type_property_comment_bounds: 
  Ast.Type.Object.property(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let object_pattern_property_comment_bounds: 
  Loc.t =>
  Js_parser.Flow_ast_mapper.Ast.Pattern.Object.property(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let function_type_param_comment_bounds: 
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Function.Param.t'(Loc.t, Loc.t)) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let function_type_rest_param_comment_bounds: 
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Function.RestParam.t'(Loc.t,
                                                                    Loc.t)) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let function_type_this_param_comment_bounds: 
  (Loc.t, Js_parser.Flow_ast_mapper.Ast.Type.Function.ThisParam.t'(Loc.t,
                                                                    Loc.t)) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let array_element_comment_bounds: 
  Loc.t =>
  Js_parser.Flow_ast_mapper.Ast.Expression.Array.element(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let array_pattern_element_comment_bounds: 
  Loc.t =>
  Js_parser.Flow_ast_mapper.Ast.Pattern.Array.element(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let expression_or_spread_comment_bounds: 
  Loc.t =>
  Js_parser.Flow_ast_mapper.Ast.Expression.expression_or_spread(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let call_type_arg_comment_bounds: 
  Loc.t =>
  Js_parser.Flow_ast_mapper.Ast.Expression.CallTypeArg.t(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Ast.Comment.t')));let function_body_comment_bounds: 
  Ast.Function.body(Loc.t, Loc.t) =>
  (option((Loc.t, Js_parser__Flow_ast.Comment.t')), option((Loc.t, Js_parser__Flow_ast.Comment.t')));