Browse Source

ccanlint: keep mapping back to original source line for doc_extract

Makes reporting of documentation easier.
Rusty Russell 15 years ago
parent
commit
b2826f4cee
2 changed files with 15 additions and 6 deletions
  1. 13 6
      tools/doc_extract-core.c
  2. 2 0
      tools/doc_extract.h

+ 13 - 6
tools/doc_extract-core.c

@@ -15,13 +15,14 @@
 #include "doc_extract.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;
 	unsigned int i;
 	bool printing = false;
 
 	ret = talloc_array(NULL, char *, num+1);
+	*linemap = talloc_array(ret, unsigned int, num);
 
 	num = 0;
 	for (i = 0; lines[i]; i++) {
@@ -40,6 +41,7 @@ static char **grab_doc(char **lines, unsigned int num)
 				ret[num++] = talloc_strdup(ret, lines[i]+2);
 			else
 				errx(1, "Malformed line %u", i);
+			(*linemap)[num-1] = i;
 		}
 	}
 	ret[num] = NULL;
@@ -91,7 +93,8 @@ static bool empty_section(struct doc_section *d)
 
 static struct doc_section *new_section(struct list_head *list,
 				       const char *function,
-				       const char *type)
+				       const char *type,
+				       unsigned int srcline)
 {
 	struct doc_section *d;
 	char *lowertype;
@@ -113,6 +116,7 @@ static struct doc_section *new_section(struct list_head *list,
 	d->type = lowertype;
 	d->lines = NULL;
 	d->num_lines = 0;
+	d->srcline = srcline;
 
 	list_add_tail(list, &d->list);
 	return d;
@@ -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)
 {
-	char **lines = grab_doc(rawlines, num);
+	unsigned int *linemap;
+	char **lines = grab_doc(rawlines, num, &linemap);
 	const char *function = NULL;
 	struct doc_section *curr = NULL;
 	unsigned int i;
@@ -143,11 +148,13 @@ struct list_head *extract_doc_sections(char **rawlines, unsigned int num)
 		funclen = is_summary_line(lines[i]);
 		if (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);
-			curr = new_section(list, function, "description");
+			curr = new_section(list, function, "description",
+					   linemap[i]);
 		} 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, "")) {
 				add_line(curr, extra);
 				curr = NULL;

+ 2 - 0
tools/doc_extract.h

@@ -7,6 +7,8 @@ struct doc_section {
 	struct list_node list;
 	const char *function;
 	const char *type;
+	/* Where did I come from? */
+	unsigned int srcline;
 	unsigned int num_lines;
 	char **lines;
 };