# Module erl_comment_scan

Functions for reading comment lines from Erlang source code.

- Description
- Function Index
- Function Details

## Description

Functions for reading comment lines from Erlang source code.

## Function Index

file/1 | Extracts comments from an Erlang source code file.
join_lines/1 | Joins individual comment lines into multi-line comments.
scan_lines/1 | Extracts individual comment lines from a source code string.
string/1 | Extracts comments from a string containing Erlang source code.

## Function Details

### file/1

`file(FileName::file:filename()) -> [Comment]`

- `Comment = {Line, Column, Indentation, Text}`
- `Line = integer()`
- `Column = integer()`
- `Indentation = integer()`
- `Text = [string()]`

Extracts comments from an Erlang source code file. Returns a list of entries representing multi-line comments, listed in order of increasing line-numbers. For each entry, `Text` is a list of strings representing the consecutive comment lines in top-down order; the strings contain all characters following (but not including) the first comment-introducing "`%`" character on the line, up to (but not including) the line-terminating newline.

Furthermore, `Line` is the line number and `Column` the left column of the comment (i.e., the column of the comment-introducing `%` character). `Indent` is the indentation (or padding), measured in character positions between the last non-whitespace character before the comment (or the left margin), and the left column of the comment. `Line` and `Column` are always positive integers, and `Indentation` is a nonnegative integer.

Evaluation exits with reason `{read, Reason}` if a read error occurred, where `Reason` is an atom corresponding to a Posix error code; see the module `file` for details.

See also: file.

### join_lines/1

`join_lines(Lines::[CommentLine]) -> [Comment]`

- `CommentLine = {Line, Column, Indent, string()}`
- `Line = integer()`
- `Column = integer()`
- `Indent = integer()`
- `Comment = {Line, Column, Indent, Text}`
- `Text = [string()]`

Joins individual comment lines into multi-line comments. The input is a list of entries representing individual comment lines, in order of decreasing line-numbers; see `scan_lines/1` for details. The result is a list of entries representing multi-line comments, still listed in order of decreasing line-numbers, but where for each entry, `Text` is a list of consecutive comment lines in order of increasing line-numbers (i.e., top-down).

See also: scan_lines/1.

### scan_lines/1

`scan_lines(Text::string()) -> [CommentLine]`

- `CommentLine = {Line, Column, Indent, Text}`
- `Line = integer()`
- `Column = integer()`
- `Indent = integer()`
- `Text = string()`

Extracts individual comment lines from a source code string. Returns a list of comment lines found in the text, listed in order of decreasing line-numbers, i.e., the last comment line in the input is first in the resulting list. `Text` is a single string, containing all characters following (but not including) the first comment-introducing "`%`" character on the line, up to (but not including) the line-terminating newline. For details on `Line`, `Column` and `Indent`, see `file/1`.

See also: file/1.

### string/1

`string(Text) -> term()`

Extracts comments from a string containing Erlang source code. Except for reading directly from a string, the behaviour is the same as for `file/1`.

See also: file/1.