Add poc files
This commit is contained in:
parent
30da2412e3
commit
fa600b98f7
220 changed files with 45679 additions and 0 deletions
95
h_program-lang/comment_code.ml
Normal file
95
h_program-lang/comment_code.ml
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
(* Yoann Padioleau
|
||||
*
|
||||
* Copyright (C) 2014 Facebook
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* version 2.1 as published by the Free Software Foundation, with the
|
||||
* special exception on linking described in file license.txt.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the file
|
||||
* license.txt for more details.
|
||||
*)
|
||||
open Common
|
||||
|
||||
module PI = Parse_info
|
||||
|
||||
(*****************************************************************************)
|
||||
(* Prelude *)
|
||||
(*****************************************************************************)
|
||||
(*
|
||||
* todo: extract and factorize more from comment_php.ml
|
||||
*)
|
||||
|
||||
(*****************************************************************************)
|
||||
(* Types *)
|
||||
(*****************************************************************************)
|
||||
|
||||
(* todo: duplicate of matcher/parse_fuzzy.ml *)
|
||||
type 'tok hooks = {
|
||||
kind: 'tok -> Parse_info.token_kind;
|
||||
tokf: 'tok -> Parse_info.info;
|
||||
}
|
||||
|
||||
(*****************************************************************************)
|
||||
(* Functions *)
|
||||
(*****************************************************************************)
|
||||
|
||||
|
||||
let comment_before hooks tok all_toks =
|
||||
let pos = Parse_info.pos_of_info tok in
|
||||
let before =
|
||||
all_toks +> Common2.take_while (fun tok2 ->
|
||||
let info = hooks.tokf tok2 in
|
||||
let pos2 = PI.pos_of_info info in
|
||||
pos2 < pos
|
||||
)
|
||||
in
|
||||
let first_non_space =
|
||||
List.rev before +> Common2.drop_while (fun t ->
|
||||
let kind = hooks.kind t in
|
||||
match kind with
|
||||
| PI.Esthet PI.Newline | PI.Esthet PI.Space -> true
|
||||
| _ -> false
|
||||
)
|
||||
in
|
||||
match first_non_space with
|
||||
| x::_xs when hooks.kind x =*= PI.Esthet (PI.Comment) ->
|
||||
let info = hooks.tokf x in
|
||||
if PI.col_of_info info = 0
|
||||
then Some info
|
||||
else None
|
||||
| _ -> None
|
||||
|
||||
|
||||
let comment_after hooks tok all_toks =
|
||||
let pos = PI.pos_of_info tok in
|
||||
let line = PI.line_of_info tok in
|
||||
let after =
|
||||
all_toks +> Common2.drop_while (fun tok2 ->
|
||||
let info = hooks.tokf tok2 in
|
||||
let pos2 = PI.pos_of_info info in
|
||||
pos2 <= pos
|
||||
)
|
||||
in
|
||||
let first_non_space =
|
||||
after +> Common2.drop_while (fun t ->
|
||||
let kind = hooks.kind t in
|
||||
match kind with
|
||||
| PI.Esthet PI.Newline | PI.Esthet PI.Space -> true
|
||||
| _ -> false
|
||||
)
|
||||
in
|
||||
match first_non_space with
|
||||
| x::_xs when hooks.kind x =*= PI.Esthet (PI.Comment) ->
|
||||
let info = hooks.tokf x in
|
||||
(* for ocaml comments they are not necessarily in
|
||||
* column 0, but they must be just after
|
||||
*)
|
||||
if PI.line_of_info info = line || PI.line_of_info info = line + 1
|
||||
(* && PI.col_of_info info > 0 *)
|
||||
then Some info
|
||||
else None
|
||||
| _ -> None
|
||||
Loading…
Add table
Add a link
Reference in a new issue