@@ -802,34 +802,45 @@ let rec extract_block line column lines = function
802802 (* Skip whitespace *)
803803 | { Span. value = Node. Whitespace _ ; _ } :: xs -> extract_block line column lines xs
804804 (* Comments aligned with this one on successive lines are included *)
805- | { Span. value = Node. LineComment value ; span } :: xs
805+ | { Span. value = Node. LineComment contents ; span } :: xs
806806 when Span. start_line span = line + 1 && Span. start_col span = column ->
807807 let span = span |> Illuaminate.Lens. (Span. start_offset %= fun p -> p + 2 ) in
808+ let value = CCString. drop 2 contents in
808809 extract_block (line + 1 ) column ({ Span. span; value } :: lines) xs
809810 | xs -> (List. rev lines, (List. hd lines).span, xs)
810811
812+ let get_block_comment_start str =
813+ let rec worker str i =
814+ match str.[i] with
815+ | '=' -> worker str (i + 1 )
816+ | '[' -> i + 1
817+ | _ -> failwith " Invalid block comment"
818+ in
819+ worker str 3
820+
811821let extract node =
812822 (* Extract all comments before this token *)
813823 let rec extract_comments cs = function
814824 | [] -> cs
815- | { Span. value = Node. BlockComment (n, c); span } :: xs when String. length c > 0 && c.[0 ] == '-'
816- ->
817- let documented =
818- split_lines (CCString. drop 1 c)
819- (Illuaminate.Lens. (Span. start_offset %= fun p -> p + n + 5 ) span)
820- |> Indent. drop_rest |> Lex. lex_of_lines |> Parse. comment span
821- in
822- extract_comments (documented :: cs) xs
823- | { Span. value = Node. LineComment c; span } :: xs
824- when String. length c > 0
825- && c.[0 ] == '-'
826- &&
825+ | { Span. value = Node. BlockComment contents ; span } :: xs ->
826+ let start = get_block_comment_start contents in
827+ if contents.[start] == '-' then
828+ let documented =
829+ split_lines
830+ (String. sub contents (start + 1 ) (String. length contents - start - (start - 1 )))
831+ (Illuaminate.Lens. (Span. start_offset %= fun p -> p + start + 1 ) span)
832+ |> Indent. drop_rest |> Lex. lex_of_lines |> Parse. comment span
833+ in
834+ extract_comments (documented :: cs) xs
835+ else extract_comments cs xs
836+ | { Span. value = Node. LineComment contents; span } :: xs
837+ when String. starts_with ~prefix: " ---" contents
827838 (* Skip comments which start with a line entirely composed of '-'. *)
828- (String. length c = 1 || CCString. exists (fun x -> x <> '-' ) c ) ->
839+ && (String. length contents = 3 || CCString. exists (fun x -> x <> '-' ) contents ) ->
829840 let lines, last, xs =
830841 extract_block (Span. start_line span) (Span. start_col span)
831842 [ { span = (span |> Illuaminate.Lens. (Span. start_offset %= fun p -> p + 3 ));
832- value = CCString. drop 1 c
843+ value = CCString. drop 3 contents
833844 }
834845 ]
835846 xs
0 commit comments