Commit b2826f4c authored by Rusty Russell's avatar Rusty Russell

ccanlint: keep mapping back to original source line for doc_extract

Makes reporting of documentation easier.
parent dc199bb0
...@@ -15,13 +15,14 @@ ...@@ -15,13 +15,14 @@
#include "doc_extract.h" #include "doc_extract.h"
#include "tools.h" #include "tools.h"
static char **grab_doc(char **lines, unsigned int num) static char **grab_doc(char **lines, unsigned int num, unsigned int **linemap)
{ {
char **ret; char **ret;
unsigned int i; unsigned int i;
bool printing = false; bool printing = false;
ret = talloc_array(NULL, char *, num+1); ret = talloc_array(NULL, char *, num+1);
*linemap = talloc_array(ret, unsigned int, num);
num = 0; num = 0;
for (i = 0; lines[i]; i++) { for (i = 0; lines[i]; i++) {
...@@ -40,6 +41,7 @@ static char **grab_doc(char **lines, unsigned int num) ...@@ -40,6 +41,7 @@ static char **grab_doc(char **lines, unsigned int num)
ret[num++] = talloc_strdup(ret, lines[i]+2); ret[num++] = talloc_strdup(ret, lines[i]+2);
else else
errx(1, "Malformed line %u", i); errx(1, "Malformed line %u", i);
(*linemap)[num-1] = i;
} }
} }
ret[num] = NULL; ret[num] = NULL;
...@@ -91,7 +93,8 @@ static bool empty_section(struct doc_section *d) ...@@ -91,7 +93,8 @@ static bool empty_section(struct doc_section *d)
static struct doc_section *new_section(struct list_head *list, static struct doc_section *new_section(struct list_head *list,
const char *function, const char *function,
const char *type) const char *type,
unsigned int srcline)
{ {
struct doc_section *d; struct doc_section *d;
char *lowertype; char *lowertype;
...@@ -113,6 +116,7 @@ static struct doc_section *new_section(struct list_head *list, ...@@ -113,6 +116,7 @@ static struct doc_section *new_section(struct list_head *list,
d->type = lowertype; d->type = lowertype;
d->lines = NULL; d->lines = NULL;
d->num_lines = 0; d->num_lines = 0;
d->srcline = srcline;
list_add_tail(list, &d->list); list_add_tail(list, &d->list);
return d; return d;
...@@ -127,7 +131,8 @@ static void add_line(struct doc_section *curr, const char *line) ...@@ -127,7 +131,8 @@ static void add_line(struct doc_section *curr, const char *line)
struct list_head *extract_doc_sections(char **rawlines, unsigned int num) struct list_head *extract_doc_sections(char **rawlines, unsigned int num)
{ {
char **lines = grab_doc(rawlines, num); unsigned int *linemap;
char **lines = grab_doc(rawlines, num, &linemap);
const char *function = NULL; const char *function = NULL;
struct doc_section *curr = NULL; struct doc_section *curr = NULL;
unsigned int i; unsigned int i;
...@@ -143,11 +148,13 @@ struct list_head *extract_doc_sections(char **rawlines, unsigned int num) ...@@ -143,11 +148,13 @@ struct list_head *extract_doc_sections(char **rawlines, unsigned int num)
funclen = is_summary_line(lines[i]); funclen = is_summary_line(lines[i]);
if (funclen) { if (funclen) {
function = talloc_strndup(list, lines[i], funclen); function = talloc_strndup(list, lines[i], funclen);
curr = new_section(list, function, "summary"); curr = new_section(list, function, "summary",
linemap[i]);
add_line(curr, lines[i] + funclen + 3); add_line(curr, lines[i] + funclen + 3);
curr = new_section(list, function, "description"); curr = new_section(list, function, "description",
linemap[i]);
} else if ((type = is_section(list, lines[i], &extra)) != NULL){ } else if ((type = is_section(list, lines[i], &extra)) != NULL){
curr = new_section(list, function, type); curr = new_section(list, function, type, linemap[i]);
if (!streq(extra, "")) { if (!streq(extra, "")) {
add_line(curr, extra); add_line(curr, extra);
curr = NULL; curr = NULL;
......
...@@ -7,6 +7,8 @@ struct doc_section { ...@@ -7,6 +7,8 @@ struct doc_section {
struct list_node list; struct list_node list;
const char *function; const char *function;
const char *type; const char *type;
/* Where did I come from? */
unsigned int srcline;
unsigned int num_lines; unsigned int num_lines;
char **lines; char **lines;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment