> > 2, A general method. > > We also try to get the list of functions to consider by writing a SmPL, > > but this method is not feasible at present, because it is not easy to parse the comment > > header information of these functions. > > The situation was improved once more also for the Coccinelle software. > How do you think about to develop any more variants based on information > from a script (like the following) for the semantic patch language? > > @initialize:python@ > @@ > import re, sys > filter = re.compile(" when done") > > @find@ > comments c; > identifier x; > type t; > @@ > t@c x(...) > { ... } > > @script:python selection@ > input << find.c; > @@ > if filter.search(input[0].before, 2): > sys.stderr.write(input[0].before + "\n=====\n") > else: > cocci.include_match(False) > > @display@ > identifier find.x; > type find.t; > @@ > *t x(...) > { ... } > > > Does such a source code analysis approach indicate any details > which should be improved for the affected software documentation? Thank you for your example. We currently use the following Ocaml script to automatically collect functions that need to be considered. @initialize:ocaml@ @@ let relevant_str = "use of_node_put() on it when done" let contains s1 s2 = let re = Str.regexp_string s2 in try ignore (Str.search_forward re s1 0); true with Not_found -> false let relevant_functions = ref [] let add_function f c = if not (List.mem f !relevant_functions) then begin let s = String.concat " " ( (List.map String.lowercase_ascii (List.filter (function x -> Str.string_match (Str.regexp "[a-zA-Z_\\(\\)][-a-zA-Z0-9_\\(\\)]*$") x 0) (Str.split (Str.regexp "[ .;\t\n]+") c)))) in Printf.printf "comments: %s\n" s; if contains s relevant_str then Printf.printf "Found relevant function: %s\n" f; relevant_functions := f :: !relevant_functions; end @r@ identifier fn; comments c; type T = struct device_node *; @@ T@c fn(...) { ... } @script:ocaml@ f << r.fn; c << r.c; @@ let (cb,cm,ca) = List.hd c in let c = String.concat " " cb in add_function f c -- Regards, Wen