@@ -11,6 +11,39 @@ defmodule Code.Fragment do
1111
1212  @ type  position  ::  { line  ::  pos_integer ( ) ,  column  ::  pos_integer ( ) } 
1313
14+   @ doc  ~S"""  
15+   Returns the list of lines in the given string, preserving their line endings. 
16+ 
17+   Only the line endings recognized by the Elixir compiler are 
18+   considered, namely `\r\n` and `\n`. If you would like the retrieve 
19+   lines without their line endings, use `String.split(string, ["\r\n", "\n"])`. 
20+ 
21+   ## Examples 
22+ 
23+       iex> Code.Fragment.lines("foo\r\nbar\r\nbaz") 
24+       ["foo\r\n", "bar\r\n", "baz"] 
25+ 
26+       iex> Code.Fragment.lines("foo\nbar\nbaz") 
27+       ["foo\n", "bar\n", "baz"] 
28+ 
29+       iex> Code.Fragment.lines("") 
30+       [""] 
31+ 
32+   """  
33+   @ doc  since:  "1.19.0" 
34+   def  lines ( string )  do 
35+     lines ( string ,  << >> ) 
36+   end 
37+ 
38+   defp  lines ( << ?\n ,  rest :: binary >> ,  acc ) , 
39+     do:  [ << acc :: binary ,  ?\n >>  |  lines ( rest ,  << >> ) ] 
40+ 
41+   defp  lines ( << char ,  rest :: binary >> ,  acc ) , 
42+     do:  lines ( rest ,  << acc :: binary ,  char >> ) 
43+ 
44+   defp  lines ( << >> ,  acc ) , 
45+     do:  [ acc ] 
46+ 
1447  @ doc  """ 
1548  Receives a string and returns the cursor context. 
1649
0 commit comments