Browse Source

tools: don't abort on malformed documentation lines.

ccanlint would abort with 'Malformed line 53' if there was a bad header.
That's very poor, and deeply unhelpful.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 13 years ago
parent
commit
6a4d453378
4 changed files with 20 additions and 8 deletions
  1. 1 1
      tools/ccanlint/file_analysis.c
  2. 17 5
      tools/doc_extract-core.c
  3. 1 1
      tools/doc_extract.c
  4. 1 1
      tools/doc_extract.h

+ 1 - 1
tools/ccanlint/file_analysis.c

@@ -27,7 +27,7 @@ struct list_head *get_ccan_file_docs(struct ccan_file *f)
 {
 {
 	if (!f->doc_sections) {
 	if (!f->doc_sections) {
 		get_ccan_file_lines(f);
 		get_ccan_file_lines(f);
-		f->doc_sections = extract_doc_sections(f->lines);
+		f->doc_sections = extract_doc_sections(f->lines, f->name);
 	}
 	}
 	return f->doc_sections;
 	return f->doc_sections;
 }
 }

+ 17 - 5
tools/doc_extract-core.c

@@ -15,7 +15,8 @@
 #include "doc_extract.h"
 #include "doc_extract.h"
 #include "tools.h"
 #include "tools.h"
 
 
-static char **grab_doc(char **lines, unsigned int **linemap)
+static char **grab_doc(char **lines, unsigned int **linemap,
+		       const char *file)
 {
 {
 	char **ret;
 	char **ret;
 	unsigned int i, num;
 	unsigned int i, num;
@@ -39,8 +40,19 @@ static char **grab_doc(char **lines, unsigned int **linemap)
 				ret[num++] = talloc_strdup(ret, lines[i]+3);
 				ret[num++] = talloc_strdup(ret, lines[i]+3);
 			else if (strstarts(lines[i], " *"))
 			else if (strstarts(lines[i], " *"))
 				ret[num++] = talloc_strdup(ret, lines[i]+2);
 				ret[num++] = talloc_strdup(ret, lines[i]+2);
-			else
-				errx(1, "Malformed line %u", i);
+			else {
+				/* Weird, malformed? */
+				static bool warned;
+				if (!warned) {
+					warnx("%s:%u:"
+					      " Expected ' *' in comment.",
+					      file, i+1);
+					warned++;
+				}
+				ret[num++] = talloc_strdup(ret, lines[i]);
+				if (strstr(lines[i], "*/"))
+					printing = false;
+			}
 			(*linemap)[num-1] = i;
 			(*linemap)[num-1] = i;
 		}
 		}
 	}
 	}
@@ -195,10 +207,10 @@ static void trim_lines(struct doc_section *curr)
 	curr->num_lines = last_non_empty + 1;
 	curr->num_lines = last_non_empty + 1;
 }
 }
 
 
-struct list_head *extract_doc_sections(char **rawlines)
+struct list_head *extract_doc_sections(char **rawlines, const char *file)
 {
 {
 	unsigned int *linemap;
 	unsigned int *linemap;
-	char **lines = grab_doc(rawlines, &linemap);
+	char **lines = grab_doc(rawlines, &linemap, file);
 	const char *function = NULL;
 	const char *function = NULL;
 	struct doc_section *curr = NULL;
 	struct doc_section *curr = NULL;
 	unsigned int i;
 	unsigned int i;

+ 1 - 1
tools/doc_extract.c

@@ -52,7 +52,7 @@ int main(int argc, char *argv[])
 			err(1, "Reading file %s", argv[i]);
 			err(1, "Reading file %s", argv[i]);
 		lines = strsplit(file, file, "\n");
 		lines = strsplit(file, file, "\n");
 
 
-		list = extract_doc_sections(lines);
+		list = extract_doc_sections(lines, argv[i]);
 		if (list_empty(list))
 		if (list_empty(list))
 			errx(1, "No documentation in file %s", argv[i]);
 			errx(1, "No documentation in file %s", argv[i]);
 		talloc_free(file);
 		talloc_free(file);

+ 1 - 1
tools/doc_extract.h

@@ -13,5 +13,5 @@ struct doc_section {
 	char **lines;
 	char **lines;
 };
 };
 
 
-struct list_head *extract_doc_sections(char **rawlines);
+struct list_head *extract_doc_sections(char **rawlines, const char *file);
 #endif /* _DOC_EXTRACT_CORE_H */
 #endif /* _DOC_EXTRACT_CORE_H */