X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Ffile_analysis.c;h=985f259b24c3ac87821a614f01ce0ec63e9d1a89;hp=7b2565a983377826fe1f8a9195744b83bbb713cb;hb=b30c544bd1486e7b60b99259e3d0dcbc1ec9efd0;hpb=a1585d5b6833783d104acecadce4574115f97cea diff --git a/tools/ccanlint/file_analysis.c b/tools/ccanlint/file_analysis.c index 7b2565a9..985f259b 100644 --- a/tools/ccanlint/file_analysis.c +++ b/tools/ccanlint/file_analysis.c @@ -33,9 +33,9 @@ static const char *manifest_name(const struct manifest *m) return m->dir; } -static bool dir_cmp(const char *dir1, const char *dir2) +static bool dir_cmp(const struct manifest *m, const char *dir) { - return strcmp(dir1, dir2) == 0; + return strcmp(m->dir, dir) == 0; } HTABLE_DEFINE_TYPE(struct manifest, manifest_name, dir_hash, dir_cmp, manifest); @@ -54,9 +54,10 @@ const char *get_ccan_file_contents(struct ccan_file *f) char **get_ccan_file_lines(struct ccan_file *f) { if (!f->lines) - f->lines = strsplit(f, get_ccan_file_contents(f), - "\n", &f->num_lines); + f->lines = strsplit(f, get_ccan_file_contents(f), "\n"); + /* FIXME: is f->num_lines necessary? */ + f->num_lines = talloc_array_length(f->lines) - 1; return f->lines; } @@ -64,7 +65,7 @@ struct list_head *get_ccan_file_docs(struct ccan_file *f) { if (!f->doc_sections) { get_ccan_file_lines(f); - f->doc_sections = extract_doc_sections(f->lines, f->num_lines); + f->doc_sections = extract_doc_sections(f->lines); } return f->doc_sections; } @@ -617,11 +618,35 @@ enum line_compiled get_ccan_line_pp(struct pp_conditions *cond, } void score_file_error(struct score *score, struct ccan_file *f, unsigned line, - const char *error) + const char *errorfmt, ...) { + va_list ap; + struct file_error *fe = talloc(score, struct file_error); fe->file = f; fe->line = line; - fe->error = error; list_add_tail(&score->per_file_errors, &fe->list); + + if (!score->error) + score->error = talloc_strdup(score, ""); + + if (verbose < 2 && strcount(score->error, "\n") > 5) + return; + + if (line) + score->error = talloc_asprintf_append(score->error, + "%s:%u:", + f->fullname, line); + else + score->error = talloc_asprintf_append(score->error, + "%s:", f->fullname); + + va_start(ap, errorfmt); + score->error = talloc_vasprintf_append(score->error, errorfmt, ap); + va_end(ap); + score->error = talloc_append_string(score->error, "\n"); + + if (verbose < 2 && strcount(score->error, "\n") > 5) + score->error = talloc_append_string(score->error, + "... more (use -vv to see them all)\n"); }